详解LCD12864显示屏的使用(并行控制)
一.概述
LCD12864顯示屏是所說的點陣液晶顯示模塊,就是由12864個液晶顯示點組成的一個128列64行的陣列,所以也就叫成了12864。每個顯示點都對應(yīng)著有一位二進(jìn)制數(shù),0表示滅,1表示亮。存儲這些點陣信息的RAM被稱為顯示數(shù)據(jù)存儲器。如果要顯示某個圖形或漢字就是將相應(yīng)的點陣信息寫入到對應(yīng)的存儲單元中。圖形或漢字的點陣信息是由自己設(shè)計(如果模塊帶有字庫,則不需要自己設(shè)計漢字),這時候問題的關(guān)鍵是顯示點在液晶屏上的位置與其在存儲器中的地址之間的關(guān)系。
二.LCD12864基本參數(shù)
1.電氣參數(shù)
- 電源電壓:VDD:+3.0–+5.5V
- 顯示分辨率:128×64點
- 內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)
- 內(nèi)置128個16×8點陣字符
- 2MHZ時鐘頻率
- 顯示方式:STN、半透、正顯
- 驅(qū)動方式:1/32DUTY,1/5BIAS
- 視角方向:6點
- 背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10
- 通訊方式:串行、并口可選
- 內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負(fù)壓
- 無需片選信號,簡化軟件設(shè)計
- 工作溫度:0℃-+55℃,
- 存儲溫度:-20℃-+60℃
2.引腳說明
LCD12864的引腳總共有20個,如圖:
其中,引腳PSB為并/串行接口選擇引腳,高電平為并行控制;低電平為串行控制。
3. 電路圖
其中可調(diào)電阻用于調(diào)整顯示器的對比度。三極管是為增強(qiáng)電流的驅(qū)動能力,為背光LED提供足夠的驅(qū)動電流。
三.控制程序
1.控制時序
LCD12864控制時序有兩種,一種為并行控制時序(本次是以并行為例),另一種是串行控制時序。
簡單來說,大部分情況下我們只對顯示屏做寫操作,讀操作很少用,所以讀操作就不做介紹。LCD12864顯示屏控制程序簡化下來,也相對簡單,只需要實現(xiàn)忙檢查、寫數(shù)據(jù)、寫指令、初始化四個控制函數(shù)即可實現(xiàn)對LCD12864的控制。寫時序如圖:
2. 忙狀態(tài)檢查函數(shù)
/******************************************************************************* * 函 數(shù) 名 : LCD12864_Busy * 函數(shù)功能 : 檢測LCD是否忙 * 輸 入 : 無 * 輸 出 : 1或0(1表示不忙,0表示忙) *******************************************************************************/ uchar LCD12864_Busy(void) {uchar i = 0;LCD12864_RS = 0; //選擇命令LCD12864_RW = 1; //選擇讀取LCD12864_EN = 1;LCD12864_Delay1ms(1);while((LCD12864_DATAPORT & 0x80) == 0x80) //檢測讀取到的值{i++;if(i > 100){LCD12864_EN = 0;return 0; //超過等待時間返回0表示失敗}}LCD12864_EN = 0;return 1; }3. 寫指令函數(shù)
/******************************************************************************* * 函 數(shù) 名 : LCD12864_WriteCmd * 函數(shù)功能 : 寫命令 * 輸 入 : cmd * 輸 出 : 無 *******************************************************************************/ void LCD12864_WriteCmd(uchar cmd) {uchar i;i = 0;while( LCD12864_Busy() == 0){LCD12864_Delay1ms(1);i++;if( i>100){return; //超過等待退出} } LCD12864_RS = 0; //選擇命令LCD12864_RW = 0; //選擇寫入LCD12864_EN = 0; //初始化使能端LCD12864_DATAPORT = cmd; //放置數(shù)據(jù)LCD12864_EN = 1; //寫時序LCD12864_Delay1ms(5);LCD12864_EN = 0; }4. 寫數(shù)據(jù)函數(shù)
/******************************************************************************* * 函 數(shù) 名 : LCD12864_WriteData * 函數(shù)功能 : 寫數(shù)據(jù) * 輸 入 : dat * 輸 出 : 無 *******************************************************************************/ void LCD12864_WriteData(uchar dat) {uchar i;i = 0;while( LCD12864_Busy() == 0){LCD12864_Delay1ms(1);i++;if( i>100){return; //超過等待退出} }LCD12864_RS = 1; //選擇數(shù)據(jù)LCD12864_RW = 0; //選擇寫入LCD12864_EN = 0; //初始化使能端LCD12864_DATAPORT = dat; //放置數(shù)據(jù)LCD12864_EN = 1; //寫時序LCD12864_Delay1ms(5);LCD12864_EN = 0; }與LCD1602一樣,LCD12864寫數(shù)據(jù)和寫指令的區(qū)別在于RS引腳的電平;RS為高電平時,寫數(shù)據(jù);RS為低電平時,寫指令。
5. 初始化函數(shù)
/******************************************************************************* * 函 數(shù) 名 : LCD12864_Init * 函數(shù)功能 : 初始化LCD12864 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void LCD12864_Init() {LCD12864_PSB = 1; //選擇并行輸入LCD12864_RST = 1; //復(fù)位 ?LCD12864_WriteCmd(0x30); //選擇基本指令操作LCD12864_WriteCmd(0x0c); //顯示開,關(guān)光標(biāo)LCD12864_WriteCmd(0x01); //清除LCD12864的顯示內(nèi)容 }四.顯示程序
在LCD12864上顯示特定的字符,實際上就是對LCD12864的DDRAM上寫入對應(yīng)的數(shù)據(jù),顯示屏便顯示你想要的字符。其中,英文字符占用1個字節(jié),中文字符占用2個字節(jié)。
1. 顯示坐標(biāo)關(guān)系
如上圖所示,第一行顯示的地址為80H-87H,第二行為90H-97H,第三行為88H-8FH,第四行為98H-9FH。所以要顯示屏上哪個位置顯示哪個漢字,只需要寫入對應(yīng)位置的地址,再寫入對應(yīng)漢字即可。
2. 顯示漢字
只要實現(xiàn)以上忙檢查、寫數(shù)據(jù)、寫指令、初始化四個控制函數(shù),就可以實現(xiàn)LCD12864顯示屏漢字的顯示控制。
顯示函數(shù)只需要寫入起始坐標(biāo),然后顯示對應(yīng)的漢字。
/******************************************************************************* * 函 數(shù) 名 : LCD12864_SetWindow * 函數(shù)功能 : 設(shè)置在基本指令模式下設(shè)置顯示坐標(biāo),并顯示漢字。注意:x是設(shè)置行,y是設(shè)置列 * 輸 入 : x, y,word * 輸 出 : 無 *******************************************************************************/ void LCD12864_SetWindow(uchar x, uchar y,uchar *word) {uchar pos;uchar i=y;if(x == 0) // 第一行的地址是80Hx = 0x80; else if(x == 1) //第二行的地址是90Hx = 0x90; else if(x == 2) //第三行的地址是88Hx = 0x88; else if(x == 3) //第三行的地址是98Hx = 0x98;pos = x + y;LCD12864_WriteCmd(pos); while(word[i]!='\0'){if(i<16) //判斷是否在本行的顯示范圍內(nèi){LCD12864_WriteData(word[i]);i++;} } }3.主函數(shù)
最后,在主函數(shù)上實現(xiàn)漢字的顯示了。
#include<reg51.h> #include"lcd12864.h" ? unsigned char code CharCode[]="電子應(yīng)用學(xué)習(xí)館"; ? void main() {unsigned char i; ?LCD12864_Init();LCD12864_SetWindow(0, 0,CharCode);while(1); }如需LCD12864相關(guān)資料及例程, 請關(guān)注公眾號,首頁回復(fù)LCD12864獲取資料
總結(jié)
以上是生活随笔為你收集整理的详解LCD12864显示屏的使用(并行控制)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DS Storage Manager 忘
- 下一篇: 【转】刷新BIOS