一. 概述
LCD12864顯示屏是所說的點陣液晶顯示模塊,就是由12864個液晶顯示點組成的一個128列 64行的陣列,所以也就叫成了12864。 每個顯示點都對應著有一位二進制數,0表示滅,1表示亮。 存儲這些點陣信息的RAM被稱為顯示數據存儲器。 如果要顯示某個圖形或漢字就是將相應的點陣信息寫入到對應的存儲單元中。 圖形或漢字的點陣信息是由自己設計(如果模塊帶有字庫,則不需要自己設計漢字),這時候問題的關鍵是顯示點在液晶屏上的位置與其在存儲器中的地址之間的關系。
二. LCD12864基本參數
1.電氣參數
- 電源電壓:VDD:+3.0--+5.5V
- 顯示分辨率:128×64點
- 內置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)
- 內置128個16×8點陣字符
- 2MHZ時鐘頻率
- 顯示方式:STN、半透、正顯
- 驅動方式:1/32DUTY,1/5BIAS
- 視角方向:6點
- 背光方式:側部高亮白色LED,功耗僅為普通LED的1/5—1/10
- 通訊方式:串行、并口可選
- 內置DC-DC轉換電路,無需外加負壓
- 無需片選信號,簡化軟件設計
- 工作溫度:0℃-+55℃,存儲溫度:-20℃-+60℃
2. 引腳說明
LCD12864的引腳總共有20個,如圖:
其中,引腳PSB為并/串行接口選擇引腳,高電平為并行控制; 低電平為串行控制。
3. 電路圖
其中可調電阻用于調整顯示器的對比度。 三極管是為增強電流的驅動能力,為背光LED提供足夠的驅動電流。
三. 控制程序
1.控制時序
LCD12864控制時序有兩種,一種為并行控制時序(本次是以并行為例),另一種是串行控制時序。
簡單來說,大部分情況下我們只對顯示屏做寫操作,讀操作很少用,所以讀操作就不做介紹。 LCD12864顯示屏控制程序簡化下來,也相對簡單,只需要實現忙檢查、寫數據、寫指令、初始化四個控制函數即可實現對LCD12864的控制。 寫時序如圖:
2. 忙狀態檢查函數
/*******************************************************************************
* 函 數 名 : LCD12864_Busy
* 函數功能 : 檢測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. 寫指令函數
/*******************************************************************************
* 函 數 名 : LCD12864_WriteCmd
* 函數功能 : 寫命令
* 輸 入 : 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; //放置數據
LCD12864_EN = 1; //寫時序
LCD12864_Delay1ms(5);
LCD12864_EN = 0;
}
4. 寫數據函數
/*******************************************************************************
* 函 數 名 : LCD12864_WriteData
* 函數功能 : 寫數據
* 輸 入 : 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; //選擇數據
LCD12864_RW = 0; //選擇寫入
LCD12864_EN = 0; //初始化使能端
LCD12864_DATAPORT = dat; //放置數據
LCD12864_EN = 1; //寫時序
LCD12864_Delay1ms(5);
LCD12864_EN = 0;
}
與LCD1602一樣,LCD12864寫數據和寫指令的區別在于RS引腳的電平; RS為高電平時,寫數據; RS為低電平時,寫指令。
5. 初始化函數
/*******************************************************************************
* 函 數 名 : LCD12864_Init
* 函數功能 : 初始化LCD12864
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void LCD12864_Init()
{
LCD12864_PSB = 1; //選擇并行輸入
LCD12864_RST = 1; //復位
LCD12864_WriteCmd(0x30); //選擇基本指令操作
LCD12864_WriteCmd(0x0c); //顯示開,關光標
LCD12864_WriteCmd(0x01); //清除LCD12864的顯示內容
}
四. 顯示程序
在LCD12864上顯示特定的字符,實際上就是對LCD12864的DDRAM上寫入對應的數據,顯示屏便顯示你想要的字符。 其中,英文字符占用1個字節,中文字符占用2個字節。
1. 顯示坐標關系
如上圖所示,第一行顯示的地址為80H-87H,第二行為90H-97H,第三行為88H-8FH,第四行為98H-9FH。 所以要顯示屏上哪個位置顯示哪個漢字,只需要寫入對應位置的地址,再寫入對應漢字即可。
2. 顯示漢字
只要實現以上忙檢查 、 寫數據 、 寫指令 、初始化四個控制函數,就可以實現LCD12864顯示屏漢字的顯示控制。
示函數只需要寫入起始坐標,然后顯示對應的漢字。
/*******************************************************************************
* 函 數 名 : LCD12864_SetWindow
* 函數功能 : 設置在基本指令模式下設置顯示坐標,并顯示漢字。注意:x是設置行,y是設置列
* 輸 入 : x, y,word
* 輸 出 : 無
*******************************************************************************/
void LCD12864_SetWindow(uchar x, uchar y,uchar *word)
{
uchar pos;
uchar i=y;
if(x == 0) // 第一行的地址是80H
x = 0x80;
else if(x == 1) //第二行的地址是90H
x = 0x90;
else if(x == 2) //第三行的地址是88H
x = 0x88;
else if(x == 3) //第三行的地址是98H
x = 0x98;
pos = x + y;
LCD12864_WriteCmd(pos);
while(word[i]!='\\0')
{
if(i<16) //判斷是否在本行的顯示范圍內
{
LCD12864_WriteData(word[i]);
i++;
}
}
}
3.主函數
最后,在主函數上實現漢字的顯示了。
#include
#include"lcd12864.h"
unsigned char code CharCode[]="電子應用學習館";
void main()
{
unsigned char i;
LCD12864_Init();
LCD12864_SetWindow(0, 0,CharCode);
while(1);
}
-
存儲器
+關注
關注
38文章
7453瀏覽量
163608 -
液晶
+關注
關注
6文章
606瀏覽量
69611 -
顯示屏
+關注
關注
28文章
4457瀏覽量
74132 -
LCD12864
+關注
關注
7文章
232瀏覽量
44840 -
顯示模塊
+關注
關注
1文章
48瀏覽量
23559
發布評論請先 登錄
相關推薦
評論