摘要:采用自頂向下的設(shè)計(jì)思想,,綜合運(yùn)用EDA 技術(shù),、CPLD" title="CPLD">CPLD技術(shù)和共享式雙口RAM,解決了大屏幕LED點(diǎn)陣顯示屏無閃爍顯示的技術(shù)難題,。給出了系統(tǒng)設(shè)計(jì)方法及實(shí)際電路,。
LED點(diǎn)陣顯示屏是顯示公共信息的一種重要顯示終端,其中大屏幕LED點(diǎn)陣顯示屏在許多場合得以應(yīng)用,。大屏幕顯示所采用的技術(shù)比中小屏幕顯示難度更大,,因?yàn)槠淦聊淮蟆ED點(diǎn)數(shù)多,,要求在極短的時(shí)間內(nèi)刷新每個(gè)點(diǎn),,使得其掃描速率必須非常高,所以只有設(shè)計(jì)合理的控制電路才能達(dá)到這個(gè)要求,。本文著重解決大屏幕LED點(diǎn)陣顯示這一技術(shù)難題,。通過采用自頂向下的設(shè)計(jì)思想,綜合運(yùn)用高速CPLD,、雙口RAM等技術(shù)和芯片,,設(shè)計(jì)出了大、小屏幕皆適合的顯示控制電路。特別是利用單片機(jī),、CPLD與雙口RAM的無縫結(jié)合,,將復(fù)雜的任務(wù)分配給不同的硬件處理,滿足了對實(shí)時(shí)性的要求,。本系統(tǒng)不僅給大屏幕LED點(diǎn)陣顯示提供了優(yōu)良的控制電路,,而且為CPLD器件和EDA技術(shù)提供了切實(shí)的應(yīng)用實(shí)例。其中,,共享雙口RAM的應(yīng)用,,為高速總線與低速總線的通信提供了一個(gè)新的解決方案。
1 硬件設(shè)計(jì)
顯示系統(tǒng)由信號處理電路和掃描電路兩大塊構(gòu)成,,其系統(tǒng)原理框圖如圖1所示,,實(shí)際電路框圖如圖2所示。微處理器MCU采用8 位單片機(jī)AT89C51,,它通過串口接收來自PC機(jī)的待顯示數(shù)據(jù),。由于PC機(jī)串行總線標(biāo)準(zhǔn)RS232 的邏輯電平與單片機(jī)電路使用的TTL電平不同,所以PC機(jī)與MCU之間的通信數(shù)據(jù)必須經(jīng)過RS232 電平轉(zhuǎn)換芯片MAX232進(jìn)行轉(zhuǎn)換,。從PC機(jī)接收到的數(shù)據(jù)存放在8K字節(jié)的電可擦寫內(nèi)存EEPROM 28C64中,,這樣可方便地隨時(shí)修改待顯示的信息,并且在掉電情況下不至于丟失數(shù)據(jù),。由于系統(tǒng)軟件要進(jìn)行大批量的數(shù)據(jù)處理,,所以擴(kuò)充了單片機(jī)緩存區(qū)大小,采用了8K字節(jié)的外部靜態(tài)RAM 6264,。
1.1 雙口RAM的應(yīng)用
采用雙口RAM是本設(shè)計(jì)的一個(gè)主要特色,。一般的RAM(如6116)只有一套地址總線,、數(shù)據(jù)總線和控制總線,,在同一時(shí)間只能執(zhí)行同一總線操作。而標(biāo)準(zhǔn)雙口RAM有左側(cè)和右側(cè)兩套地址總線,、數(shù)據(jù)總線和控制總線,,可供兩套總線對其進(jìn)行訪問。在本系統(tǒng)中,,單片機(jī)通過共享的雙口RAM IDT7132與CPLD通信,,單片機(jī)將數(shù)據(jù)寫入IDT7132中,而CPLD則從IDT7132中讀取數(shù)據(jù)并通過掃描邏輯電路輸出出去,。
由于CPLD掃描模塊可以達(dá)到很高的掃描速率,,而單片機(jī)的運(yùn)行速度則相對較低,并且兩個(gè)模塊間需要有大量的數(shù)據(jù)交換,,為此選擇雙口RAM芯片IDT7132SA35JS,,它的速度等級是35ns,完全滿足兩個(gè)模塊實(shí)時(shí)通信的要求。雙口RAM是兩個(gè)數(shù)據(jù)模塊間的數(shù)據(jù)信道,,必須是共享的,,它在本設(shè)計(jì)中起到了關(guān)鍵作用。
1.2 基于CPLD的獨(dú)立掃描模塊
顯示部分的點(diǎn)陣模塊采用雙色LED共陰點(diǎn)陣模塊(實(shí)際上可顯示紅,、黃,、綠三色)。 8 塊8×8點(diǎn)陣模塊連接成32×32點(diǎn)陣,。為易于控制,,將公共接口作為行控制,且行的接地引腳經(jīng)過一個(gè)開關(guān)三極管接地(設(shè)計(jì)中簡稱行掃描管),,實(shí)現(xiàn)對相應(yīng)列的控制,。因?yàn)橐粋€(gè)行掃描管同時(shí)控制著一行中多個(gè)LED的通斷,所以它承載較大電流,。以每個(gè)發(fā)光二極管流過的電流為10mA計(jì)算,,一個(gè)128列的點(diǎn)陣屏中,每個(gè)行掃描管所承受的電流是10mA×128=1.28A,為此選用高速中功率達(dá)林頓管TIP127,,它的集電極吸收電流最大可達(dá)5A,,保證了行的驅(qū)動能力。由于顯示點(diǎn)陣的每一行都需要用一個(gè)三極管來控制,,所以32×32點(diǎn)陣共需要32個(gè)TIP127,。
行掃描電路采用通用數(shù)字電路譯碼輸出來控制。在32×32點(diǎn)陣顯示時(shí),,掃描輸出需要大量的I/O埠,,而ATMEL公司生產(chǎn)的CPLD 芯片ATF1508AS15JC84(與ALTERA公司的MAX7128SLC84-15功能及封裝等完全兼容)的外部I/O埠不夠用,所以采用兩片CPLD,,一片專用于行掃描,,另一片用于讀取雙口RAM IDT7132中的數(shù)據(jù)并進(jìn)行列掃描。
列掃描電路的功能是在選中某行時(shí)送該行對應(yīng)的列數(shù)據(jù),,由于采用的是8位微處理器,,一次只能送一個(gè)字節(jié)的數(shù)據(jù),即每次只能掃描8列,。本設(shè)計(jì)中,,采用8550三極管矩陣驅(qū)動方式,從而節(jié)省了大量控制信號引腳資源,。
獨(dú)立掃描模塊的功能是以雙口RAM 為中介將單片機(jī)送來的資料在LED 點(diǎn)陣顯示屏上顯示出來,,其電路原理圖如圖3所示。單片機(jī)總線將處理好的待顯示數(shù)據(jù)存放在U5(雙口RAM IDT7132SA35JS中,,然后U6(CPLD芯片ATF1508AS15JC84,,用Verilog HDL語言編寫其總線讀邏輯)讀取存放在U5中的待顯示數(shù)據(jù)并驅(qū)動顯示屏,。整個(gè)顯示屏為128×32點(diǎn)陣,一次掃描一個(gè)字節(jié)即8位,,為此全屏顯示需要128×32÷8=512字節(jié),。將地址線A9R、A10R 接地,,這樣只允許訪問U5中的低512K 字節(jié),。 CA0~CA8是CPLD 輸出到U5中的地址總線,CD0~CD7是從U5讀出數(shù)據(jù)的數(shù)據(jù)總線,。 J1是行掃描信號接口,,CH0~CH4 為行掃描計(jì)數(shù)器輸出信號,時(shí)鐘信號可從CLK 輸出給行掃描計(jì)數(shù)器,。 J2為列掃描控制信號V0~V7輸出接口,。 DR0~DR15為一色的列選通控制信號輸出,由于I/O端口引腳不夠,,所以另一色的列選通信號采用譯碼電路譯碼輸出,,用J3的四線輸出。 CON1為JTAG 接口,,J6為時(shí)鐘源選擇接口,,可接單片機(jī)的ALE信號,也可接有源晶振CR2的輸出,。有源晶振CR2相當(dāng)于一信號產(chǎn)生電路,,只要其2腳接地,4腳接電源,,3腳就有額定的輸出波形,。
由于采用CPLD 設(shè)計(jì)掃描邏輯,所以掃描邏輯的關(guān)鍵不再取決于硬件連接,,而是取決于芯片的設(shè)計(jì),。
1.3 基于單片機(jī)的通信與信號處理電路
本系統(tǒng)采用ATMEL公司的8位單片機(jī)AT89C52,主要完成數(shù)據(jù)處理,、存儲和通信功能,,其原理圖如圖4所示,。
U4是AT89C51單片機(jī);U3是地址鎖存器,,用來鎖存單片機(jī)的低8位地址信號。因?yàn)橐@示的數(shù)據(jù)量很大,,特別是當(dāng)設(shè)計(jì)復(fù)雜的顯示效果時(shí)需要處理的資料量更大,,而AT89C51內(nèi)部緩存容量不足,所以擴(kuò)展外部RAM,,采用容量為8K字節(jié)的HM6264,,即U7。 U2是容量為8K字節(jié)的EEPROM 28C64,用來存儲字模數(shù)據(jù),,而不用作程序內(nèi)存,。U5是雙口RAM,U1是將RS232電平轉(zhuǎn)換為TTL電平的電平轉(zhuǎn)換器,。
PC機(jī)將欲顯示的字或圖形的點(diǎn)陣數(shù)據(jù)通過串口送到單片機(jī),,單片機(jī)將其存儲在EEPROM(U2)中,然后再根據(jù)顯示要求對這些數(shù)據(jù)進(jìn)行特定的處理,,處理完后存儲在雙口RAM(U5)的特定地址,,供掃描模塊掃描取數(shù)進(jìn)行顯示。為了便于編寫串行通信程序,,使用振蕩頻率為11.0592MHz的晶振CR1 和C5,、R1及SW1組成的復(fù)位電路。
2 軟件設(shè)計(jì)和編寫
2.1 主控電路CPLD芯片設(shè)計(jì)與調(diào)試
主控電路的功能是讀取雙口RAM中的數(shù)據(jù)并通過譯碼邏輯電路將數(shù)據(jù)顯示在LED點(diǎn)陣顯示屏的特定位置上,。因?yàn)橹挥玫絾纹瑱C(jī)的一部分功能,,所以使用CPLD芯片將MCU中的總線讀控制器及其外圍譯碼邏輯電路集成在一起。如若采用傳統(tǒng)方案,,就必須采用多片芯片,;而使用CPLD后,只用一片芯片就可以實(shí)現(xiàn)所要的功能,??偩€讀控制器是產(chǎn)生時(shí)序的電路,需根據(jù)內(nèi)存的讀時(shí)序進(jìn)行設(shè)計(jì),,只有保證正確的時(shí)序才能讀出數(shù)據(jù),。雙口RAM的讀寫時(shí)序和普通RAM的讀寫時(shí)序基本相同,如圖5所示,。 CE(芯片使能)是片選信號,,在片選信號從高變低之前必須輸出地址信號給雙口RAM,然后再用讀信號去控制OE(輸出使能)端,,在OE信號由高變低后,,數(shù)據(jù)總線上的數(shù)據(jù)有效,即可控制讀出數(shù)據(jù)并譯碼輸出,。
復(fù)雜的時(shí)序電路用硬件描述語言描述,,一般是用有限狀態(tài)機(jī)來描述。有限狀態(tài)機(jī)是時(shí)序電路通用模型,,任何時(shí)序電路都可以表示成有限狀態(tài)機(jī),。從本質(zhì)上講,有限狀態(tài)機(jī)是由寄存器與組合邏輯構(gòu)成的時(shí)序電路,,各個(gè)狀態(tài)之間的轉(zhuǎn)移總是在時(shí)鐘的觸發(fā)下進(jìn)行的,。針對圖5所示的讀時(shí)序,,可列出如圖6所示的各種狀態(tài)的轉(zhuǎn)換圖。用Verilog HDL語言描述時(shí)可用帶有always語句的case語句建模,,狀態(tài)信息存儲在寄存器中,,case語句的多個(gè)分支包含每個(gè)狀態(tài)的行為。在這里將讀時(shí)序分為S0,、S1,、S2、S3四個(gè)狀態(tài),,其工作方式如下:
步驟S0在RAM的片選CE 使能之前輸出地址,;
步驟S1選中RAM,輸出讀信號,;
步驟S2行計(jì)數(shù)器輸出,,讀出RAM的數(shù)據(jù)并反相輸出;
步驟S3片選禁止,,讀禁止,,地址計(jì)數(shù)器加1。
譯碼輸出邏輯電路主要是提取地址計(jì)數(shù)器的計(jì)數(shù)輸出,。在某個(gè)狀態(tài)下,,行地址計(jì)數(shù)器輸出低5位數(shù)據(jù),位譯碼輸出高4位數(shù)據(jù)并譯碼輸出16個(gè)位選信號,。
時(shí)序電路中一般留有復(fù)位信號,,當(dāng)復(fù)位端為1時(shí),地址計(jì)數(shù)器復(fù)零,,地址輸出復(fù)零,,片選。讀控制信號置1,,使?fàn)顟B(tài)機(jī)回到狀態(tài)S0,。
2.2 行譯碼CPLD芯片設(shè)計(jì)
行譯碼器的功能較主控電路來講相對簡單,它是將主控電路的行計(jì)數(shù)器輸出的6位二進(jìn)制數(shù)據(jù)譯成32行的行選通信號,,去控制行驅(qū)動管驅(qū)動行輸出,。這是一個(gè)純組合邏輯電路,使用Verilog HDL 語言描述的always語句和case 多分支語句即可實(shí)現(xiàn)此功能,。
2.3 單片機(jī)的C程序設(shè)計(jì)
在本系統(tǒng)中,,單片機(jī)的功能主要是負(fù)責(zé)通信與數(shù)據(jù)處理。通信即通過串口接收來自PC機(jī)的數(shù)據(jù)并存儲在EEPROM中;數(shù)據(jù)處理即從EEPROM中取出數(shù)據(jù)并根據(jù)要顯示的效果進(jìn)行軟件處理,,再存放在雙口RAM中,。在本系統(tǒng)中,因單片機(jī)及外圍電路只負(fù)責(zé)通信和數(shù)據(jù)處理,,對實(shí)時(shí)性要求不高,,因此用前后臺系統(tǒng)進(jìn)行軟件設(shè)計(jì)就能達(dá)到要求。本系統(tǒng)采用嵌入式操作系統(tǒng)RTX51TNY(KEIL C平臺自帶的免費(fèi)的微實(shí)時(shí)內(nèi)核),。軟件主要由PROCESS.C和SERIAL.C兩個(gè)檔組成,。PROCESS.C包含三個(gè)任務(wù):任務(wù)0,初始化,;任務(wù)1,,靜態(tài)顯示;任務(wù)2,,左移顯示,。 SERIAL.C是串口中斷程序$靜態(tài)顯示的算法較簡單,只要將EEPROM中的字模數(shù)據(jù)存放到雙口RAM中的特定位置即可,。左移顯示則需要將字模數(shù)據(jù)每個(gè)字節(jié)左移,,然后存放在雙口RAM的特定位置。