LCD顯示器與PIC16F877單片機(jī)連接
一.引言
液晶顯示器以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用。而美國Microchip公司生產(chǎn)的PIC系列單片機(jī)系用精簡指令集(RISC),哈佛總線結(jié)構(gòu)、2級(jí)流水線取指令方式,具有實(shí)用、低價(jià)、指令集小、簡單易學(xué)、低功耗、高速度、體積小、功能強(qiáng)而逐漸成為8位單片機(jī)的新潮流。這里以JHD161A液晶模塊與PIC16F877的連接來介紹它的使用方法。
二.JHD161A LCD顯示器及其與PIC16F877單片機(jī)的連接
JHD161A液晶模塊是一種用5x7點(diǎn)陣圖形來顯示字符的液晶顯示器,是武漢博控科技有限公司生產(chǎn)的1行16個(gè)字符的LCD顯示模塊,它采用的控制芯片是三星電子公司生產(chǎn)KS0066驅(qū)動(dòng)芯片。它采用16腳接口,其中VSS為地電源,VDD接5V正電源,V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度(如圖1中的RW)。RS為顯示、指令選擇線,當(dāng) RS為高電平時(shí)單片機(jī)向LCD模塊進(jìn)行讀寫操作;E為數(shù)據(jù)接收、發(fā)送標(biāo)志,每當(dāng)E線向LCD模塊發(fā)送一個(gè)脈沖,LCD模塊與單片機(jī)之間將進(jìn)行一次數(shù)據(jù)交換;R/W為讀寫選擇線,當(dāng)RS和R/W同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。E端為使能端,當(dāng)E端由高電平跳變成 低電平時(shí),液晶模塊執(zhí)行命令。A、K分別是LCD模塊背光的正負(fù)電源,如圖1所示,我們用AR5控制背光,改變R5的值將改變背光亮度。DB0~DB7依次與單片機(jī)的RD0~RD7連接,為8位雙向數(shù)據(jù)線。JHD161A LCD顯示器與PIC16F877單片機(jī)的連接圖見圖1
KS0066是用低功耗CMOS技術(shù)制造的大規(guī)模點(diǎn)陣LCD控制器兼帶驅(qū)動(dòng)器,和4Bin/8Bin 微處理器相連能使點(diǎn)陣LCD顯示大小英文字母符號(hào)。應(yīng)用KS0066用戶能用少量元件就可組成一個(gè)完整點(diǎn)陣LCD系統(tǒng),并可選擇5x 7 或5 x10 點(diǎn)字符。KS0066液晶模塊控制器內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了192個(gè)不同的5x 7點(diǎn)陣字符圖形(它還有CGRAM,可自行建立字模),這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“P”的代碼是01010000B(50H),顯示時(shí)模塊把地址50H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“P”。
KS0066液晶模塊控制器的內(nèi)部共有11條控制指令,它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的,指令如表1。指令1:清顯示,指令碼 01H,光標(biāo)復(fù)位到地址00H位置 。指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式, I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移; S:屏幕上所有文字是否左移或者右移,高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制, D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 ;C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo); B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍 。指令5:光標(biāo)或顯示移位, S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。指令6:功能設(shè)置命令, DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線; N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示; F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號(hào)和光標(biāo)地址。 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。
三.JHD161A LCD顯示器的控制程序流程圖
1.顯示數(shù)據(jù)程序流程圖
JHD161A液晶顯示模塊可以和單片機(jī)PIC16F877直接接口,它有直接訪問方式和間接控制方式。液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要判斷模塊的忙標(biāo)志是否為低電平。其顯示地址的分配如表2,要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,比如第九個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第九個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒為高電平1,所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。JHD161A的1行16個(gè)字符分成兩組,左右各8個(gè),兩組的地址不是連續(xù)的,各自的起始地址分別是80H和C0H。送顯示數(shù)據(jù)的方法是先送第1位的起始地址80H后可連續(xù)送8個(gè)要顯示的數(shù)據(jù),再送第9位的起始地址C0H后又可連續(xù)送8個(gè)要顯示的數(shù)據(jù),這時(shí)在顯示器上就可以看到要顯示的16個(gè)字符。顯示‘0~F’16進(jìn)制的16個(gè)數(shù)的程序流程圖如圖2所示。
2.LCD背光控制程序流程圖
本系統(tǒng)上的LCD模塊采用的是8bit顯示模式,因此液晶模塊上電后應(yīng)在左邊顯示8個(gè)5x7點(diǎn)陣塊,若LCD模塊在系統(tǒng)上電后無此現(xiàn)象,請(qǐng)檢查V0電壓(VDD—V0≥4.7 V),改變RW的值將改變LCD顯示的亮度。分析光敏電阻對(duì)環(huán)境光強(qiáng)的采樣結(jié)果,當(dāng)環(huán)境光強(qiáng)下降至某一值時(shí)開啟光,否則關(guān)閉背光。系統(tǒng)所用的光敏電阻在正常的室內(nèi)光強(qiáng)下約為100KΩ,環(huán)境光亮度越低則RA2采樣到的電壓值就越小,光敏電阻的值隨光強(qiáng)的減小而增大,無光時(shí)相當(dāng)于斷路。合理調(diào)整R2的值將有利于調(diào)試,選擇合理的臨界值并通過鍵盤輸入到PIC16F877的EEPROM中,光敏電阻的阻值是一個(gè)非線性量,因此臨界值要根據(jù)實(shí)際的情況來確定,圖 3為LCD背光控制程序流程圖。
四.小結(jié)
以上是我們?cè)谑褂肑HD161A時(shí)的一些經(jīng)驗(yàn)總結(jié),由于JHD161A的1行16個(gè)字符平分成兩組,在使用時(shí)一定要注意JHD161A的顯示地址不是連續(xù)的;其次液晶顯示模塊是一個(gè)慢顯示器件,在執(zhí)行每條指令之前一定要先判斷模塊的忙標(biāo)志是否為低電平,或者在執(zhí)行每條指令之后加適當(dāng)?shù)难訒r(shí)。
參考文獻(xiàn):
[1] 劉和平.PIC16F87X單片機(jī)使用軟件與接口技術(shù)——C語言及其應(yīng)用.北京:北京航空航天大學(xué)出版社,2002
[2] (加) Myke Predko. PICmicro微控制器編程與自主開發(fā). 姜漢龍譯. 北京: 電子工業(yè)出版社,1999.
[3] 王有緒 .PIC系列單片機(jī)接口技術(shù)及應(yīng)用系統(tǒng)設(shè)計(jì). 北京航空航天大學(xué)出版社,2001.4.5