何穎
(西安思源學院 電子信息工程學院,陜西西安,710038)
在現代工業控制管理和智能化的儀器中,越來越多的地方需要用一些特殊的字符點陣圖形顯示,漢字顯示也被廣泛應用于公交新聞站、巨型廣告屏幕等。發光二極管顯示器可分為圖形顯示和視頻顯示,由發光二極管燈矩陣塊組成。顯示屏廣泛用于交通運輸、鐵路車站、商場、醫院、酒店、證券市場、工業企業管理等公共場所[1,2]。
無論是單個發光二極管(LED),發光數碼管,都不能將完整的、復雜的文字和圖形信息展示出來,都不能滿足大容量信息的顯示,比如新聞站、地鐵、商戶燈公共信息的顯示,主要是因為沒有足夠的空間顯示復雜的字符,于是出現了LED點陣顯示,點陣是由多個LED小燈連接起來,并按照矩陣的方式排列出來的模塊,通過對應的發光二極管點亮和熄滅組成非常復雜的文字或者圖形[3]。LED具有高亮度、低工作電壓、低功耗、體積小、耐沖擊性能及穩定的特點。文中就是基于單片機的LED室外大屏幕電子廣告牌的設計,通過單片機驅動點陣,軟件程序的編寫,用不同的方式顯示特定的字符和圖像[4,5]。
本次設計采用的是16×16的點陣顯示特定漢字和數字實現。主控芯片采用的是ATMEL公司研發生產的AT89C51芯片,選用4個8×8的點陣模塊拼接而成一個16×16的點陣。包含有兩個74HC595串行移位芯片和兩個74HC138譯碼器對其進行驅動,能提供足夠大的供電電流。驅動模塊分別在P1口同時輸入0到15的十進制數,輸出兩組8位二進制數通過低電平驅動列[6]。在P3口通過輸入高低電平控制脈沖,輸出通過移位高電平驅動行來實現。控制模塊,則是通過外部硬件按鍵進入中斷系統,來控制點陣移動。系統設計框圖如圖1所示。

圖1 系統設計框圖
主控模塊是AT89C51芯片驅動和控制其他模塊,由P1.0、P1.1、P1.2驅動595鎖存器,P2.0、P2.1、P2.2、P2.3驅動138譯碼器,P3.1、P3.2控制按鍵。
本次設計的每一個漢字都是由16行16 列的點陣形成展示的,所以每個字都有 256個點陣來表示,通過字模提取軟件,設置字符的高度和寬度,本次設置為16×16,輸入要顯示的漢字,點擊鍵盤ctrl+enter,就可以在主界面顯示點陣字符,點陣顯示的字符如圖2所示。

圖2 點陣顯示的字符
顯示模塊,是由4塊8×8點陣組成,其中引腳YZ1到YZ8和引腳YY1到YY8分別是兩個138譯碼器的輸出端,作為列驅動點陣。引腳ZS1到ZS8和引腳ZX1和ZX8分別是兩個595鎖存器的輸出端,作為行驅動點陣。
控制模塊硬件電路是由兩個按鍵K1和K2組成,分別控制點陣是否移動和移動方向[7,8]。按下K1點陣移動暫停,再次按下移動。點陣最開始的移動方向是左移,按下K2點陣右移,再次按下點陣左移。
驅動模塊是由兩塊74HC595和兩塊74HC138組成,分別驅動行和列,使16×16的LED點陣可以顯示出6個特定的漢字和四個數字。
在主程序中,先初始化單片機,將單片機設定為用戶想要的模式,本次設計先是將單片機模式設定為計數器0工作方式1。因為設計中用按鍵可以控制點陣移動,所以采用了中斷系統,在單片機初始化中開總中斷,開T0中斷,并給計數器設置初值,定記時到65536進入中斷。初始化結束后,進入死循環,調用顯示函數xianshi(),使單片機點亮點陣,并出現用戶想要顯示的數據。判斷是否有按鍵按下,如果有鍵按下進入相應的程序實現按鍵功能,如果沒有按鍵按下則點陣一直左移出現數據。主程序流程圖如圖3所示。

