一種用于嵌入式系統(tǒng)的液晶顯示單元設(shè)計(jì)
在自動(dòng)化儀器儀表、工業(yè)測(cè)控裝置等嵌入式計(jì)算機(jī)系統(tǒng)中,圖形液晶顯示模塊(點(diǎn)陣LCD)以顯示靈活、信息量大、可實(shí)現(xiàn)圖形界面等優(yōu)點(diǎn)而被廣泛的用做顯示終端。這些模塊大多提供并行數(shù)據(jù)接口,少量提供串行接口的模塊也要求通信采用特殊協(xié)議,給系統(tǒng)的軟硬件設(shè)計(jì)都帶來較大不便。在顯示程序上,可移植通用的嵌入式圖形用戶界面GUI軟件,如MiniGUI,OpenGUI等,以簡(jiǎn)化軟件設(shè)計(jì)工作。但是,這些GUI軟件移植繁瑣,有些源代碼不公開,一般需要數(shù)百KB的存儲(chǔ)量,對(duì)于一些只要求實(shí)現(xiàn)簡(jiǎn)單界面的工控應(yīng)用來說過于龐大,有一些功能(如鼠標(biāo)操作、支持漢字輸入法等)也不十分必要。
針對(duì)上述問題,本文結(jié)合LCD顯示模塊STN6448D-4K設(shè)計(jì)了一種滿足工控要求的模塊化圖形液晶顯示單元。硬件上通過51單片機(jī)搭建轉(zhuǎn)換電路,實(shí)現(xiàn)模塊并行訪問時(shí)序到串行顯示命令的轉(zhuǎn)換。軟件上結(jié)合串行接口命令和通信協(xié)議,用C語言編寫了具有消息驅(qū)動(dòng)機(jī)制的簡(jiǎn)單通用圖形用戶界面GUI程序,可以方便地移植到各種工控嵌入式系統(tǒng)。
1.標(biāo)準(zhǔn)串口擴(kuò)展的設(shè)計(jì)
液晶顯示模塊STN6448D-4K支持640×480點(diǎn)陣4096偽彩色顯示,用戶接口為8位并行口。圖1為模塊的RS-232硬件擴(kuò)展接口結(jié)構(gòu),在AT89C51單片機(jī)最小系統(tǒng)基礎(chǔ)上,擴(kuò)展了一片MAX232。單片機(jī)通過總線與模塊STN6448D-4K的控制器相連。單片機(jī)接收并分析串口指令,調(diào)用相應(yīng)函數(shù)完成對(duì)LCD的各種顯示控制。為減少串行通信數(shù)據(jù)量,還擴(kuò)展了一片2MB的Flash存儲(chǔ)器AM29F016D,用于存儲(chǔ)BMP圖像和字符庫(kù)、漢字庫(kù)。通常采用的字庫(kù)有漢字庫(kù)文件Hzk16f.bin(16×16點(diǎn)陣)、Hzk24k.bin(24×24點(diǎn)陣),ASCII碼文件ASC16.bin(16×8點(diǎn)陣)、ASC24.bin(24×12點(diǎn)陣)等,位圖文件可以根據(jù)需要自行制作和增減。所有的字庫(kù)和位圖均通過RS-232接口從PC機(jī)下載到Flash存儲(chǔ)器中,根據(jù)每個(gè)文件的存儲(chǔ)首地址索引可以完成字符、漢字、位圖的顯示。
2.串口指令和通信軟件設(shè)計(jì)
按照STN6448D-4K的編程格式編寫清屏、畫點(diǎn)、畫線、畫矩形、寫字符(ASCII字符、漢字)、加載位圖等基本繪圖函數(shù)的單片機(jī)程序比較簡(jiǎn)單,這里不作說明。單片機(jī)在完成初始化、清屏操作后,將就緒狀態(tài)信息傳遞給嵌入式系統(tǒng)的CPU,并等待從RS-232傳來的繪圖指令。每一個(gè)繪圖指令,都是一個(gè)繪圖命令幀,與一個(gè)繪圖函數(shù)相對(duì)應(yīng)。
單片機(jī)收到一個(gè)完整的繪圖指令后根據(jù)指令碼識(shí)別不同的繪圖操作,調(diào)用相應(yīng)的函數(shù)完成顯示控制。由于各個(gè)函數(shù)的指令長(zhǎng)短不一,單片機(jī)需要判斷出一條指令的結(jié)束;而且單片機(jī)完成LCD操作需要時(shí)間,硬件上又沒有一個(gè)“BUSY”信號(hào)來指示單片機(jī)暫時(shí)不能接收指令。故程序設(shè)計(jì)上需保證傳輸同步和可靠性。
2.1 顯示命令幀的封裝
每一個(gè)繪圖指令都封裝成一個(gè)繪圖命令幀,封裝時(shí)依據(jù)以下3條規(guī)則:
(1)在每一個(gè)繪圖指令的結(jié)尾加上標(biāo)志字節(jié)END,封裝成一個(gè)繪圖命令幀。一個(gè)完整的繪圖命令幀包括繪圖指令碼、繪圖函數(shù)參數(shù)以及END標(biāo)志。標(biāo)志字節(jié)END的編碼為0x55;
(2)在幀數(shù)據(jù)(指令的有效數(shù)據(jù))中的某一個(gè)字節(jié)如果與END(0x55)相同,則將這個(gè)字節(jié)轉(zhuǎn)換為(0xDE,0xCF)的2字節(jié)序列。其中0xDE稱為轉(zhuǎn)義字符TRANS,0xCF為數(shù)據(jù)與END標(biāo)志相同時(shí)轉(zhuǎn)義后的替換符TRANS_REP。
(3)如果幀數(shù)據(jù)中某個(gè)字節(jié)與轉(zhuǎn)義字符(0xDE)本身相同,則將其更換為(0xDE,0xDE)2字節(jié)序列。
如果不考慮轉(zhuǎn)義字符,一個(gè)完整的繪圖命令幀格式如下:
其中:CMD指令碼,P1-Pn為n個(gè)字節(jié)數(shù)據(jù)。例如畫水平線函數(shù)對(duì)應(yīng)的命令幀中的字符依次為:0xCA, X0_H, X0_L, Y_H, Y_L, X1_H, X1_L, CLR。其中0xCA為指令碼(對(duì)每個(gè)函數(shù)唯一),之后的6個(gè)為坐標(biāo)參數(shù),CLR為顏色。
2.2 接收狀態(tài)機(jī)
單片機(jī)的接收中斷處理采用接收狀態(tài)機(jī)機(jī)制,狀態(tài)轉(zhuǎn)換如圖2所示。
三個(gè)狀態(tài)的含義為:
評(píng)論