這幾天學(xué)了LCD1602模塊及其顯示原理,下面是我對(duì)LCD1602顯示的理解。 1.1 LCD1602模塊 1602字符型液晶,常用16*2的點(diǎn)陣顯示(主要是5*7點(diǎn)陣/每字符),初始化好后,寫(xiě)命令設(shè)置顯示坐標(biāo),寫(xiě)數(shù)據(jù)到8位數(shù)據(jù)總線上并顯示LCD上。 1.1.1 LCD1602模塊引腳圖 如下圖,為L(zhǎng)CD1602模塊的引腳圖(51單片機(jī)開(kāi)發(fā)板),通過(guò)旋鈕電位器(順時(shí)針可以加亮,反之亦然)。
154955d1ro3l3g9ugcv9l3.png (58.95 KB, 下載次數(shù): 69)
下載附件
2019-1-31 03:22 上傳
圖1.1.1 LCD1602引腳圖 GND、VCC分別是電源地、電源正極。 VO:對(duì)比度調(diào)整端,若僅僅接地,對(duì)比度會(huì)很高,常常接上一個(gè)幾K的電位器或可變電阻來(lái)調(diào)節(jié)對(duì)比度以實(shí)現(xiàn)理想的顯示效果。 RS:寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。 RW:讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。(一般對(duì)于單純的LCD顯示只用到寫(xiě)操作)。 E :使能信號(hào)。 DB0-DB7:8個(gè)數(shù)據(jù)I/O口。 BG_VCC、BG_GND分別是背光電源正極、負(fù)極。
1.1.2 LCD1602.h 下面是LCD1602工作時(shí)序,如圖
2.png (35.1 KB, 下載次數(shù): 62)
下載附件
2019-1-30 15:25 上傳
圖1.1.2 LCD1602工作時(shí)序圖
1.初始化之前需要編寫(xiě)‘寫(xiě)命令操作’。 對(duì)于WriteCom(),由前面知道,寫(xiě)操作需要RW為低電平即‘0’,并且通過(guò)使RS為低電平即‘0’來(lái)選擇命令寄存器,才能寫(xiě)入命令到DATAPINS。另外,每次命令輸入DATAPINS就位后,令使能信號(hào)產(chǎn)生一個(gè)下降沿,將DATAPINS的命令寫(xiě)進(jìn)LCD1602
- void LcdWriteCom(uchar com) //寫(xiě)入命令
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 0; //選擇發(fā)送命令
- LCD1602_RW = 0; //選擇寫(xiě)入
- LCD1602_DATAPINS = com; //放入命令
- Lcd1602_Delayms(1); //等待數(shù)據(jù)穩(wěn)定
- LCD1602_E = 1; //寫(xiě)入時(shí)序,一個(gè)下降沿,將命令傳達(dá)到LCD
- Lcd1602_Delayms(5); //保持時(shí)間
- LCD1602_E = 0;
- }
復(fù)制代碼
2.‘寫(xiě)數(shù)據(jù)操作’也類似,不同之處是RS為高電平即‘1’選擇數(shù)據(jù)寄存器,將數(shù)據(jù)寫(xiě)入DATAPINS,其他都一樣。 - void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù)
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
- LCD1602_RW = 0; //選擇寫(xiě)入
- LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù)
- Lcd1602_Delayms(1);
- LCD1602_E = 1; //寫(xiě)入時(shí)序,一個(gè)下降沿
- Lcd1602_Delayms(5); //保持時(shí)間
- LCD1602_E = 0;
- }
復(fù)制代碼
3.寫(xiě)命令操作編完后就可以進(jìn)行LCD1602的初始化了。
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x38); //功能設(shè)定 0011 1000 (8位數(shù)據(jù)線、顯示2行、每個(gè)字符為5*7點(diǎn)陣)
- //
- LcdWriteCom(0x0c); //顯示開(kāi)關(guān)控制 0000 1100(或+光標(biāo)不閃爍0x0d:0000 1101)(開(kāi)顯示、不開(kāi)光標(biāo)、光標(biāo)閃爍或不閃爍)
- LcdWriteCom(0x06); //進(jìn)入模式設(shè)置 0000 0110(寫(xiě)入數(shù)據(jù)后光標(biāo)右移一位及顯示屏不動(dòng))
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn) //DB7為高電平
- }
復(fù)制代碼
4.調(diào)用LCD1602顯示 - void LCD1602_display()
- {
- unsigned int i,j;
- unsigned char Compu[9]="computer";
- unsigned char Dog[5]="dog";
- LcdInit();
- LcdWriteCom(0x80+15);//第一行顯示C
- LcdWriteData(‘C’);
- LcdWriteCom(0x80);
- /*其他方式顯示:for循環(huán)語(yǔ)句顯示字符串*/
- for(i=0;i<8;i++) //第一行顯示‘computer’
- {
- LcdWriteData(Compu[i]);
- }
- LcdWriteCom(0x80+0x40);
- for(j=0;j<3;j++)// //第二行顯示‘dog’
- {
- LcdWriteData(Dog[j]);
- }
- }
復(fù)制代碼
好了,今天的分享就先到這,雖然只是小case,但是做個(gè)總結(jié)還是蠻有意義的!
|