http://www.51c51.com/test/test/16hanzi.htm 點(diǎn)陣式漢字LED顯示屏的原理與制作
石學(xué)軍
漢字顯示屏廣泛應(yīng)用與汽車報(bào)站器,廣告屏等。本文介紹一種實(shí)用的漢字顯示屏的制作,考慮到電路元件的易購(gòu)性,沒(méi)有使用8*8的點(diǎn)陣發(fā)光管模塊,而是直接使用了256個(gè)高量度發(fā)光管,組成了16行16列的發(fā)光點(diǎn)陣。同時(shí)為了降低制作難度,僅作了一個(gè)字的輪流顯示,實(shí)際使用時(shí)可根據(jù)這個(gè)原理自行擴(kuò)充顯示的字?jǐn)?shù)。
1漢字顯示的原理:
我們以UCDOS中文宋體字庫(kù)為例,每一個(gè)字由16行16列的點(diǎn)陣組成顯示。即國(guó)標(biāo)漢字庫(kù)中的每一個(gè)字均由256點(diǎn)陣來(lái)表示。我們可以把每一個(gè)點(diǎn)理解為一個(gè)像素,而把每一個(gè)字的字形理解為一幅圖像。事實(shí)上這個(gè)漢字屏不僅可以顯示漢字,也可以顯示在256像素
范圍內(nèi)的任何圖形。


hex格式文件下載(點(diǎn)右鍵,目標(biāo)另存為hex即可直接燒寫(xiě))


[/td]
我們以顯示漢字“大”為例,來(lái)說(shuō)明其掃描原理:
在UCDOS中文宋體字庫(kù)中,每一個(gè)字由16行16列的點(diǎn)陣組成顯示。如果用
8位的AT89C51單片機(jī)控制,由于單片機(jī)的總線為8位,一個(gè)字需要拆分為2個(gè)部分。
一般我們把它拆分為上部和下部,上部由8*16點(diǎn)陣組成,下部也由8*16點(diǎn)陣組成。
在本例中單片機(jī)首先顯示的是左上角的第一列的上半部分,即第0列的p00---p07口。方向?yàn)閜00到p07 ,顯示漢字“大”時(shí),p05點(diǎn)亮,由上往下排列,為p0.0 滅,p0.1 滅, p0.2 滅p0.3 滅, p0.4 滅, p0.5 亮,p0.6 滅,p0.7 滅。即二進(jìn)制00000100,轉(zhuǎn)換為16進(jìn)制為04h.。
上半部第一列完成后,繼續(xù)掃描下半部的第一列,為了接線的方便,我們?nèi)栽O(shè)計(jì)成由上往下掃描,即從p27向p20方向掃描,從上圖可以看到,這一列全部為不亮,即為00000000,16進(jìn)制則為00h。
然后單片機(jī)轉(zhuǎn)向上半部第二列,仍為p05點(diǎn)亮,為00000100,即16進(jìn)制04h.
這一列完成后繼續(xù)進(jìn)行下半部分的掃描,p21點(diǎn)亮,為二進(jìn)制00000010,即16進(jìn)制02h.
? ?依照這個(gè)方法,繼續(xù)進(jìn)行下面的掃描,一共掃描32個(gè)8位,可以得出漢字“大”
的掃描代碼為:
04H,00H,04H,02H,04H,02H,04H,04H
04H,08H,04H,30H,05H,0C0H,0FEH,00H
05H,80H,04H,60H,04H,10H,04H,08H
04H,04H,0CH,06H,04H,04H,00H,00H
由這個(gè)原理可以看出,無(wú)論顯示何種字體或圖像,都可以用這個(gè)方法來(lái)分析出它的掃描代碼從而顯示在屏幕上。
? ?不過(guò)現(xiàn)在有很多現(xiàn)成的漢字字模生成軟件,我們就不必自己去畫(huà)表格算代碼了。

軟件打開(kāi)后輸入漢字,點(diǎn)“檢取”,十六進(jìn)制數(shù)據(jù)的漢字代碼即可自動(dòng)生成,把我們所需要的豎排數(shù)據(jù)復(fù)制到我們的程序中即可。
? ?我們把行列總線接在單片機(jī)的i0口,然后把上面分析到的掃描代碼送入總線,就可以得到顯示的漢字了。在這個(gè)例子里,由于一共用到16行,16列,如果將其全部接入89c51
單片機(jī),一共使用32條io口,這樣造成了io資源的耗盡,系統(tǒng)也再無(wú)擴(kuò)充的余地。實(shí)際應(yīng)用中我們使用4-16線譯碼器74ls154來(lái)完成列方向的顯示。而行方向16條線則接在
p0口和p2口。

