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