何穎
(西安思源學(xué)院 電子信息工程學(xué)院,陜西西安,710038)
在現(xiàn)代工業(yè)控制管理和智能化的儀器中,越來(lái)越多的地方需要用一些特殊的字符點(diǎn)陣圖形顯示,漢字顯示也被廣泛應(yīng)用于公交新聞?wù)?、巨型廣告屏幕等。發(fā)光二極管顯示器可分為圖形顯示和視頻顯示,由發(fā)光二極管燈矩陣塊組成。顯示屏廣泛用于交通運(yùn)輸、鐵路車站、商場(chǎng)、醫(yī)院、酒店、證券市場(chǎng)、工業(yè)企業(yè)管理等公共場(chǎng)所[1,2]。
無(wú)論是單個(gè)發(fā)光二極管(LED),發(fā)光數(shù)碼管,都不能將完整的、復(fù)雜的文字和圖形信息展示出來(lái),都不能滿足大容量信息的顯示,比如新聞?wù)?、地鐵、商戶燈公共信息的顯示,主要是因?yàn)闆](méi)有足夠的空間顯示復(fù)雜的字符,于是出現(xiàn)了LED點(diǎn)陣顯示,點(diǎn)陣是由多個(gè)LED小燈連接起來(lái),并按照矩陣的方式排列出來(lái)的模塊,通過(guò)對(duì)應(yīng)的發(fā)光二極管點(diǎn)亮和熄滅組成非常復(fù)雜的文字或者圖形[3]。LED具有高亮度、低工作電壓、低功耗、體積小、耐沖擊性能及穩(wěn)定的特點(diǎn)。文中就是基于單片機(jī)的LED室外大屏幕電子廣告牌的設(shè)計(jì),通過(guò)單片機(jī)驅(qū)動(dòng)點(diǎn)陣,軟件程序的編寫(xiě),用不同的方式顯示特定的字符和圖像[4,5]。
本次設(shè)計(jì)采用的是16×16的點(diǎn)陣顯示特定漢字和數(shù)字實(shí)現(xiàn)。主控芯片采用的是ATMEL公司研發(fā)生產(chǎn)的AT89C51芯片,選用4個(gè)8×8的點(diǎn)陣模塊拼接而成一個(gè)16×16的點(diǎn)陣。包含有兩個(gè)74HC595串行移位芯片和兩個(gè)74HC138譯碼器對(duì)其進(jìn)行驅(qū)動(dòng),能提供足夠大的供電電流。驅(qū)動(dòng)模塊分別在P1口同時(shí)輸入0到15的十進(jìn)制數(shù),輸出兩組8位二進(jìn)制數(shù)通過(guò)低電平驅(qū)動(dòng)列[6]。在P3口通過(guò)輸入高低電平控制脈沖,輸出通過(guò)移位高電平驅(qū)動(dòng)行來(lái)實(shí)現(xiàn)??刂颇K,則是通過(guò)外部硬件按鍵進(jìn)入中斷系統(tǒng),來(lái)控制點(diǎn)陣移動(dòng)。系統(tǒng)設(shè)計(jì)框圖如圖1所示。
圖1 系統(tǒng)設(shè)計(jì)框圖
主控模塊是AT89C51芯片驅(qū)動(dòng)和控制其他模塊,由P1.0、P1.1、P1.2驅(qū)動(dòng)595鎖存器,P2.0、P2.1、P2.2、P2.3驅(qū)動(dòng)138譯碼器,P3.1、P3.2控制按鍵。
本次設(shè)計(jì)的每一個(gè)漢字都是由16行16 列的點(diǎn)陣形成展示的,所以每個(gè)字都有 256個(gè)點(diǎn)陣來(lái)表示,通過(guò)字模提取軟件,設(shè)置字符的高度和寬度,本次設(shè)置為16×16,輸入要顯示的漢字,點(diǎn)擊鍵盤ctrl+enter,就可以在主界面顯示點(diǎn)陣字符,點(diǎn)陣顯示的字符如圖2所示。
圖2 點(diǎn)陣顯示的字符
顯示模塊,是由4塊8×8點(diǎn)陣組成,其中引腳YZ1到Y(jié)Z8和引腳YY1到Y(jié)Y8分別是兩個(gè)138譯碼器的輸出端,作為列驅(qū)動(dòng)點(diǎn)陣。引腳ZS1到ZS8和引腳ZX1和ZX8分別是兩個(gè)595鎖存器的輸出端,作為行驅(qū)動(dòng)點(diǎn)陣。
控制模塊硬件電路是由兩個(gè)按鍵K1和K2組成,分別控制點(diǎn)陣是否移動(dòng)和移動(dòng)方向[7,8]。按下K1點(diǎn)陣移動(dòng)暫停,再次按下移動(dòng)。點(diǎn)陣最開(kāi)始的移動(dòng)方向是左移,按下K2點(diǎn)陣右移,再次按下點(diǎn)陣左移。
驅(qū)動(dòng)模塊是由兩塊74HC595和兩塊74HC138組成,分別驅(qū)動(dòng)行和列,使16×16的LED點(diǎn)陣可以顯示出6個(gè)特定的漢字和四個(gè)數(shù)字。
在主程序中,先初始化單片機(jī),將單片機(jī)設(shè)定為用戶想要的模式,本次設(shè)計(jì)先是將單片機(jī)模式設(shè)定為計(jì)數(shù)器0工作方式1。因?yàn)樵O(shè)計(jì)中用按鍵可以控制點(diǎn)陣移動(dòng),所以采用了中斷系統(tǒng),在單片機(jī)初始化中開(kāi)總中斷,開(kāi)T0中斷,并給計(jì)數(shù)器設(shè)置初值,定記時(shí)到65536進(jìn)入中斷。初始化結(jié)束后,進(jìn)入死循環(huán),調(diào)用顯示函數(shù)xianshi(),使單片機(jī)點(diǎn)亮點(diǎn)陣,并出現(xiàn)用戶想要顯示的數(shù)據(jù)。判斷是否有按鍵按下,如果有鍵按下進(jìn)入相應(yīng)的程序?qū)崿F(xiàn)按鍵功能,如果沒(méi)有按鍵按下則點(diǎn)陣一直左移出現(xiàn)數(shù)據(jù)。主程序流程圖如圖3所示。
圖3 主程序流程圖
程序如下所示:
本次設(shè)計(jì)采用74HC595控制點(diǎn)陣的行。先點(diǎn)亮上部分的8×16點(diǎn)陣,每次數(shù)據(jù)移位8次后產(chǎn)生溢出標(biāo)志位CY賦值給數(shù)據(jù)輸入端DS,SH_cp上升沿?cái)?shù)據(jù)寄存器里面的數(shù)據(jù)開(kāi)始移位,下降沿移位寄存器數(shù)據(jù)不改變,依次循環(huán)8次點(diǎn)亮上部分的8行點(diǎn)陣,下部分同理,595驅(qū)動(dòng)模塊流程圖如圖4所示。
圖4 595驅(qū)動(dòng)模塊流程圖
點(diǎn)亮點(diǎn)陣功能是在顯示模塊中實(shí)現(xiàn)的,138譯碼器控制點(diǎn)陣的列掃描,在單片機(jī)P2端口輸入0-15,通過(guò)138輸出的011111111到11111110低電平順序掃描上下部分8列點(diǎn)陣,調(diào)用writedata(uchar dat1,uchar dat2)函數(shù)順序點(diǎn)亮上下部分8行點(diǎn)陣,在這個(gè)子函數(shù)中調(diào)用本次設(shè)計(jì)需要顯示的字符數(shù)組,然后實(shí)現(xiàn)這個(gè)子函數(shù)的功能。wr itedata(tab[net+aa],tab[net+aa+1]),其中net為列描次數(shù),aa為行掃描次數(shù),tab[net+aa]為上部分點(diǎn)陣行掃描;tab[net+aa+1]為下部分點(diǎn)陣行掃描。每次掃描結(jié)束后清屏,保證漢子正確無(wú)誤的顯示出來(lái),當(dāng)把數(shù)組tab[]里的數(shù)據(jù)讀完后,一次循環(huán)結(jié)束。顯示模塊流程圖如圖5所示。
圖5 顯示模塊流程圖
定時(shí)時(shí)間到,進(jìn)入中斷模塊。在中斷模塊中,單片機(jī)控制點(diǎn)陣移動(dòng)方向,設(shè)定一個(gè)變量alt,讓alt自加,加到一定的值,點(diǎn)陣開(kāi)始移動(dòng)。判斷位變量fangxiang是否為低電平,即判斷S2按鍵是否按下。如果按下則正向移動(dòng),掃描次數(shù)變量net從0開(kāi)始自加一直到288(因?yàn)?6×16點(diǎn)陣,顯示完本次設(shè)計(jì)所有的數(shù)字和漢字,需要掃描288次)這個(gè)過(guò)程中若S2按鍵沒(méi)有再次按下,則一次正向掃描結(jié)束,net清零,開(kāi)始下一次的正向掃描。如果在net還沒(méi)有自加到288時(shí),S2按鍵按下,則net從當(dāng)前的值開(kāi)始自減,導(dǎo)致移動(dòng)方向相反,直到net自減到0這個(gè)過(guò)程中S2按鍵沒(méi)有按下,則net重新賦值288反向移動(dòng),一次反向掃描結(jié)束。如此這樣反復(fù)掃描。中斷模塊流程圖如圖6所示。
圖6 中斷模塊流程圖
LED室外大屏幕電子廣告牌的實(shí)物圖如圖7所示。
圖7 LED室外大屏幕電子廣告牌的實(shí)物圖
本次設(shè)計(jì)的課題是LED室外大屏幕電子廣告牌的設(shè)計(jì)與制作。系統(tǒng)以AT89C51為核心芯片,P1和P3端口分別控制74HC595和74HC138驅(qū)動(dòng)行和列,點(diǎn)亮16×16點(diǎn)陣,全屏可以顯示一個(gè)完整的漢字和兩個(gè)數(shù)字。共分為主控模塊、驅(qū)動(dòng)模塊、顯示模塊、控制模塊4部分實(shí)現(xiàn)。功能實(shí)現(xiàn)采用的是動(dòng)態(tài)掃描,使字符能夠自左向右或者自右向左依次顯示出來(lái),此次設(shè)計(jì)共顯示4個(gè)數(shù)字6個(gè)漢字,這些字符完整的顯示出來(lái)一共需要掃描288次。要顯示的字符通過(guò)字模提取軟件得到的程序存在數(shù)組tab[ ]中。通過(guò)138譯碼器每次選通點(diǎn)陣的一列,在595顯示子程序中讀取數(shù)組元素,相應(yīng)的字符會(huì)顯示在點(diǎn)陣上。本次共設(shè)計(jì)了兩個(gè)功能按鍵,一個(gè)按鍵是控制字符移動(dòng)暫停;另一個(gè)按鍵是控制字符移到的方向??刂谱址苿?dòng)按鍵,是在主函數(shù)中,通過(guò)停止計(jì)數(shù)器計(jì)數(shù)是在主函數(shù)中實(shí)現(xiàn);本系統(tǒng)共設(shè)計(jì)了兩種移動(dòng)方式,由左至右和由右至左,這兩種移動(dòng)方式皆是在中斷函數(shù)中實(shí)現(xiàn),當(dāng)硬件有鍵按下時(shí),執(zhí)行相應(yīng)的軟件程序。硬件默認(rèn)先是向左移動(dòng),有鍵按下時(shí)向右移動(dòng),再次按下向左移動(dòng),反復(fù)交替移動(dòng)。本次設(shè)計(jì)最終通過(guò)軟硬件結(jié)合,實(shí)現(xiàn)電子廣告牌的設(shè)計(jì)。