|
用16 x16的LED點(diǎn)陣顯示漢字或圖片時,有時需要用到特定的軟件來處理。但是對于簡單的圖像,可以使用手繪方式繪圖,然后根據(jù)需求,將圖像轉(zhuǎn)換為C語言的數(shù)組,粘貼在C程序中使用。此時用Excel可以快速實(shí)現(xiàn)。以下是實(shí)現(xiàn)的效果。
以16*16點(diǎn)陣的漢字為例,基本制作過程如下:
1. 在Excel中,框出一個16*16的區(qū)域,如上圖所示,標(biāo)示行號和列號。在繪圖區(qū),設(shè)置條件格式:如果單元格的數(shù)值等于1,則顯示為粉色底色的數(shù)字。這樣,當(dāng)填入數(shù)字1時,就能夠突出看到填入的效果。
2. 在標(biāo)示出的區(qū)域內(nèi),用描點(diǎn)的方式繪制所需圖形。需要顯示數(shù)據(jù)的地方填入1,其余地方保持空白。
3. 因?yàn)槲宜褂玫狞c(diǎn)陣是16行 x 16列的,是以逐列的方式進(jìn)行掃描的。因此取數(shù)據(jù)時,從每一列的第16行起,逐步取數(shù)。但因?yàn)槭褂玫氖谴邪l(fā)送方式,因此需要將每一列分為2個字節(jié),先是下半部分為一個字節(jié),然后再上半部分為另一個字節(jié)。同樣,作為串行顯示方式,最先進(jìn)入顯示陣列的數(shù)據(jù)是圖像的最右邊一列(Q列)的右下角的半列(Q17:Q10),然后是右上角的半列(Q9:Q2),然后是向左邊面逐列顯示(Q->P->O.....-->C-->B這樣的順序)。以這樣的順序送數(shù)據(jù)到對應(yīng)列的數(shù)據(jù)寄存器,就可以正確顯示所要的圖像。
下面是十六進(jìn)制數(shù)據(jù)的形成過程:
1. 每列中,上半列的字節(jié)計算公式為:=DEC2HEX(B9*128+B8*64+B7*32+B6*16+B5*8+B4*4+B3*2+B2)。其中DEC2HEX是將十進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制方式的字符串格式的函數(shù)。里面B9*128+B8*64+B7*32+B6*16+B5*8+B4*4+B3*2+B2則是將圖像數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù),最底下一行對應(yīng)的數(shù)值是128(2的7次方),然后依次對應(yīng)64,32,。。。,1等。把這個計算的結(jié)果,顯示在每一列圖像的下方。這個可以在把第一列的公式填寫完成后,通過拖動的方式將全部16列填滿即可。
對應(yīng)于下半列,相應(yīng)公式為=DEC2HEX(B16*128+B15*64+B14*32+B13*16+B12*8+B11*4+B10*2+B9)。
2. 將16進(jìn)制字符串顯示格式標(biāo)準(zhǔn)化。因?yàn)榻Y(jié)果要用在C語言中,因此需要將默認(rèn)的格式轉(zhuǎn)換為C語言的默認(rèn)格式 0xNN的形式。如果不要求美觀,可以直接在上面顯示的結(jié)果前面加 “0x”即可。為了美觀,則需要判斷上面的結(jié)果是1位長度還是2位長度。對于1位長度,則在其前面增加“0x0”,否則只增加"0x"即可。對應(yīng)于每個單元格,其公式為:=IF(LEN(B18)=1,"0x0"&B18,"0x"&B18)。其中IF為條件語句,條件為LEN(B18) = 1, 如果條件成立,則增加"0x0" (0x0 & B18),否則只是增加"0x" (0x & B18)。
對于其他行列,拖動即可獲取所有字節(jié)的C語言標(biāo)準(zhǔn)化16進(jìn)制字符串。
3. 將整個數(shù)據(jù)合成為一個C語言語句,可以通過復(fù)制粘貼的形式,粘貼到C語言源程序中。 根據(jù)前面一部分第3點(diǎn)說明的字節(jié)順序,可以逆序的方式,將上面的32個字節(jié)合并成一個C語言數(shù)組定義語句。不過這里面沒有復(fù)雜的技巧,只是很繁瑣的重復(fù)工作。做法如下:
="unsigned char code HANZI[] = {" &CHAR(10) & CHAR(13) &
Q21&","&Q20&","&P21&","&P20&","&O21&","&O20&","&N21&","&N20&","&CHAR(10)&CHAR(13)
&M21&","&M20&","&L21&","&L20&","&K21&","&K20&","&J21&","&J20&","&CHAR(10)&CHAR(13)
&I21&","&I20&","&H21&","&H20&","&G21&","&G20&","&F21&","&F20&","&CHAR(10)&CHAR(13)
&E21&","&E20&","&D21&","&D20&","&C21&","&C20&","&B21&","&B20&"," & CHAR(10) & CHAR(13)
& "};"
以上的漢字點(diǎn)陣在Proteus中仿真電路如下。其中MCU為AT89C52, 串口芯片為74HC595,行列各2片串聯(lián)。左邊兩片提供列掃描地址,后面兩片提供行顯示數(shù)據(jù)。顯示點(diǎn)陣為4個8*8點(diǎn)陣(Proteus中光電元件MATRIX-8X8-RED將所有管腳移動到同一側(cè)后形成的新元件,便于組成并列點(diǎn)陣)組成的一個16*16點(diǎn)陣(上面2個正放,下面2個X軸對稱倒放)。因此在顯示字節(jié)計算時,公式略有不同。具體公式為:=DEC2HEX(B11*128+B12*64+B13*32+B14*16+B15*8+B16*4+B17*2+B18)。其余和上面相同。
具體運(yùn)行效果如下:
|
|