程序清單:
ORG
00H
LOOP: MOV A,#0FFH ;開(kāi)機(jī)初始化,清除畫(huà)面
MOV P0,A
;清除P0口
? ?? ? ANL P2,#00
;清除P2口
MOV R2,#200
D100MS: MOV R3,#250 ;延時(shí)100毫秒
? ?? ? DJNZ R3,$
? ?? ? DJNZ R2,D100MS
? ?? ? MOV 20H,#00H ;取碼指針的初值
l100:
MOV R1,#100 ;每個(gè)字的停留時(shí)間
L16:
MOV R6,#16 ;每個(gè)字16個(gè)碼
? ?? ? MOV R4,#00H ;掃描指針清零
? ?? ? MOV R0,20H ;取碼指針存入R0
L3:
MOV A,R4
;掃描指針存入A
? ?? ? MOV P1,A
;掃描輸出
? ?? ? INC R4
;掃描指針加1,掃描下一個(gè)
? ?? ? MOV A,R0
;取碼指針存入A
? ?? ? MOV DPTR,#TABLE ;取數(shù)據(jù)表的上半部分的代碼
? ?? ? MOVC A,@A+DPTR
? ?? ? MOV P0,A
;輸出到P0
? ?? ? INC R0
;取碼指針加1,取下一個(gè)碼。
? ?? ? MOV A,R0
? ?? ? MOV DPTR,#TABLE ;取數(shù)據(jù)表下半部份的代碼
? ?? ? MOVC A,@A+DPTR
? ?? ? MOV P2,A
;輸出到P2口
? ?? ? INC R0
MOV R3,#02
;掃描1毫秒
DELAY2:
MOV R5,#248
;
? ?? ? DJNZ R5,$
? ?? ? DJNZ R3,DELAY2
? ?? ? MOV A,#00H
;清除屏幕
? ?? ? MOV P0,A
? ?? ? ANL P2,#00H
DJNZ R6,L3
;一個(gè)字16個(gè)碼是否完成?
? ?? ? DJNZ R1,L16
;每個(gè)字的停留時(shí)間是否到了?
? ?? ? MOV 20H,R0
;取碼指針存入20H
? ?? ? CJNE R0,#0FFH,L100 ;8個(gè)字256個(gè)碼是否完成?
? ?? ? JMP LOOP ;反復(fù)循環(huán)
? ???
TABLE :
;漢字“倚”的代碼
db 01H,00H,02H,00H,04H,00H,1FH,0FFH
db 0E2H,00H,22H,00H,22H,0FCH,26H,88H
db 2AH,88H,0F2H,88H,2AH,0FAH,26H,01H
db 63H,0FEH,26H,00H,02H,00H,00H,00H
;以下分別輸入天,一,出,寶,刀,屠,龍,的代碼,略。
end
電路中行方向由p0口和p2口完成掃描,由于p0口沒(méi)有上拉電阻,因此接一個(gè)4.7k*8的排阻上拉。如沒(méi)有排阻,也可用8個(gè)普通的4.7k 1/8w電阻。為提供負(fù)載能力,接16個(gè)2n5551的NPN三極管驅(qū)動(dòng)。
列方向則由4—16譯碼器74LS154完成掃描,它由89C51的P1.0---P1.3控制。同樣,驅(qū)動(dòng)部分則是16個(gè)2N5401的三極管完成的。
電路的供電為一片LM7805三端穩(wěn)壓器,耗電電流為100Ma左右。
采用一塊12*20cm的萬(wàn)能電路板,應(yīng)當(dāng)選用質(zhì)量好些的發(fā)光管,(否則有壞點(diǎn)現(xiàn)象,更換起來(lái)較麻煩)首先將256個(gè)發(fā)光管插入電路板,注意插入方向,同時(shí)使高度一致,行方向直接焊接起來(lái),列方向則搭橋架空焊接,完成后用萬(wàn)用表測(cè)試一下如有不亮的更換掉。
? ? 然后找一個(gè)電腦硬盤的數(shù)據(jù)線,截取所需的長(zhǎng)度,分別將行,列線引出至電路的相關(guān)管腳即可。原理圖為了簡(jiǎn)潔,故只畫(huà)出了示意圖,行列方向只畫(huà)出了2個(gè)三極管,屏幕只畫(huà)出4個(gè)發(fā)光管,實(shí)際上發(fā)光管為256只,三極管行列方向各16只,一共32只。焊接過(guò)程認(rèn)真仔細(xì)一天時(shí)間即可完成全部制作。將程序編譯后燒寫(xiě)入89c51, 插入40pin Ic座,即可看到屏幕輪流顯示:“倚天一出寶刀屠龍”。
? ? 當(dāng)然,你可將程序的漢字代碼部分更換為您所需要的代碼即可顯示你所需要的漢字。

上圖為實(shí)物的照片,對(duì)本文感興趣的讀者可在本期無(wú)線電雜志的配套光盤中找到他的完成程序,或者到作者網(wǎng)站www.51c51.com下載。
元件清單:
名稱
[td=1,1,60]數(shù)量
[td=1,1,180]規(guī)格
[/td] 4.7k 1/8w
[td=1,1,60]32
[td=1,1,180]電阻
[/td] 4.7k*8排阻
[td=1,1,60]1
[td=1,1,180]
[/td] 2n5551
[td=1,1,60]16
[td=1,1,180]小功率NPN三極管
[/td] 2n5401
[td=1,1,60]16
[td=1,1,180]小功率PNP三極管
[/td] led
[td=1,1,60]256
[td=1,1,180]3mm白發(fā)紅高亮度
[/td] 22P
[td=1,1,60]2
[td=1,1,180]瓷片電容
[/td] 10uf/50v
[td=1,1,60]1
[td=1,1,180]電解電容
[/td] 100uf/25v
[td=1,1,60]2
[td=1,1,180]電解電容
[/td] AT89C51
[td=1,1,60]1
[td=1,1,180]或AT89S51
[/td] 40pin Ic座
[td=1,1,60]1
[td=1,1,180]插89c51用
[/td] 12M
[td=1,1,60]1
[td=1,1,180]晶體
[/td] 74LS154
[td=1,1,60]1
[td=1,1,180]或74HC154
[/td] LM7805
[td=1,1,60]1
[td=1,1,180]穩(wěn)壓IC
[/td] 電源插座
[td=1,1,60]1
[td=1,1,180]
[/td] 穩(wěn)壓電源
[td=1,1,60]1
[td=1,1,180]9-12V/200Ma穩(wěn)壓電源
[/td] 萬(wàn)用電路板
[td=1,1,60]1
[td=1,1,180]12*20(cm)