王慶春,何曉燕,崔智軍
(1.安康學院 電子與信息工程系,陜西 安康 725000;2.安康學院 數學系,陜西 安康 725000)
在許多嵌入式系統(tǒng)應用領域,都需要友好的人機信息界面,傳統(tǒng)的數碼管或者發(fā)光二極管顯示方式已經不能滿足實際的顯示需求,而LCD1602/LCD12864液晶顯示模塊具有低壓微功耗、壽命長、顯示信息量大、超薄等顯著優(yōu)點,被廣泛應用于智能儀器、儀表等各種便攜式電子信息產品上來實現數字、字符和圖形的可視化信息顯示.目前,針對LCD1602/LCD12864液晶模塊的顯控技術主要有兩種方式,首先是基于各種微處理器(8051/ARM/Nois II/SPCE061)的微程序控制方式[1-5],這種軟件組態(tài)的LCD模塊控制技術應用廣泛,但是這種控制方式會占用處理器資源、速度慢、實時顯示性能較差.其次,就是使用CPLD/FPGA開發(fā)的獨立顯示控制器[3,6-7],這種純硬件結構的獨立顯示控制器,速度快、實時顯示性能好;但是這種獨立顯示控制器可移植性差、功能單一,很難適應不同類型的液晶屏及不同的顯示模式。
因此,文中就提出了一個基于FPGA的多功能LCD顯示控制器設計方案,只需通過端口的使能參數配置便可以驅動LCD1602模塊顯示字符、LCD12864模塊實現字符或圖形的實時顯示,并在FPGA開發(fā)板(EP2C5T144C8)上進行了該設計的可行性驗證。
要設計能夠驅動LCD1602/LCD12864兩種液晶模塊的多功能顯示控制器,就必須同時兼顧這二者的封裝端口引腳和用途;對多功能顯示控制器的端口做出兼容性設計。
LCD1602液晶模塊是一款最常用、最便宜的工業(yè)字符型液晶顯示屏[1],它可以顯示 16×2個、5×7的點陣字符.模塊的字模存儲器CGROM(Character Generator ROM)中固化192個常用字符的字模,另外還有8個允許用戶自定義的字符存儲器CGRAM(Character Generator RAM),可以用于少量的自定義圖形顯示(如漢字)。由于顯示單元位間隔和行間隔的存在而導致顯示效果不好,因此LCD1602模塊主要用于西文、ASCII碼字符的顯示,該模塊擁有1個16引腳的單排插針外接端口,端口的功能定義如表1所示。
目前,常用的LCD12864模塊是一種內部含有國標一級、二級簡體中文字庫的點陣型圖形液晶顯示模塊[2-6];具有串/并多種接口方式,內置了8 192個16×16點漢字和128個16×8點ASCII字符集,它在字符顯示模式下可以顯示8×4個16×16點陣的漢字或 16×4個 16×8點陣的西文(ASCII)字符;它也可以在圖形工作模式下顯示分辨率為128×64的二值化圖形,該模塊擁有1個20引腳的單排插針外接端口,端口的功能定義與LCD1602的對比如表1所示。
表1 LCD模塊的端口定義對比Tab.1 Comparison of LCD module port
通過表1所示的LCD12864和LCD1602兩種液晶模塊的端口對比可以看出,它們的端口定義基本相同,LCD12864模塊只比LCD16021模塊多了PSB(串并選擇)和RST(復位端)端口,因此;可以完全按照LCD12864的端口要求來設計多功能LCD顯示控制器的端口;PSB和RST端口在驅動LCD1602模塊時閑置或懸空 (也可以用來充當某些特殊LCD1602屏的電源開關和背光開關信號)。
如果LCD12864液晶模塊工作在并口的數據傳輸模式(PSB=1、RST=1)下,就和LCD1602液晶模塊具有完全相同的控制時序.這就要求多功能控制器產生的E、RW、RS控制信號具有正確的時序,LCD模塊的讀/寫操作時序由使能信號E完成;對讀/寫操作的識別是判斷RW信號上的電平狀態(tài);RS信號用于識別數據總線DB0~DB7上的數據是指令代碼還是屬于顯示數據[4,6],控制信號的操作時序如圖1所示。
在如圖1所示的操作時序圖形中,LCD模塊都給出了關鍵時間參數(不同廠商產品有差異),一般要求數據讀寫周期TC≥13μs;使能脈沖寬度 TPW≥1.5μs;數據建立時間 TDSW≥1 μs;數據保持時間TH≥20 ns;地址建立和保持時間 (TAS和TAH)不得小于1.5μs,因此在多功能LCD顯示控制器IP核的設計中,必須設置有延時配置參數以滿足控制器的多種模塊驅動調試。
圖1 LCD模塊的操作時序圖Fig.1 Operating sequence diagram of LCD module
LCD12864和LCD1602液晶模塊都有自己一套嚴格用戶指令集[1-6],用戶就是通過這些指令來初始化液晶模塊來選擇顯示模式,這就要求多功能的LCD顯示驅動器同時包含多種顯示模式的用戶配置指令,LCD12864和LCD1602液晶模塊字符、圖形顯示模式的初始化指令如表2所示,對于指令的解釋在此不再詳述。
表2 LCD模塊的初始化指令Tab.2 Initialization comm ands of LCD module
通過表2的指令對比可以看出兩種顯示模塊的字符顯示初始化指令完全一致,僅僅是顯示行的起始地址有所不同;這就需要在LCD多功能顯示控制器中設置參數跳轉,來根據模塊配置參數自動加載相應的行起始地址.而對于LCD模塊的圖形顯示模式需要用到擴展指令集,并且需要分成上下兩個半屏設置起始地址,上半屏垂直坐標Y:8’h80~9’h9F(32行),水平坐標X:8’h80;下半屏垂直坐標和上半屏相同,而水平坐標 X:8’h88。
基于FPGA設計LCD顯示控制器,關鍵在于采用硬件描述語言設計有限狀態(tài)機(FSM)來控制LCD模塊的跳轉,文獻[6-7]中就是使用FSM實現了對LCD模塊的顯示控制,但是它們都是針對一種類型LCD模塊的某種顯示模式,不具有多模式的顯示控制能力.因此,多功能LCD顯示控制器的有限狀態(tài)機就需要設置更多的條件轉換,來實現多種控制模式,狀態(tài)機的狀態(tài)轉換圖如圖2所示。
圖2 多功能LCD顯示控制器的狀態(tài)轉換圖Fig.2 State transition diagram of multifunctional LCD controller
在圖2所示的狀態(tài)轉換圖中,系統(tǒng)上電后,首先完成持續(xù)大約0.1 s(根據時鐘頻率配置)的自動復位,然后才根據模塊的端口參數選擇不同顯示模式所對應的初始化命令.在狀態(tài)機中設置有初始化命令、起始行地址和屏顯示數據3條轉換路徑來適應LCD屏的工作狀態(tài),同時也在關鍵轉換路徑上設置有可以配置的延時循環(huán),這樣既能方便LCD模塊的工作調試,又能使LCD模塊一直工作在寫屏模式(RW=0).對于LCD屏的顯示數據存儲可以完全采用FPGA內嵌的ROM/RAM單元實現,如果使用雙口RAM(存儲器讀寫獨立)就能實現LCD模塊的動態(tài)實時顯示。
使用康芯KX7C5T FPGA開發(fā)板 (Altera Cycle II EP2C5T144C8)、KB12864KZK、RT1602C 和 4×4 鍵盤組成多功能LCD控制器的硬件測試平臺;設計項目經過Quartus II 9.1開發(fā)工具的工程編譯和芯片下載配置后得到的實際顯示效果圖如圖3所示,其中圖3(a)是LCD1602模塊的字符顯示效果圖;屏的第1行顯示靜態(tài)字符,第2行實時顯示鍵盤輸入鍵值。圖3(b)是LCD12864模塊的中西文混合字符顯示效果圖,第4行也是實時顯示鍵盤輸入鍵值。圖3(c)是LCD12864模塊的靜態(tài)圖片顯示效果圖 (ROM存儲);圖3(d)是LCD12864模塊的實時動態(tài)圖形顯示效果圖 (雙口RAM存儲),這是用多功能LCD顯示控制器實現的邏輯分析儀界面。
文中設計的多功能LCD顯示控制器,在FPGA開發(fā)板上的驗證結果表明,它完全具有能夠驅動LCD1602模塊顯示字符、LCD12864模塊顯示字符和實時顯示圖形的功能;并能夠通過端口參數配置而實現控制器的系統(tǒng)移植。
圖3 多功能LCD顯示控制器的測試效果圖Fig.3 Test results of multifunctional LCD controller
[1]李建波.LCD1602漢字顯示技術在萬年歷中的應用及Proteus仿真[J].清遠職業(yè)技術學院學報,2010,3(3):35-38.LI Jian-bo.Application of chinese characters display technology of 1602 in calendar and proteus simulation[J].Journal of Qingyuan Polytechnic,2010,3(3):35-38.
[2]郭改枝,張鵬舉.單片機控制液晶屏接口電路的設計與實現[J].內蒙古師范大學學報:自然科學版,2010,39(4):425-427.GAO Gai-zhi,ZHANG Peng-ju.Design and implement o f LCD control inter face circuit based on single-chip computer[J].Journal of Inner Mongolia Normal University:Natural Science Edition,2010,39(4):425-427.
[3]莊聰聰,王大明,李寒.基于ARM與FPGA的LCD控制器設計[J].電子設計工程,2010,18(6):14-16.ZHUANG Cong-cong,WANG Da-ming,LI Han.Design of LCD controller based on ARMand FPGA[J].Electronic Design Engineering,2010,18(6):14-16.
[4]朱奕丹.基于Nios II軟核的LCD控制器的設計[J].北京聯(lián)合大學學報:自然科學版,2010,24(4):21-25.ZHU Yi-dan.Design of a LCD controller based on nios II[J].Journal of Beijing Union University:Natural Sciences,2010,24(4):21-25.
[5]譚保華.基于凌陽SPCE061A單片機的一種通用漢字顯示方法實現[J].電腦開發(fā)與應用,2010,23(8):41-42.TAN Bao-hua.A universal display method of Chinese characters based on SPEC061A [J].Development and Application of Computer,2010,23(8):41-42.
[6]于鵬.一種基于CPLD的12864LCD控制器設計[J].渤海大學學報:自然科學版,2010,31(2):192-196.YU Peng.A kind of 12864LCD controller based on CPLD[J].Journal of Bohai University:Natural Science Edition,2010,31(2):192-196.
[7]王宏斌,王紫婷,王媛斌.基于FPGA的液晶顯示控制器的設計[J].蘭州交通大學學報,2010,29(1):53-55.WANG Hong-bin,WANG Zi-ting,WANG Yuan-bin.Design of LCD controller based on FPGA[J].Journal of Lanzhou Jiaotong University,2010,29(1):53-55.