李少波
(上海海事大學(xué),上海200135)
李少波(碩士研究生),研究方向為檢測技術(shù)與自動化裝置。
相比于采用MCU的Ⅰ/O口對液晶進行數(shù)據(jù)傳輸,采用總線方式驅(qū)動液晶有一系列好處:第一,軟件編程中不需要手動設(shè)置DDR寄存器值,降低了編程難度;第二,可以提供給人們一種新的思考問題方式。本文介紹了總線方式驅(qū)動液晶的硬件電路和軟件設(shè)計。軟件設(shè)計中,主要介紹了一些基本的總線定義方式,以及基本的驅(qū)動函數(shù)編寫方法。
主控MCU采用AT90CAN128控制芯片,可以工作在16MHz頻率下。要驅(qū)動的液晶型號為OCMJ15X20D。OCMJ15X20D支持雙層顯示,帶內(nèi)置中文字庫的RA8803控制器;內(nèi)部有256個8位緩存器,控制液晶各種顯示模式和其他功能(具體功能請參照D系列中文液晶顯示模塊說明書),使得液晶可以顯示豐富的內(nèi)容。
AT90CAN128的RAM空間中,前4352個字節(jié)分配給芯片內(nèi)部的通用寄存器、Ⅰ/O寄存器和4KB的內(nèi)部SRAM。起始的32個地址為通用寄存器文件,然后是64個Ⅰ/O寄存器和160個擴展的Ⅰ/O寄存器,最后是4096字節(jié)的內(nèi)部數(shù)據(jù)SRAM。所以,外部并行擴展總線的有效地址是從0x1100至0xFFFF。當(dāng)MCU對0x0000~0x10FF范圍的SRAM地址空間操作時,實際上是對芯片內(nèi)部的SRAM或寄存器操作,盡管會影響地址總線、數(shù)據(jù)總線和ALE,但此時/WR和/RD信號不受影響。因此,處在相應(yīng)這段地址范圍內(nèi)的外部擴展的存儲器、設(shè)備不會響應(yīng)AT90CAN128的指令。
74LS138譯碼器電路如圖1所示。采用并行接口擴展的方式,AT90CAN128的A端接口作為液晶的8位數(shù)據(jù)總線接口,C端口的部分引腳PC4~PC7(圖1中的A12~A15)作為控制液晶的使能位,添加了74LS138的輸出引腳/CS_LCD。引腳/RAM用來控制擴展外部RAM的高4位地址,這樣外擴RAM的總線地址可以為0x1100~0x8FFF;/Backup 1~/Backup 6可以當(dāng)作備用,或者驅(qū)動其他設(shè)備(例如另外一塊液晶)。
圖1 74LS138譯碼器電路
液晶接口電路如圖2所示。AT90CAN128的C端口PC3引腳(圖2中A11)作為控制液晶數(shù)據(jù)的輸入/輸出位。其中,74LS245是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù);J1是液晶的引腳接口。這樣,LCD占用的MCU總線地址為0x9000~0x97FF和0x9800~0x9FFF。
圖2 液晶接口電路
液晶OCMJ15X20D各個引腳功能定義如表1所列。
如果MCU對液晶模塊緩存器進行讀取操作,則必須通過總線以數(shù)據(jù)方式先送出緩存器的地址,然后才能在總線上讀液晶取緩存器的資料;如果是進行寫入操作,則必須通過總線以數(shù)據(jù)方式先送出緩存器的地址,然后再以同樣方式送出要寫入的資料。當(dāng)MCU對液晶模塊的顯示RAM區(qū)域進行資料的讀取時,MCU能直接在數(shù)據(jù)總線上讀取顯示RAM的資料;當(dāng)MCU對顯示RAM區(qū)域進行資料的寫入時,MCU可以直接在數(shù)據(jù)總線上送出要寫入的資料。
表1 OCMJ15X20D引腳功能定義
根據(jù)硬件電路的設(shè)計,雖然液晶占用MCU的16位總線地址的區(qū)間0x9000~0x97FF和0x9800~9FFF,但是對于液晶來說有效的地址只是16位地址的高5位。這樣,總線送到液晶的數(shù)據(jù)與總線地址的低8位發(fā)生沖突,但是液晶是以在信號的上升沿接收到的數(shù)據(jù)為準(zhǔn)。也就是說,最后液晶接收到的數(shù)據(jù)(或者液晶緩存器地址)是MCU通過總線方式送過來的數(shù)據(jù),而不是MCU總線的低8位地址。
定義地址0x9000(0x9001~0x97FF將不能用作其他用途)為寫液晶緩存器和讀液晶緩存器的總線地址;定義地址0x9800為寫液晶顯示RAM和讀液晶顯示RAM的總線地址。代碼如下:
進行上述定義之后,就可以采用總線的方式方便地對液晶進行讀、寫數(shù)據(jù)和命令。對緩存器進行讀寫操作時,首先使用“CmdWritePort=Buffer Address”命令寫入緩存器在液晶內(nèi)部的地址,然后使用“CmdWritePort=Buffer Command”命令將數(shù)據(jù)寫入緩存器。也就是說,液晶第一次接收到的是內(nèi)部緩存器地址;第二次接收到的是寫入緩存器的命令。
往液晶緩存器寫數(shù)據(jù)的函數(shù)如下:
讀取液晶緩存器數(shù)據(jù)的函數(shù)定義如下:
往液晶寄存器寫數(shù)據(jù)的函數(shù)定義如下:
讀取液晶寄存器數(shù)據(jù)的函數(shù)定義如下:
定義了4個基本的讀、寫液晶緩存器和顯示RAM的函數(shù)后,就可以方便地對液晶進行各種操作。液晶緩存器地址00H的bit3為“1”時,液晶為文字模式;bit3為“0”時,液晶為位圖模式。液晶內(nèi)部X、Y坐標(biāo)對應(yīng)的內(nèi)部緩存器地址分別為60H、70H,對顯示RAM區(qū)域進行讀寫操作時,首先需要設(shè)置光標(biāo)緩存器的值,然后寫入數(shù)據(jù)。例如,讓液晶坐標(biāo)為(3,4)顯示位圖字符“A”,可以使用下面語句實現(xiàn):
本文介紹了通過總線方式驅(qū)動液晶的方法,較直接采用Ⅰ/O驅(qū)動的方式有很大改進。由于占用了大量總線空間,此液晶驅(qū)動的設(shè)計適用于不需要太多外擴RAM的電路;也可在液晶接口和MCU之間添加鎖存器和一些門電路來優(yōu)化總線設(shè)計,但會增加一定的成本。
[1]呂勇.基于CAN總線的多電機同步控制系統(tǒng)設(shè)計之硬件設(shè)計[J].伺服控制,2008(10):51-56.
[2]江杰,范宇.基于AT90CAN128單片機的某車型CAN總線系統(tǒng)設(shè)計[J].機電之家,2009(3):24-26.
[3]金鵬電子有限公司.D系列中文液晶顯示模塊,2006:11-20.
[4]Texas Ⅰnstrument Ⅰnc.TMS320LF/LC240xA DSP Controllers Reference Guide,2002:10-42.