【文章內(nèi)容簡(jiǎn)介】
6數(shù)組的顯示模塊的行輸入端與FPGA內(nèi)的只讀存儲(chǔ)器ROM的16位數(shù)據(jù)輸出端口相連;16個(gè)列控制端與一個(gè)416譯碼器A的輸出相連;而譯碼器A的輸入端和片選信號(hào)又與FPGA內(nèi)的列掃描控制模塊的輸出端口scan4scan0相連。FPGA ADDR掃描控制模塊ROMCS 416譯碼器A1616點(diǎn)陣scan0scan4Scan4行輸入端列控制端 方案二VHDL程序設(shè)計(jì)的是硬件,他和編程語言的最大區(qū)別是它可以“并發(fā)執(zhí)行”。本設(shè)計(jì)可以將LED顯示屏要的顯示內(nèi)容抽象成一個(gè)二維數(shù)組(數(shù)組中的‘1’對(duì)映點(diǎn)陣顯示屏上面的亮點(diǎn)),用VHDL語言設(shè)計(jì)一個(gè)進(jìn)程將這個(gè)數(shù)組動(dòng)態(tài)顯示在LED顯示屏上,再利用另一個(gè)進(jìn)程對(duì)這個(gè)數(shù)組按一定頻率進(jìn)行數(shù)據(jù)更新,更新的方式可以有多種。因?yàn)閮蓚€(gè)進(jìn)程是同時(shí)進(jìn)行的(并發(fā)執(zhí)行),如果對(duì)數(shù)組中的漢字?jǐn)?shù)據(jù)按滾動(dòng)的方式更新,則可實(shí)現(xiàn)漢字的滾動(dòng)顯示。動(dòng)態(tài)顯示 方案二的原理框圖更新數(shù)組數(shù)據(jù)二維數(shù)組 方案比較方案一很容易實(shí)現(xiàn),而且占用FPGA的資源較少。但是由于其實(shí)現(xiàn)方式的局限性,該方案只能實(shí)現(xiàn)漢字的滾動(dòng)顯示。方案二中將LED點(diǎn)陣抽象成了一個(gè)二維數(shù)組。可以設(shè)計(jì)一些比較復(fù)雜的算法來控制這個(gè)數(shù)組,使設(shè)計(jì)的系統(tǒng)不但可以滾動(dòng)顯示漢字,還可以擴(kuò)展一些其它的顯示效果。但是方案二中對(duì)數(shù)組的處理部分對(duì)FPGA芯片的資源消耗太大。根據(jù)自身?xiàng)l件以及硬件條件我最終選擇方案一。3 掃描控制模塊 LED點(diǎn)陣原理以下為1616點(diǎn)陣LED外觀及引腳圖及其等效電路,只要其對(duì)應(yīng)的X、Y軸順向偏壓,即可使LED發(fā)亮。例如如果想使左上角LED點(diǎn)亮,則Y0=1,X0=0即可。應(yīng)用時(shí)限流電阻可以放在X軸或Y軸。 1616點(diǎn)陣LED外觀圖 1616點(diǎn)陣LED等效圖 點(diǎn)陣LED掃描法介紹:點(diǎn)陣LED一般采用掃描式顯示,實(shí)際運(yùn)用分為三種方式: (1)點(diǎn)掃描(2)行掃描(3)列掃描若使用第一種方式,其掃描頻率必須大于1664=1024Hz,周期小于1ms即可。若使用第二和第三種方式,則頻率必須大于168=128Hz。此外一次驅(qū)動(dòng)一列或一行(8顆LED)時(shí)需外加驅(qū)動(dòng)電路提高電流,否則LED亮度會(huì)不足。 漢字的存儲(chǔ)用動(dòng)態(tài)分時(shí)掃描技術(shù)使LED點(diǎn)陣模塊顯示圖像,需要進(jìn)行兩步工作。第一步是獲得數(shù)據(jù)并保存,即在存貯器中建立漢字?jǐn)?shù)據(jù)庫。第二步是在掃描模塊的控制下,配合行掃描的次序正確地輸出這些數(shù)據(jù)。獲得圖像數(shù)據(jù)的步驟是,16共256個(gè)小方格的矩形框中,再在有筆劃下落處的小方格里填上“1”,無筆劃處填上“0”,這樣就形成了與這個(gè)漢字所對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)在該矩形框上的分布,再將此分布關(guān)系以3216的數(shù)據(jù)結(jié)構(gòu)組成64個(gè)字節(jié)的數(shù)據(jù),并保存在只讀存貯器ROM中。以這種方式將若干個(gè)漢字的數(shù)據(jù)貯存在存貯器內(nèi),就完成了圖像數(shù)據(jù)庫的建立工作。H0...........H15 L0…………………………………………………………L15L0…………………………………………………………L15 然后,依次對(duì)多漢字抽取像素信息,并按序排隊(duì)存放起來,便可得到一個(gè)待顯示數(shù)據(jù)序列。將這個(gè)序列存到ROM中進(jìn)一步通過尋址的方法來控制該數(shù)據(jù)序列的釋放過程,就可實(shí)現(xiàn)在LED 發(fā)光二極管點(diǎn)陣上滾動(dòng)顯示多漢字信息的目的。,某一時(shí)刻能在顯示數(shù)據(jù)序列中定位待顯示數(shù)據(jù)的地址指針可用下式計(jì)算: addr=n+m 滾動(dòng)顯示多漢字信息的原理示意圖 漢字的顯示先在掃描模塊的控制下,由地址線確定每次由ROM送出某一列的16個(gè)LED所要顯示的漢字的控制字節(jié)數(shù)據(jù),同時(shí)由掃描模塊輸出的5位掃描碼經(jīng)兩個(gè)416譯碼器解碼后決定相應(yīng)的某一列可以被點(diǎn)亮,而另外31列都不能被點(diǎn)亮。,就接著進(jìn)行下一行的掃描。當(dāng)完成了一次32行的掃描后,也就完成了一幀畫面的顯示。重復(fù)上述過程不斷修改ROM的地址區(qū)間的起始地址,轉(zhuǎn)向下一幅畫面的數(shù)據(jù)傳送和顯示。如此進(jìn)行,就可以在LED點(diǎn)陣模塊上滾動(dòng)顯示ROM中存儲(chǔ)的漢字。 滾動(dòng)速度的控制將LED點(diǎn)陣看成一個(gè)滑窗。通過這個(gè)“滑窗”每次能“看到”32個(gè)存儲(chǔ)單元(2個(gè)漢字長(zhǎng)度)的信息。只讀存儲(chǔ)器ROM中鏈?zhǔn)降拇娣帕巳舾蓚€(gè)漢字的點(diǎn)陣信息,“滑窗”在這若干個(gè)漢字點(diǎn)陣信息上面滑動(dòng),我們通過“滑窗”看到的就是漢字的滾動(dòng)顯示。在用VHDL編程的時(shí)候,可以定義一個(gè)變量x作為“滑窗”在ROM上的起始地址,設(shè)計(jì)一個(gè)進(jìn)程按一定的頻率對(duì)x進(jìn)行累加,再設(shè)計(jì)一個(gè)進(jìn)程將以x為起始地址的長(zhǎng)度為32的ROM中的區(qū)域動(dòng)態(tài)顯示在LED點(diǎn)陣中。顯然x累加的速度決定了漢字的滾動(dòng)速度。此進(jìn)程根據(jù)定義的信號(hào)n來控制x遞增的速度,n由外部的按鍵控制。n的范圍為0~7代表了漢字的不同的滾動(dòng)速度。當(dāng)n為0時(shí)漢字滾動(dòng)的速度最快,n為7時(shí)LED點(diǎn)陣上顯示的漢字靜止。4 VHDL語言程序設(shè)計(jì)process(clk) 顯示時(shí)序控制 begin if clk39。event and clk=‘139。 then 上升沿 dount=dount+1。計(jì)數(shù)累加 if dount=255 then if S=15 then S=0000。S控制單個(gè)漢字掃描周期 else S=S+1。 end if。 S=S+1。 else S=S。 end if。 if cdount15 then 控制列掃描頻率 cdount=cdount+1。 else cdount=0000。 end if。 end if。 end process。 process(cdount,s) begin case cdount is 列掃描頻率 when 0000=keyc=0000000000000001。 列選擇 when 0001=keyc=0000000000000010。列掃描 共掃描8列 when 0010=keyc=0000000000000100。 when 0011=keyc=0000000000001000。 when 0100=keyc=0000000000010000。 when 0101=keyc=0000000000100000。 when 0110=keyc=0000000001000000。 when 0