圖3 主程序流程圖
程序如下所示:


本次設計采用74HC595控制點陣的行。先點亮上部分的8×16點陣,每次數據移位8次后產生溢出標志位CY賦值給數據輸入端DS,SH_cp上升沿數據寄存器里面的數據開始移位,下降沿移位寄存器數據不改變,依次循環8次點亮上部分的8行點陣,下部分同理,595驅動模塊流程圖如圖4所示。

圖4 595驅動模塊流程圖
點亮點陣功能是在顯示模塊中實現的,138譯碼器控制點陣的列掃描,在單片機P2端口輸入0-15,通過138輸出的011111111到11111110低電平順序掃描上下部分8列點陣,調用writedata(uchar dat1,uchar dat2)函數順序點亮上下部分8行點陣,在這個子函數中調用本次設計需要顯示的字符數組,然后實現這個子函數的功能。wr itedata(tab[net+aa],tab[net+aa+1]),其中net為列描次數,aa為行掃描次數,tab[net+aa]為上部分點陣行掃描;tab[net+aa+1]為下部分點陣行掃描。每次掃描結束后清屏,保證漢子正確無誤的顯示出來,當把數組tab[]里的數據讀完后,一次循環結束。顯示模塊流程圖如圖5所示。

圖5 顯示模塊流程圖
定時時間到,進入中斷模塊。在中斷模塊中,單片機控制點陣移動方向,設定一個變量alt,讓alt自加,加到一定的值,點陣開始移動。判斷位變量fangxiang是否為低電平,即判斷S2按鍵是否按下。如果按下則正向移動,掃描次數變量net從0開始自加一直到288(因為16×16點陣,顯示完本次設計所有的數字和漢字,需要掃描288次)這個過程中若S2按鍵沒有再次按下,則一次正向掃描結束,net清零,開始下一次的正向掃描。如果在net還沒有自加到288時,S2按鍵按下,則net從當前的值開始自減,導致移動方向相反,直到net自減到0這個過程中S2按鍵沒有按下,則net重新賦值288反向移動,一次反向掃描結束。如此這樣反復掃描。中斷模塊流程圖如圖6所示。

圖6 中斷模塊流程圖
LED室外大屏幕電子廣告牌的實物圖如圖7所示。

圖7 LED室外大屏幕電子廣告牌的實物圖
本次設計的課題是LED室外大屏幕電子廣告牌的設計與制作。系統以AT89C51為核心芯片,P1和P3端口分別控制74HC595和74HC138驅動行和列,點亮16×16點陣,全屏可以顯示一個完整的漢字和兩個數字。共分為主控模塊、驅動模塊、顯示模塊、控制模塊4部分實現。功能實現采用的是動態掃描,使字符能夠自左向右或者自右向左依次顯示出來,此次設計共顯示4個數字6個漢字,這些字符完整的顯示出來一共需要掃描288次。要顯示的字符通過字模提取軟件得到的程序存在數組tab[ ]中。通過138譯碼器每次選通點陣的一列,在595顯示子程序中讀取數組元素,相應的字符會顯示在點陣上。本次共設計了兩個功能按鍵,一個按鍵是控制字符移動暫停;另一個按鍵是控制字符移到的方向。控制字符移動按鍵,是在主函數中,通過停止計數器計數是在主函數中實現;本系統共設計了兩種移動方式,由左至右和由右至左,這兩種移動方式皆是在中斷函數中實現,當硬件有鍵按下時,執行相應的軟件程序。硬件默認先是向左移動,有鍵按下時向右移動,再次按下向左移動,反復交替移動。本次設計最終通過軟硬件結合,實現電子廣告牌的設計。