LCD1602 分為帶背光和不帶背光兩種,基控制器大部分為 HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差別。
字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。lcd1602即為1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實(shí)物如圖所示。
LCD1602主要技術(shù)參數(shù):
顯示容量:16×2個(gè)字符
芯片工作電壓:4.5—5.5V
工作電流:2.0mA(5.0V)
模塊最佳工作電壓:5.0V
字符尺寸:2.95×4.35(W×H)mm
引腳功能說(shuō)明
LCD1602采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接口說(shuō)明如表所示:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
注釋:1602為2行16列,屏幕所能顯示的地址為00H~0FH(第一行),40H~4FH(第二行),其他地址可以存儲(chǔ)待顯示的數(shù)據(jù)。這就給我們的花樣顯示提供了條件哈:-D
運(yùn)行時(shí)序圖
注釋:這里的讀操作指的是C51讀1602的總線數(shù)據(jù),RS=0,RW=1的時(shí)候,E給高電平則可以讀到顯示屏的狀態(tài),這個(gè)功能一般用于讀忙,除了初始化之外,每次對(duì)1602進(jìn)行讀寫操作都要讀忙檢測(cè),當(dāng)總線最高為STAD7=1則為繁忙,禁止讀寫操作。
注釋:這里指的是C51往1602寫數(shù)據(jù)/命令,通過(guò)使能E的高脈沖寫入,在E的下降沿就執(zhí)行寫入的命令或者顯示寫入的數(shù)據(jù)。
接下來(lái)簡(jiǎn)要介紹下1602的相關(guān)指令
常用命令:
0x80+0xdd:dd為地址,這條命令用于設(shè)置顯示起點(diǎn)坐標(biāo)
0x0c :開顯示,無(wú)光標(biāo),光標(biāo)不閃爍 。一般做帶鍵盤輸入的才加入光標(biāo),如計(jì)算器。常用的計(jì)量顯示不顯示光標(biāo)。
0x06 :寫一個(gè)數(shù)據(jù),地址指針加1,由1602地址表可以看出,實(shí)際上就是設(shè)置成從左往右寫數(shù)據(jù)而已。
0x38 : 設(shè)置顯示模式,16x2顯示 5x7點(diǎn)陣,8位數(shù)據(jù)接口。端口不夠用時(shí),這個(gè)命令也可以換用4位數(shù)據(jù)接口的。
0x01 :清屏。
電路連接圖
接下來(lái)寫相關(guān)子程序:
//寫入命令子函數(shù)
void LcdWriteCom(unsigned char com)
{
LCD_RS=0;
LCD_RW=0;
LCD_GPIO=com;
delay1ms(1);
LCD_E=1;
delay1ms(1);
LCD_E=0;
}
//寫入數(shù)據(jù)子函數(shù)
void LcdWriteData(unsigned char dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_GPIO=dat;
delay1ms(1);
LCD_E=1;
delay1ms(1);
LCD_E=0;
}
//讀忙子函數(shù)
bit LCD_bz(void)
{
bit bz;
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
delay1ms(10);
P0=0xff; //C51單片機(jī)讀引腳要先置高電平,原因不贅述,很多資料沒有這一步驟,大家格外注意下
bz=(bit)(LCD_GPIO&0x80);
LCD_E=0;
return bz;
}
//延時(shí)子程序
void delay1ms(unsigned int t)
{
unsigned int i,j; //節(jié)約內(nèi)存起見,建議用uchar,由于后面要做動(dòng)態(tài)顯示,為了滿足顯示效果,這里用了uint
for(i=0;i
{
for(j=0;j《300;j++);
}
}
//初始化顯示屏程序
void LcdInit()
{
LcdWriteCom(0x38);//顯示模式2行16列
LcdWriteCom(0x0c);//開顯示 無(wú)光標(biāo) 不閃爍
LcdWriteCom(0x06);//寫一個(gè)指針加1
LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置(0,0)為起點(diǎn)
}
主程序:
//我們要把第一行做成一個(gè)16字符固定顯示,第二行做成滾動(dòng)顯示25字符
//這里采用的是1602指針右移的基礎(chǔ)命令而不是整屏右移命令
#include
#define LCD_GPIO P0
void LcdWriteCom(unsigned char); //寫入命令子函數(shù)聲明
void LcdWriteData(unsigned char);//寫入數(shù)據(jù)子函數(shù)聲明
void LcdInit();//顯示屏初始化子函數(shù)聲明
void delay1ms(unsigned int);//延時(shí)函數(shù)聲明
bit LCD_bz(void);//讀忙函數(shù)聲明
sbit LCD_RW=P2^5;
sbit LCD_RS=P2^6;
sbit LCD_E=P2^7;
unsigned char displayDate1[]=“ I‘m Cesar ”;//一共16個(gè)字符(包括空格在內(nèi))
unsigned char displayDate2[]=“ Please add QQ775222573 ”;//一共25個(gè)字符
void main(void)
{
unsigned char i=0,j=0,n=0;
LcdInit();
LcdWriteCom(0x80);//設(shè)置坐標(biāo)為第一行第一個(gè)字符
for(i=;i《16;i++)
{
LcdWriteData(displayDate1[ i]);
}
while(1)
{
if(LCD_bz())
continue;//讀忙,結(jié)束本次循環(huán)
LcdWriteCom(0x80+0x40);//設(shè)置第二行第一個(gè)字符起點(diǎn)
for(j=n;j《25+n;j++)//我們沒有進(jìn)行整屏右移,但是我們進(jìn)行了數(shù)組右移O(∩_∩)O~
{
LcdWriteData(displayDate2[j]);
}
n++;//數(shù)組的顯示起點(diǎn)右移,這樣實(shí)現(xiàn)了滾動(dòng)
if(n》=(25-15))//當(dāng)顯示移到最右邊時(shí),停頓片刻,返回起點(diǎn)再次循環(huán)
{
n=0;
delay1ms(2000);
}
delay1ms(600);
}
}
下載到C51調(diào)試結(jié)果:
評(píng)論
查看更多