基于CPLD和Embedded System的LED點(diǎn)陣顯示
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(芯片使能)是片選信號(hào),在片選信號(hào)從高變低之前必須輸出地址信號(hào)給雙口RAM,然后再用讀信號(hào)去控制OE(輸出使能)端,在OE信號(hào)由高變低后,數(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)行的。針對(duì)圖5所示的讀時(shí)序,可列出如圖6所示的各種狀態(tài)的轉(zhuǎn)換圖。用Verilog HDL語言描述時(shí)可用帶有always語句的case語句建模,狀態(tài)信息存儲(chǔ)在寄存器中,case語句的多個(gè)分支包含每個(gè)狀態(tài)的行為。在這里將讀時(shí)序分為S0、S1、S2、S3四個(gè)狀態(tài),其工作方式如下: 步驟S0在RAM的片選CE 使能之前輸出地址; 步驟S1選中RAM,輸出讀信號(hào); 步驟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è)位選信號(hào)。 時(shí)序電路中一般留有復(fù)位信號(hào),當(dāng)復(fù)位端為1時(shí),地址計(jì)數(shù)器復(fù)零,地址輸出復(fù)零,片選。讀控制信號(hào)置1,使?fàn)顟B(tài)機(jī)回到狀態(tài)S0。 2.2 行譯碼CPLD芯片設(shè)計(jì) 2.3 單片機(jī)的C程序設(shè)計(jì)
行譯碼器的功能較主控電路來講相對(duì)簡單,它是將主控電路的行計(jì)數(shù)器輸出的6位二進(jìn)制數(shù)據(jù)譯成32行的行選通信號(hào),去控制行驅(qū)動(dòng)管驅(qū)動(dòng)行輸出。這是一個(gè)純組合邏輯電路,使用Verilog HDL 語言描述的always語句和case 多分支語句即可實(shí)現(xiàn)此功能。
在本系統(tǒng)中,單片機(jī)的功能主要是負(fù)責(zé)通信與數(shù)據(jù)處理。通信即通過串口接收來自PC機(jī)的數(shù)據(jù)并存儲(chǔ)在EEPROM中;數(shù)據(jù)處理即從EEPROM中取出數(shù)據(jù)并根據(jù)要顯示的效果進(jìn)行軟件處理,再存放在雙口RAM中。在本系統(tǒng)中,因單片機(jī)及外圍電路只負(fù)責(zé)通信和數(shù)據(jù)處理,對(duì)實(shí)時(shí)性要求不高,因此用前后臺(tái)系統(tǒng)進(jìn)行軟件設(shè)計(jì)就能達(dá)到要求。本系統(tǒng)采用嵌入式操作系統(tǒng)RTX51TNY(KEIL C平臺(tái)自帶的免費(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的特定位置。
評(píng)論