基于ATmegal28的LED顯示屏圖像數(shù)據(jù)解碼設(shè)計(jì)
隨著LED-display.cnLEDw.com/">LED顯示屏的普及和成本的降低,LED顯示屏已經(jīng)成為公共場(chǎng)合信息宣傳的一種重要工具。目前實(shí)現(xiàn)對(duì)LED顯示屏的文字圖像更改的方法主要有:顯示屏通過(guò)串口或網(wǎng)線(xiàn)與計(jì)算機(jī)連接實(shí)現(xiàn)更改;通過(guò)GPRS網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程傳輸,接收后在計(jì)算機(jī)上用特定軟件解碼后發(fā)送到LED顯示屏顯示。以上方法始終需要在計(jì)算機(jī)平臺(tái)上實(shí)現(xiàn),附加成本較高。設(shè)計(jì)利用手機(jī)作為發(fā)送端,發(fā)送彩信至GPRS模塊,利用ATmegal28單片機(jī)直接對(duì)彩信圖像進(jìn)行解碼然后發(fā)送到LED顯示屏上進(jìn)行顯示。
l JPEG解碼可行性分析
該設(shè)計(jì)所用全彩LED屏接收的數(shù)據(jù)格式為Xmp格式,Xmp格式是簡(jiǎn)化的BMP格式。Xmp格式在圖像數(shù)據(jù)前有6個(gè)字節(jié)表示圖像的屬性,第1字節(jié)為1個(gè)點(diǎn)的字節(jié)數(shù);第2字節(jié)為XMP文件中包含的圖片個(gè)數(shù);第3,4字節(jié)為圖像的高;第5,6字節(jié)為圖像的寬,其后為圖像每點(diǎn)的顏色。每點(diǎn)的顏色用2個(gè)字節(jié)表示(16位色)。由于所用全彩LED屏只有64×64像素,所以JPEG解碼后還需進(jìn)行圖像的縮放。
JPEG解碼過(guò)程中所需要的緩存主要包括原始JPEG圖像數(shù)據(jù)的緩存、中間變量的緩存以及解出的Xmp數(shù)據(jù)的緩存。根據(jù)JPEG圖像的復(fù)雜度及壓縮比的不同,一般一幀320×240的彩色JPEG圖像的大小在2~20 KB。JPEG解碼緩存主要用于存儲(chǔ)Huffman表,量化表,IDCT解碼的臨時(shí)結(jié)果等。這些大約需要8 KB。解出的Xmp數(shù)據(jù)的緩存要求的RAM相對(duì)比較固定為9 KB。綜上JPEG解碼大致需25 KB的RAM。ATmegal28內(nèi)部只有4 KB的SRAM,所以該系統(tǒng)外擴(kuò)了64 KB的外部RAM。
2 軟件實(shí)現(xiàn)
該設(shè)計(jì)采用avr—gcc作為編譯工具。avr-gcc默認(rèn)設(shè)置棧由內(nèi)部RAM的頂部向下生長(zhǎng)。由于圖像處理過(guò)程中需要占用大量的RAM空間,所以應(yīng)該通過(guò)設(shè)置把所有數(shù)據(jù)區(qū)移到外部RAM,只留棧區(qū)在內(nèi)部RAM,避免數(shù)據(jù)的相互覆蓋。
JPEG解碼過(guò)程主要包括Huffman解碼、反量化及IDCT變換、色彩變換等模塊。該文采用的LED顯示屏是64×64點(diǎn)像素,并且只能顯示Xmp格式的圖片。因此在JPEG解碼后需增加圖像的縮放模塊。其流程框圖如圖1所示。
2.1 Huffman解碼的實(shí)現(xiàn)
Huffman解碼是解碼過(guò)程中重要的一環(huán)。傳統(tǒng)的哈夫曼解碼需要逐位查找哈夫曼表,進(jìn)行比較判斷,由于查找過(guò)程需要大量的移位及循環(huán)。這樣的解碼效率非常低。針對(duì)這種情況,充分考慮到ATmegal28的存儲(chǔ)容量的限制,在讀文件頭時(shí),軟件事先構(gòu)造出不同碼長(zhǎng)下的哈夫曼碼字的最小值表和最大值表如表1所示,最小值在哈夫曼表中的索引以及哈夫曼樹(shù)各葉子結(jié)點(diǎn)對(duì)應(yīng)的編碼表。
評(píng)論