液晶顯示屏lcd作為一種功耗低、體積小、無輻射的顯示器件,近幾年被廣泛應用于各式各樣的嵌入式電子產品中,lcd可分為段位式、字符式和點陣式三種,其中,段位式lcd和字符式lcd只能用于字符和數字的簡單顯示,不能滿足圖形曲線和漢字顯示的要求,而點陣式lcd不僅可以顯示字符、數字,還可以顯示各種圖形、曲線及漢字,并且可以實現屏幕上下左右滾動動畫功能,分區開窗口、反轉、閃爍等功能,用途十分廣泛,為了簡化液晶 顯示電路的設計和應用,生產廠家通常將液晶顯示單元、顯示控制器,顯示內存和顯示驅動電路等裝配在一起,做成液晶顯示模塊lcd module(lcm)[1]。lcm對外提供標準數據和控制接口以及控制指令,本文以tm12864c為例,介紹帶控制驅動器st7920的液晶顯示模塊與philips公司的arm7微控制器lpc2214的接口設計及編程方法,并在此基礎詳細介紹在液晶顯示屏上顯示可連續滾動的中文菜單及菜單項反白選擇顯示的設計方法,并討論如何解決漢字顯示過程中出現的亂碼問題。
2 硬件實現
atm12864c是廣東金鵬電子有限公司生產的中文液晶顯示模塊,該款液晶顯示模塊采用中文字型點陣的控制驅動器st7920,他內含8192個16×16點陣的國標簡體漢字和126個16×8點陣的英文符號字庫。用戶輸入國標碼或ascii碼即可實現文本顯示。滿屏顯示為8個漢字×4行,另外,還提供64×256點的繪圖ram(gdram),可以與文字混合顯示,而且內含字型產生ram(cgram),提供可編程造字功能,atm12864c提供的外部接口信號有:8位數據總線d0-d8;寄存器選擇信號r/s,當r/s為高電平時,控制數據寄存器,r/s為低電平時,控制指令寄存器,讀寫信號r/w,r/w為該電平時讀,低電平時寫,使能信號e,下降沿有效,atm12864c的寫操作時序如圖1(b)所示,讀操作時序除r/w信號為高電平外,其余與寫操作時序相同[2]。
lpc2214是philips公司推出的一款基于一個支持實時仿真和跟蹤的32位arm7tdmi-s cpu的微控制器,頻率高達60mhz,帶有256kb嵌入的高速片內flash存儲器和4個32位寬度的外部存儲器接口,是一款低功耗、高性能、小封裝的微控制器,lpc2214的外部存儲器訪問時序如圖1(a)所示[1]。
為了節省微控制器的普通i/o口資源和簡化程序的編寫,lpc2214可以通過數據總線與控制信號直接采用外部存儲器訪問形式控制液晶顯示模塊,這種方式對于一些i/o口資源緊張的復雜系統有著更加重要的意義,由于sta7920的數據訪問時序與ltc2214的存儲器訪問時序有很大區別,如圖1所示。lpc2214和液晶顯示模塊的接口電路設計的關鍵是如何通過合理的設計,使得lpc2214的存儲器訪問時序和st7920的訪問時序正確的配合。
lpc2214與液晶顯示模塊的接口電路如圖2所示。lpc2214通過低位地址a1控制lcm的r/s信號,以選擇當前控制的寄存器,通過對lpc2214寫信號we做適當的延遲后作為lcm的r/w信號控制數據總線上的數據流方法。而lcm的使能信號e由lpc22414的讀信號oe、寫信號we和存儲器控制器的片選信號cs1來合成產生,在產生讀寫信號r/w信號的電路中,電阻r和電容c的選擇是關鍵,根據lpc2214和st7920的電氣特性(具體見文獻[1,2])和調試的結果,理想的選值:r取1kω,c取12pf,為了實現低功耗,lcm的背光通過一個普通i/o口來控制,當有外部按鍵響應時,背光點亮,否則背光熄滅。
由于lcm的片選信號由cs1控制,即使用lpc2214外部存儲器接口的bank1地址空間,而r/s信號由a1控制,所以lcm的操作如下:
命令輸入地址:0x81000000
數據操作地址:0x81000002
3 軟件設計
在帶漢字庫的液晶屏顯示程序設計過程中,中文菜單的滾動顯示和菜單項的反白選擇是關鍵,本文所選的液晶顯示模塊可顯示4行,每行可顯示8個中文字符。當要顯示的菜單項大于4個時,需要進行滾屏顯示。本文設計了一種人機交互友好的菜單操作程序,該程序的基本思想:在內存中開辟一個可顯示4×16得二維字符型數組的顯示緩沖區,把要顯示菜單項列表存儲在另一個二維數組中,通過改變顯示函數lcm_show()的參數,方便、靈活地顯示菜單列表中指定的菜單項,假設要顯示如圖3(a)中的5項菜單,默認的顯示焦點在第一行,即把第一行的菜單項進行反白顯示,當按"下移"鍵,顯示焦點下移一行。當焦點下移至液晶顯示屏最后一行時,如圖3(b)所示,此時再按"下移"鍵,顯示屏向上滾動,如圖3(c)所示,當繼續按"下移"鍵時,顯示屏繼續向上滾動,循環顯示菜單列表中的5項菜單,如圖3(d)所示,按"上移"鍵,操作相同。
本文通過顯示函數lcm_show()和反白顯示函數lcm_showinvert()來實現如上所述的菜單連續滾動顯示功能及焦點反白顯示功能。具體代碼如下:
在顯示漢字的過程中,顯示內容經常是漢字和ascii碼混合,由于漢字是由2個字節組成,ascii碼是一個字節,如果顯示內容中的ascii號碼中的個數是單數,ascii碼后面漢字的顯示就會出現亂碼的現象。
針對這一現象,本文提出了在顯示前對顯示內容進行格式化的方法,其基本思想是:把連續的單數個ascii碼字符后面加一個空格,使顯示內容中的連續ascii碼字符保持雙數,這種方法很好地解決了漢字顯示時的亂碼現象。程序流程如圖4所示。
4 結語
本文在對arm7微控制器lpc2214和帶控制驅動器st7920的液晶顯示模塊的訪問時序進行研究的基礎上,設計了他們之間的接口電路,該接口電路無需增加普通i/o,直接使用lpc2214的外部存儲器訪問形式簡單方便地對液晶顯示模塊進行控制,既節省了普通i/o口,也使得程序的編寫更加方便,同時也給出了中文菜單滾屏顯示和菜單項反白選擇的程序,并且針對在顯示過程中出現的亂碼現象進行討論,給出解決方案和程序流程。對于基于arm微控制器的嵌入式系統的具有漢字顯示功能的顯示系統的設計提出了一個行之有效的解決方案。
評論
查看更多