跟我學(xué)51單片機(jī)(八)——圖型帶字庫液晶128×64
出處:chunyang 發(fā)布于:2011-09-19 11:07:04
上期我向大家介紹了字符型液晶1602的基本功能,并用51單片機(jī)的驅(qū)動(dòng)顯示,你可以用它表達(dá)你的幸運(yùn)日期或者你喜歡的數(shù)字。雖然說1602液晶使用方便,但如果你想用它表達(dá)更多的語言,就難以滿足要求了,因此,我向大家介紹一款128×64的帶字庫液晶。
一、原理簡(jiǎn)介
我手里的這款128×64液晶內(nèi)部是以ST7920芯片作為控制器,是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標(biāo)、二級(jí)簡(jiǎn)體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192個(gè)16×16點(diǎn)漢字,和128個(gè)16×8點(diǎn)ASCII字符集。可以顯示8×4行16×16點(diǎn)陣的漢字。因此利用該液晶模塊可以靈活的構(gòu)成全中文人機(jī)交互圖形界面,也可完成圖形顯示。低電壓低功耗也是其一顯著特點(diǎn)。其外觀圖如圖1(a)所示,其管腳排布如圖1(b)所示。

值得說明一點(diǎn)的是,只要是控制器為ST7920芯片(或者類似芯片型號(hào))的帶字庫的128×64液晶,不論其背光的顏色(普遍可見的有黃綠色、藍(lán)色和白色),甚至管腳分布稍有差異,其特性與控制方法基本都是一樣。128×64液晶的管腳各功能如表1所示。

其中并行模式下,管腳RS為高電平時(shí), DB7~DB0為顯示數(shù)據(jù);RS為低電平時(shí),表示DB7~DB0為顯示指令。
R/W管腳為高電平且E為高電平時(shí),數(shù)據(jù)被讀到DB7~DB0,R/W管腳為低電平且E管腳從高電平跳到低電平時(shí),DB7~DB0的數(shù)據(jù)被寫到IR或DR,如表2、表3所示。


值得注意的是,當(dāng)128×64液晶工作在2線或3線串行接口方式時(shí),所需要的控制管腳發(fā)生改變,如表1中所示,第4管腳成為串行的片選信號(hào),第5管腳成為串行的數(shù)據(jù)口,而第6管腳成為串行的同步時(shí)鐘,所以表2、3不適合串行工作下的管腳狀態(tài)。本文中對(duì)串行控制128×64液晶不做過多介紹,感興趣的讀者可以在本刊網(wǎng)站(www.ele169.com)串行控制程序。
12864液晶模塊的控制芯片有兩套控制命令,分為基本指令和擴(kuò)充指令。這里介紹幾個(gè)12864液晶編程時(shí)經(jīng)常用到的幾個(gè)指令(見表4)。

二、電路詳解
如圖2所示,128×64液晶的控制管腳都接到了單片機(jī)管腳上,前文提到,在功能設(shè)置指令中可以將液晶設(shè)為并行的8位、4位數(shù)據(jù)接口,圖中采用的是8位的數(shù)據(jù)接口,當(dāng)然也可以當(dāng)四位數(shù)據(jù)接口或者串行接口來用。另液晶電源正端接5V,負(fù)端接地,背光正端由5V經(jīng)過一個(gè)二極管降壓后接入,負(fù)端接地。此外,液晶的偏壓管腳(VO)接到一個(gè)電位器的中間抽頭,電位器的兩端分別接5V和地,這樣就可通過調(diào)節(jié)電位器來實(shí)現(xiàn)對(duì)128×64液晶對(duì)比度的調(diào)節(jié)。經(jīng)實(shí)驗(yàn)測(cè)試,筆者手里的128×64液晶的偏壓管腳的電壓調(diào)節(jié)到3.6~3.7V時(shí)對(duì)比度效果。讀者可以自己實(shí)踐測(cè)試。

圖2 128×64液晶與單片機(jī)的連接圖
三、程序設(shè)計(jì)
在程序設(shè)計(jì)之前,我們先了解下128×64液晶內(nèi)部控制器ST7920的讀寫時(shí)序,其讀寫時(shí)序如圖3、4所示。

圖3 ST7920的數(shù)據(jù)寫入時(shí)序(8位數(shù)據(jù)線模式)

