?? 12864液晶.c
字號:
{ while(*s>0)
{ write_data(*s);
s++;
delay(50);
}
}
/*------------------首屏顯示--------------------------*/
void ceshi()
{write_com(0x01);//清除顯示,并且設定地址指針為00H
delay(5);
write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
hzkdis(" www.01mcu.net");
write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一個位置顯示)
hzkdis("學習單片機的搖籃");
write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一個位置顯示)
hzkdis("LCD12864點陣液晶");
write_com(0x9A);//第四行(如果是地址是:98H,即LCD的第二行的第一個位置顯示)
hzkdis("測試程序");
}
/*------------------顯示圖片------------------------*/
void Disp_Img(unsigned char code *img)
{ unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)/*原來 為 y<26 ,上下兩個半屏不能正常對接顯示,導致顯示的圖片中間有空隙*/
for(x=0;x<8;x++)
{ write_com(0x36);//功能設置---8BIT控制界面,擴充指令集
write_com(y+0x80); //行地址
write_com(x+0x80+i); //列地址
write_com(0x30);
write_data(img[j++]);
write_data(img[j++]);
}
}
/*------------------清整個GDRAM空間----------------------------*/
void clrgdram()
{ unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{ write_com(0x34);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x00);
}
}
/*------------------整屏寫入數據:全亮,或者豎條-----------------------------*/
void lcdfill(unsigned char disdata)
{ unsigned char x,y;
for(y=0;y<32;y++)
for(x=0;x<16;x++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(disdata);
write_data(disdata);
}
write_com(0x34);
write_com(0x36);
}
/*------------------顯示橫-----------------------------*/
void Disp_H_Line()
{ unsigned char x,y;
unsigned char k=0x00;
for(y=0;y<32;y++)
{ k=~k;
for(x=0;x<16;x++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(k);
write_data(k);
};
}
write_com(0x34);
write_com(0x36);
}
/*------------------顯示邊框-------------------------------*/
void Frame()
{unsigned char x,y;
lcdfill(0x00);
for(x=0;x<9;x+=8)
for(y=0;y<32;y++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(0x80);
write_data(0x00);
write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x87); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x01);
}
for(y=0;y<2;y++)
for(x=0;x<8;x++)
{write_com(0x36);
write_com(y*31+0x80); //行地址
write_com(x+0x80+8*y); //列地址
write_com(0x30);
write_data(0xff);
write_data(0xff);
}
write_com(0x34);
write_com(0x36);
}
/*------------------在第7列的位置加入兩條豎線--------------------------*/
void shuxian()
{ unsigned char x,y;
for(x=0;x<9;x+=8)
for(y=0;y<32;y++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x86); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x14);
};
}
/*------------------清屏命令--------------------------*/
void clrscreen()
{
write_com(0x01);
delay(10);
}
/*------------------唐詩《靜夜思》--------------------------*/
void gushi_display()
{ write_com(0x30);
clrscreen();
write_com(0x80+FIRST_ADDR);
hzkdis("床前明月光,");
write_com(0x90+FIRST_ADDR);
hzkdis("疑是地上霜。");
write_com(0x88+FIRST_ADDR);
hzkdis("舉頭望明月,");
write_com(0x98+FIRST_ADDR);
hzkdis("低頭思故鄉。");
write_com(0xb3+FIRST_ADDR);
hzkdis("靜夜思");
write_com(0xaa+FIRST_ADDR);
hzkdis("( 唐 )李白");
}
main()
{ unsigned char i;
while(1)
{
RW=0;
lcdreset(); //初始化LCD屏
CGRAM();
ceshi(); //顯示測試字樣
delay(2000);
clrgdram();
clrscreen(); //清屏
Disp_Img(BMP); //調入一幅圖畫
delay(30000);
Disp_Img(BMP1); //調入一幅圖畫
delay(20000);
lcdfill(0xff); //顯示全開
delay(2000);
Disp_H_Line(); //顯示橫條
delay(2000);
lcdfill(0xaa); //顯示豎條
delay(2000);
Frame(); //顯示邊框
delay(2000);
gushi_display(); //顯示唐詩
clrgdram();
write_com(0x87); //調用自定義的CGRAM的代碼
write_data(0x00);
write_data(0x00);
delay(400);
shuxian(); //加入兩條豎線
delay(8000);
write_com(0x30);
delay(2000);
gushi_display();
delay(6000);
for(i=0;i<8;i++) //字符循環左移
{write_com(0x18);
delay(2000);}
gushi_display();
delay(6000);
write_com(0x36);
write_com(0x04); //第一行反白顯示
delay(6000);
write_com(0x04); //第一行恢復正常
delay(6000);
write_com(0x05); //第二行反白顯示
delay(6000);
write_com(0x05); //第二行恢復正常
delay(6000);
write_com(0x03); //垂直滾動屏幕的內容
write_com(0x60);
delay(6000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -