張玲玲
摘要:液晶顯示器分為段位式LCD、字符式LCD和點陣式LCD,具有機身薄,節省空間,省電,不產生高溫,低輻射,益健康,畫面柔和不傷眼等諸多優點,已經廣泛的應用于各個領域。本文通過51單片機控制系統控制點陣式LCD12864顯示來介紹LCD12864的工作原理及LCD12864的驅動程序設計編寫方法。
關鍵詞:51單片機 LCD12864 程序設計
0 引言
液晶顯示器根據顯示方式可分為:段位式、字符式和點陣式LCD,其中段位式與字符式只能顯示數字與字符。而點陣式LCD不僅能顯示數字與字符,還能顯示各種圖形、曲線及漢字等。本文研究的TG12864B是能顯示曲線、圖形及漢字的點陣式LCD。
1 TG12864介紹
TG12864是一款無字庫的圖形點陣顯示器,其屏幕由64行×128列點陣組成,可以顯示16點陣的4行×8列(32個)漢字、8點陣的8行×8列(64個)字母和128×64全屏幕點陣圖形。
1.1 TG12864B內部功能器件介紹
在使用TG12864B前須了解其相關功能器件,如下所示:①指令寄存器(IR):用于寄存指令碼。②數據寄存器(DR):用于寄存數據的。DR和顯示數據存儲器DDRAM(見表1)之間的數據傳輸是模塊內部自動執行的。③顯示數據RAM(DDRAM):DDRAM是存儲圖形顯示數據的。數據為1表示顯示選擇,數據為0表示顯示非選擇。DDRAM與地址和顯示位置的關系見DDRAM地址表。④XY地址計數器。XY地址計數器是一個9位計數器。高3位是X地址計數器,低6位為Y地址計數器,XY地址計數器實際上是作為DDRAM的地址指針,X地址計數器為DDRAM的頁指針,Y地址計數器為DDRAM的Y地址指針。X地址計數器是沒有記數功能的,只能用指令設置。Y地址計數器具有循環記數功能,各顯示數據寫入后,Y地址自動加1,Y地址指針從0到63。
1.2 TG12864的控制指令
①開關顯示:開顯示,指令碼為0X3F;關顯示,指令碼為0X3E。②設置Y地址:0x40~0x4f,其中0x40為第0列列地址,0x4f為第63列列地址。③設置X頁地址:模塊有64行,其中8行為一頁,即有8頁,A2~A0表示0~7頁:如,當A2~A0為000時表示第0頁,為111是表示第7頁。頁地址分別是0XB8~0XBF。④顯示開始線:該指令中A5~A0為顯示起始行的地址,它規定了顯示屏起始行所對應的顯示存儲器的行地址。通過修改顯示其實行寄存器的內容,可以實現顯示屏向上或向下滾動。⑤讀狀態:BF:判斷忙信號標志位。BF=1表示液晶屏正在處理MCU發過來的指令或者數據,此時接口電路被掛起,不能接受除讀操作以外的任何操作,BF=0表示液晶屏接口控制電路處于空閑狀態,可以接受外部數據和指令。
2 電路設計
圖1 TG12864顯示線路圖
圖1為AT89S51控制12864LCD線路圖,圖中DB0~DB7為TG12864的數據線,單片機通過該端口給TG12864寫命令或讀寫數據;RS為寄存器與顯示內存操作選擇管腳,單片機通過P3.7腳與之連接,當RS腳為高電平時,對液晶顯示器的數據寄存器進行讀或寫操作;當RS腳為低電平時,對命令寄存器進行操作;RW為讀寫控制腳,與單片機P3.6腳連接,當RW腳為高電平時,準備對液晶顯示器執行讀操作,低電平時執行寫操作;E腳為使能端,與P3.5腳連接,下降沿有效;CS1為高電平是選擇芯片(右半屏)信號,CS2為高電平時選擇芯片(左半屏)信號;RST復位腳,低電平復位。
3 LCD12864的驅動程序設計
LCD12864驅動程序的編程要想讓LCD12864顯示出需要的內容,就得嚴格按照LCD12864的工作時序來進行編程。驅動LCD12864顯示程序含有以下幾個子程序:
sbit di=P3^7;//高電平寫數據,低電平寫命令
sbit rw=P3^6;//高電平讀操作,低電平寫操作
sbit e=P3^5;//讀寫使能端,下降沿有效
sbit cs1=P3^4;//定義P3.4為左半屏片選信號
sbit cs2=P3^3;//定義P3.3為右半屏片選信號
sbit rst=P3^2;//TG12864復位信號
sbit bf=P2^7;//檢測LCD忙引腳
sbit res=P2^4;//檢測是否處于復位狀態,高電平處于復位,低電平正常。
define dataport P0 //定義P0口為LCD數據總線,用于傳輸指令命令和顯示數據。
3.1 忙檢測子程序
void check_busy(void)
{
dataport=0xff;
di=0;
rw=1;
delay(1);
e=1;
while(bf||res==1);
e=0;
}
3.2 寫命令或數據子程序
void write( char dat_comm,char content)
{
Chk_busy;
di=dat_comm;//dat_comm為高電平寫數據,低電平寫命令
rw=0;
dataport=content;
e=1;
delay(1);
e=0;
}
3.3 初始化子程序
void init_lcd(void)
{
rst=0;
delay(50);
rst=1;
cs1=1;cs2=1;/左右半屏選中
write(comm,0x3e);//關顯示
write(comm,0x3f);//開顯示
}
4 總結
本文對TG12864B用通俗易懂的語言進行了簡單的介紹,并對TG12864B的驅動程序進行了簡單的設計,使讀者能初步了解12864LCD的簡單應用。要想熟練的掌握TG12864B,還需要不斷的實踐,不斷的摸索,熟悉編程語言,不斷提高TG12864B的編程技巧,使程序得到最大程度的優化。
參考文獻:
[1]朱華光.淺議LCD1602的編程技巧[J].電腦知識與技術,
2010.6.
[2]林嘉.基于89S52的LCD1602程序設計[J].電腦知識與技術,2012.8.
[3]田開坤.基于LCD12864顯示器的數字示波器設計[J].電子制作,2010.5.