LCD_1602, 學(xué)過(guò)單片機(jī)的朋友們都知道它了吧,可以說(shuō)是用的最廣,最簡(jiǎn)單,也是學(xué)液晶入門級(jí)別的一塊液晶了。LCD1602顧名思義就是兩行顯示的液晶,每行最多顯示16個(gè)字符(里面總共有160個(gè)字符),其中包括阿拉伯?dāng)?shù)字、英文字母的大小寫,常用符號(hào),及日文的假名!每個(gè)字符對(duì)應(yīng)一個(gè)ASCII碼,我們通過(guò)向液晶送相應(yīng)符號(hào)的ASCII碼來(lái)顯示這個(gè)字符。
0x00:第一個(gè)(0x40) 0x01:第二個(gè)(0x48) 0x02:第三個(gè)(0x50) 0x03:第四個(gè)(0x58) 0x04:第五個(gè)(0x60) 0x05:第六個(gè)(0x68) 0x06:第七個(gè)(0x70) 0x07:第八個(gè)(0x78)
具體的流程是這樣的:“顯示字符的數(shù)組數(shù)據(jù)”--->"定義第幾個(gè)自定義字符"--->“像地址中發(fā)送數(shù)組數(shù)據(jù)”--->“規(guī)定顯示位置”--->“顯示第幾個(gè)自定義字符”--->OK!
自己想顯示什么字符或圖像可以自己計(jì)算一下對(duì)應(yīng)的數(shù)組數(shù)據(jù),最好自己弄一個(gè)取模軟件比較好,我一開(kāi)始都是自己算的,感覺(jué)好麻煩。
/***** 下面我寫一個(gè)用51驅(qū)動(dòng)LCD1602的程序 *****/
接口方面根據(jù)自己的實(shí)際電路決定。程序的完整版本下載: http://m.raoushi.com/f/1602cc.rar
/* 這里是我自己的經(jīng)驗(yàn):在數(shù)據(jù)手冊(cè)中說(shuō)下降沿寫入命令,但是我用上升沿寫入也是好使的,這里我還是用下降沿吧;下面這條是重點(diǎn),自習(xí)看下你板子上的晶振大小,最好是在下程序的時(shí)候看下具體大小事多少,如果你的晶振>11.5M的話最好在下面我標(biāo)注的地方加延時(shí),不然很可能什么都不顯示,而且找不到錯(cuò)誤。 */
#include<reg52.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;//LCD的三個(gè)控制端
unsigned char table[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};
void delay(unsigned int i)
{
while(--i);
}
void Read_busy() //忙檢測(cè),DB7為1則busy,不能進(jìn)行讀寫操作 ;每次讀寫前應(yīng)"讀忙"檢測(cè)
{
P0=0x00;
RS=0;
RW=1;
EN=1;
while(P0 & 0x80);
EN=0;
}
void write_LCD_command(unsigned char value)//寫命令函數(shù)
{
Read_busy();
RS=0;
RW=0;
EN=1;
P0=value;
delay(100);
EN=0;
}
void write_LCD_data(unsigned char value)//寫命令函數(shù)
{
Read_busy();
RS=1;
RW=0;
EN=1;
P0=value;
delay(100);
EN=0;
}
void init_LCD()
{
write_LCD_command(0x38);
//在這里加延時(shí)
delay(5);
write_LCD_command(0x0c);//開(kāi)顯示,不顯示光標(biāo),且不閃爍
//在這里加延時(shí)
delay(5);
write_LCD_command(0x06);//每次寫入數(shù)據(jù)后地址指針加1
//在這里加延時(shí)
delay(5);
write_LCD_command(0x01);//清屏
}
void main()
{
unsigned char num;
init_LCD();
write_LCD_command(0x40); //對(duì)CGRAM第一個(gè)自定義字符操作,若是第二個(gè)則為0x48,其次類推(上面有對(duì)頂?shù)年P(guān)系)
for(num=0;num<8;num++)
{
write_LCD_data(table[num]);
}
write_LCD_command(0x80); //規(guī)定顯示在第一行第一個(gè)位置
write_LCD_data(0x00); //顯示第一個(gè)自定義字符 (0x40對(duì)應(yīng)第一個(gè):0x00)
while(1);
}
/*到這里程序結(jié)束了,第一次寫可能說(shuō)的不夠清晰,有不懂的可以留言給我^_^*/
