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