薛小紅
(齊齊哈爾工程學(xué)院,黑龍江 齊齊哈爾 161005)
顯示一個(gè)簡(jiǎn)體漢字,至少需要16×16點(diǎn)陣來描述。為了在較遠(yuǎn)距離處獲得清晰的視覺效果,本設(shè)計(jì)采用4個(gè)8×8點(diǎn)陣,像素直徑5mm的LED模塊拼接成16×16點(diǎn)陣的LED陣列。這樣每個(gè)16×16漢字能夠獲得12cm×12cm的顯示尺寸,因此在50m處仍能清晰閱讀。
字符的位置在屏幕上實(shí)現(xiàn)移動(dòng),即術(shù)語“滾屏”。本設(shè)計(jì)采用軟件算法實(shí)現(xiàn)左滾屏、左暫停、定格顯示等常見滾屏方式。用軟件來完成滾屏算法,其最大的優(yōu)點(diǎn)在于成本低廉,而且可維護(hù)性、可升級(jí)性大大增強(qiáng)。
因本設(shè)計(jì)采用軟件來實(shí)現(xiàn)滾屏,且傳輸方式為串行方式。微控制器單元的最佳選擇為STC12C系列單片機(jī),其最高時(shí)鐘能到48MHz,且有較豐富的接口及存儲(chǔ)器資源,價(jià)格極其低廉,大幅降低了產(chǎn)品成本。
通過前面對(duì)各種方案的比較與分析,初步構(gòu)建硬件系統(tǒng)框圖如圖1所示。
圖1 LED顯示屏硬件框圖
圖中,X0、X1—Xn為顯示單元。每個(gè)顯示單元由一個(gè)16×16點(diǎn)陣的LED模塊和一個(gè)16位寬的移位鎖存器構(gòu)成。所有顯示單元的16根行線均連接到公共的行掃描驅(qū)動(dòng)電路。而每個(gè)顯示單元的列數(shù)據(jù)則由16位移位鎖存器并行輸出口提供。
中央微處理器MCU負(fù)責(zé)與所有外圍設(shè)備的協(xié)調(diào)通信,以及各種算法的處理。MCU用通用I/O口來驅(qū)動(dòng)行掃描驅(qū)動(dòng)電路。用通用I/O口模擬同步串行接口以實(shí)現(xiàn)和列數(shù)據(jù)鎖存器之間的單向通信。
MCU通過內(nèi)部集成的SPI接口和字庫芯片進(jìn)行雙向通信。PC機(jī)的RS-232C電平經(jīng)過轉(zhuǎn)換后,通過UART接口與MCU進(jìn)行雙向通信。
電源則為各個(gè)模塊提供穩(wěn)定的電壓以及足夠的電流。
具體工作原理為:?jiǎn)纹瑱C(jī)上電后就檢測(cè)單片機(jī)P3.2腳(DownLoad)的電平,如果按住LED顯示屏上的“DownLoad”鍵開機(jī),顯示屏被引導(dǎo)進(jìn)入下載模式。這時(shí)單片機(jī)把UART異步串行口初始化為“方式一”工作。之后不斷檢測(cè)從UART傳入的數(shù)據(jù),如果連續(xù)接收到的兩字節(jié)數(shù)據(jù)與程序中約定的兩字節(jié)數(shù)據(jù)幀同步碼(0xA0,0xFA)相同。則判定下載命令合法,真正進(jìn)入下載流程。進(jìn)入下載流程后,擦除連續(xù)從0x2600地址開始的5個(gè)E2PROM扇區(qū),每個(gè)扇區(qū)512字節(jié)。然后連續(xù)接收上位機(jī)發(fā)出的7字節(jié)設(shè)置數(shù)據(jù),并從E2PROM第一個(gè)扇區(qū)首地址0x2600開始依次存放。這樣,第一個(gè)扇區(qū)就保存了上位機(jī)對(duì)下位機(jī)的所有設(shè)置數(shù)據(jù)。接著接收上位機(jī)發(fā)出的不大于2048個(gè)內(nèi)碼數(shù)據(jù),并保存在第二個(gè)E2PROM扇區(qū)中。第二到第五扇區(qū)是連續(xù)編址的。漢字內(nèi)碼的數(shù)據(jù)量由上位機(jī)確定。當(dāng)單片機(jī)接收到下載結(jié)束符0x8F時(shí),執(zhí)行軟件復(fù)位,強(qiáng)迫程序在AP區(qū)從頭運(yùn)行。這時(shí)若仍然按住“DownLoad”鍵,則再一次進(jìn)入下載模式。
如果開機(jī)的時(shí)候不按下“DownLoad”鍵,則單片機(jī)程序被引導(dǎo)進(jìn)入顯示模式。進(jìn)入顯示模式后,首先把單片機(jī)的SPI接口初始化為“空閑低電平/上升沿驅(qū)動(dòng)”模式,為讀寫字庫芯片作準(zhǔn)備。在單片機(jī)內(nèi)部的擴(kuò)展數(shù)據(jù)存儲(chǔ)器(xdata區(qū))中開辟192字節(jié)動(dòng)態(tài)顯示緩沖區(qū)Display Buffer和32字節(jié)的字模數(shù)據(jù)緩存區(qū)Temp Buffer,兩個(gè)緩存區(qū)編址連續(xù)。Display_Buffer中的一位與LED的一個(gè)點(diǎn)陣一一對(duì)應(yīng),使字符在顯示中的移動(dòng)算法變得簡(jiǎn)單靈活。遵循結(jié)構(gòu)化的程序設(shè)計(jì)思路。把單片機(jī)的在顯示模式的所有工作量分為以下三個(gè)任務(wù):
(1)掃描顯示任務(wù):掃描顯示任務(wù)負(fù)責(zé)把Display_Buffer中的數(shù)據(jù)依次發(fā)送到列驅(qū)動(dòng)器74HC595,并按嚴(yán)格的時(shí)序高電平選通十六根行掃描線(Y0~Y15),使每一列數(shù)據(jù)對(duì)應(yīng)著一個(gè)行線狀態(tài)。
(2)移動(dòng)處理任務(wù):移動(dòng)處理任務(wù)負(fù)責(zé)完成顯示字符逐點(diǎn)陣向左移動(dòng)的算法處理,這是最基本的顯示效果。其它大部分顯示效果如左移六字暫停,全屏定格顯示等都是以逐位左移為基礎(chǔ)。對(duì)顯示字符的移動(dòng),實(shí)質(zhì)上是對(duì)顯示緩沖區(qū)Display Buffer內(nèi)數(shù)據(jù)的移動(dòng)。
(3)字符更新任務(wù):在單片機(jī)的xdata區(qū)開辟了32字節(jié)的字模數(shù)據(jù)緩存區(qū)Temp Buffer。該緩存區(qū)與Display Buffer編址連續(xù)。當(dāng)調(diào)用字符更新任務(wù)時(shí),程序從E2PROM內(nèi)碼區(qū)指定位置讀取相鄰兩字節(jié)的漢字內(nèi)碼數(shù)據(jù)。并通過一定的算法,把內(nèi)碼數(shù)據(jù)變換為該內(nèi)碼對(duì)應(yīng)漢字的字模數(shù)據(jù)在字庫芯片中的地址。單片機(jī)通過SPI接口,向字庫芯片發(fā)送讀命令和地址,字庫芯片返回連續(xù)32字節(jié)的全角漢字字模數(shù)據(jù)或16字節(jié)的ASCII半角字模數(shù)據(jù)。這些字模數(shù)據(jù)就存儲(chǔ)在32字節(jié)的字模數(shù)據(jù)緩存區(qū)中。三個(gè)任務(wù)彼此獨(dú)立,又相互聯(lián)系。
本設(shè)計(jì)采用IAP在應(yīng)用可編程技術(shù),把字符內(nèi)碼存儲(chǔ)在空閑的單片機(jī)程序存儲(chǔ)器空間,使本LED顯示系統(tǒng)能掉電存儲(chǔ)1024個(gè)字符。由于采用串行傳輸方式,使本系統(tǒng)的可擴(kuò)展性得到提升,便于多個(gè)顯示單元的級(jí)聯(lián)。
[1]石生.電路基礎(chǔ)分析[M].北京:高等教育出版社,2007.
[2]揚(yáng)志忠.數(shù)字電子技術(shù)[M].北京:高等教育出版社,2007.