圖4 ST7920的數(shù)據(jù)讀取時(shí)序(8位數(shù)據(jù)線模式)
對(duì)照時(shí)序圖和表2、表3,我們可以很容易的寫出驅(qū)動(dòng)128×64液晶的各個(gè)子函數(shù),如下所示:
/*讀忙函數(shù):檢測(cè)液晶是否能夠接收數(shù)據(jù)或命令,可用
一段延時(shí)替代*/
void check_busy(void)
{
BF = HIGH;
//將讀忙管腳設(shè)為輸入
RS = LOW;
//讀忙時(shí),RS電平應(yīng)為低
RW = HIGH;
//讀忙時(shí),RS電平應(yīng)為高
E = HIGH;
//E置高,配合數(shù)據(jù)讀取
while(BF==1);
//死循環(huán),如果忙,則一直等待
E = LOW; //E置低
}
/*寫指令函數(shù):向寄存器寫入控制字
參數(shù):cmd - 要寫入的控制字*/
void LCD_en_command(uchar cmd)
{
check_busy();
//先檢測(cè)液晶是否能夠接收指令
RS= LOW;
//寫指令時(shí),RS電平應(yīng)為低
RW=LOW;
//寫指令時(shí),RS電平應(yīng)為低
LCDIO= cmd;
//將要寫入的指令輸出到對(duì)應(yīng)的端口
E=HIGH;
//E置高
E=LOW;
//E置低,下降沿寫入數(shù)據(jù)
}
/*寫數(shù)據(jù)函數(shù):向寄存器寫入數(shù)據(jù)
參數(shù):dat - 要寫入的數(shù)據(jù)*/
void LCD_en_dat(uchar dat)
{
check_busy();
//先檢測(cè)液晶是否能夠接收數(shù)據(jù)
RS=HIGH;
//寫數(shù)據(jù)時(shí),RS電平應(yīng)為高
RW=LOW;
//寫數(shù)據(jù)時(shí),RW電平應(yīng)為低
LCDIO=dat;
//將要寫入的數(shù)據(jù)輸出到對(duì)應(yīng)的端口
E=HIGH;
//E置高
E=LOW;
//E置低,下降沿寫入數(shù)據(jù)
}
要使128×64液晶能正常工作和操作方便,除了寫數(shù)據(jù)和命令函數(shù)外,還需要進(jìn)行初始化等操作,先將本講中所用到的操作128×64液晶的主要函數(shù)設(shè)計(jì)如下。
液晶初始化函數(shù):初始化液晶,設(shè)置液晶的工作方式等。
void LCD_init(void)
{
RST=0;
//RST管腳置低,復(fù)位液晶
LCD_delay();
//延時(shí)一段時(shí)間,以完全復(fù)位
RST=1;
//RST管腳置高,復(fù)位完成
PSB=1;
//PSB管腳置高,并行工作模式
LCD_en_command(0x30);
//設(shè)置8位并數(shù)據(jù)格式
LCD_en_command(0x0c);
//開顯示器
LCD_en_command(0x80);
//顯示起始地址
CLEARSCREEN();
//對(duì)液晶進(jìn)行清屏
}
/*設(shè)置顯示地址函數(shù):
參數(shù):x取值范圍:0~7;y取值范圍:1~4 */
void LCD_set_xy( uchar x, uchar y )
{
switch(y) //判斷是哪一行顯示
{
case 1:LCD_en_command(0x80 + x);break;
//如果是行,地址加0x80
case 2:LCD_en_command(0x90 + x);break;
//如果是第二行,地址加0x90
case 3:LCD_en_command(0x88 + x);break;
//如果是第三行,地址加0x88
case 4:LCD_en_command(0x98 + x);break;
//如果是第四行,地址加0x98
default:break; //否則退出
}
}
/*寫字符串函數(shù):向液晶寫入字符串
參數(shù):x-列坐標(biāo),y-行坐標(biāo),*s-將要顯示的字符串?dāng)?shù)
據(jù)*/
void LCD_write_string(uchar x, uchar y, uchar *s)
{
LCD_set_xy( x, y );
//先設(shè)置要顯示的地址
while (*s) //如果當(dāng)前字符沒有結(jié)束
{
LCD_en_dat(*s); //顯示當(dāng)前字符
s ++; //指向下一個(gè)字符
}
}
四、調(diào)試要點(diǎn)與實(shí)驗(yàn)現(xiàn)象
接好硬件(特別是連接好128×64液晶),通過冷啟動(dòng)方式將程序所生成的。hex文件到單片機(jī)運(yùn)行后,復(fù)位單片機(jī),然后就可在學(xué)習(xí)板上看到12864液晶上顯示的“128×64液晶測(cè)試”等字符。
調(diào)試128×64液晶時(shí)應(yīng)注意的是,對(duì)于液晶的讀忙函數(shù)如果用一段延時(shí)代替的話,一定要足夠長(zhǎng),不同128×64液晶的所需要的時(shí)間可能稍許不同,這也是導(dǎo)致液晶無顯示,出亂碼等的常見原因。此外,與前講介紹的1602液晶相似,對(duì)于128×64液晶上的V0管腳,作為液晶顯示器對(duì)比度調(diào)整端,其接正電源時(shí)對(duì)比度弱,接地電源時(shí)對(duì)比度,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,因此可通過一個(gè)電位器實(shí)現(xiàn)對(duì)其的電壓調(diào)整,前文提到,將其調(diào)節(jié)到3.6~3.7V 時(shí)對(duì)比度效果。
五、總結(jié)
本講簡(jiǎn)要介紹了帶字庫128×64液晶的工作原理并給出了驅(qū)動(dòng)實(shí)例,在液晶的操作時(shí)序一定要嚴(yán)格,需參考其數(shù)據(jù)手冊(cè)或規(guī)格書。
對(duì)于128×64液晶,如果在實(shí)際應(yīng)用中僅使用并口或串口通信模式,可將PSB(第15腳)接固定電平,并口時(shí)接高電平;串口時(shí)接低電平,從而節(jié)省控制管腳。
128×64液晶的內(nèi)部接有上電復(fù)位電路,因此可以將RESET(第17腳)懸空或者接到電源正上,以節(jié)省控制管腳。
128×64液晶內(nèi)部帶有豐富的DDRAM(文本顯示RAM)和GDRAM(繪圖RAM),本文只是對(duì)其驅(qū)動(dòng)方法經(jīng)行了介紹,但具體如何實(shí)現(xiàn)等需要讀者自己實(shí)踐。
液晶的顯示對(duì)后續(xù)程序的輔助作業(yè)很大,可以用它來顯示一些調(diào)試信息或者測(cè)量數(shù)據(jù)等非常方便,下講就將結(jié)合液晶顯示來實(shí)現(xiàn)一個(gè)單片機(jī)的簡(jiǎn)易頻率計(jì),敬請(qǐng)期待。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機(jī)技術(shù)特性與嵌入式開發(fā)實(shí)踐指南2026/1/7 10:00:02
- 單片機(jī)(MCU)與數(shù)字信號(hào)處理器(DSP)分類及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級(jí)DSP信號(hào)處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機(jī)專用SoC單片機(jī)2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類型擴(kuò)充定義2025/10/27 13:59:22









