基于單片機的LED漢字顯示屏的設計
2 軟件設計
2.1 主程序流程圖
主程序流程圖如圖8所示。主程序調用了2個重要子函數,即顯示子函數和移位子函數。顯示子函數的功能是讓LED顯示器顯示指針所指向的字模數組的數據,而移位子函數的功能是讓指針所指的地址加2,以實現漢字整體上移一行的效果。整個主程序運行后,先初始化指針p所指向的地址,讓指針指向字模數組的起始處,并且設定變量I的初值為0,用I的值來控制顯示函數的重復次數,達到調整顯示漢字移動速度的目的。當I值未達到設定值時,不斷重復顯示子函數,此時屏幕上顯示的是一個靜止不動的漢字,直到I達到設定值,調用移位子函數,將指針地址加2,使指針的起始位置指向第二行,然后重新從I的初始化開始執行,這樣,屏幕上就呈現出漢字不斷上移的結果。本文引用地址:http://www.104case.com/article/170651.htm
2.2 顯示子程序流程圖
顯示子程序流程圖如圖9所示,顯示子程序的運行過程主要是單片機I/O口對外發送數據的過程。程序首先設定了一個局部變量I,并定義其值為0。設定該變量的主要目的是為了確定掃描的行數,以控制I/O口發送相應行的字模數據。經過判斷,如果I值小于15,說明正在掃描顯示器上的某一行,則P0口送出相應的行掃描命令到74HC154芯片,經譯碼后控制顯示器接通相應的行,然后P2、P1送出相應的高、低八位列字模數據,最后關閉列控制以防止殘影,對I值自加1就完成了一個循環。當I>15時,說明全部的16行掃描進行完成,此時顯示器整屏已經出現了需要的圖像,程序執行完成。
2.3 移位子程序流程圖
位移子程序就是讓地址指針自動加2,這樣,當濕示函數執行時,第一行顯示的就是原本第二行要顯示的內容,依次類推,整個字形就好像上移了一行一樣。所以程序運行過程是這樣的:首先讓地址指針自加2,以實現地址指針的移動,然后削定地址指針所指向的地址的值,如果地址指針指向了字模數組的最后一位地址,就要令地址指針歸0,否則,指針順序移動下去,當移出字模數組的范圍后,后面的存儲空間存儲的數據是未知的,就會出現非預期的圖形,例如亂碼或空白。
3 硬件調試與改進
3.1 驅動電路的調試與改進
最初設計方案沒有使用驅動電路,軟件仿真正常。在面包板上依原理圖建立物理連接后,調試中發現LED忽明忽暗,漢字顯示不穩定。經萬用表測量,LED顯示器中單個發光二極管中通過的電流不足1.5 mA,達不到額定的工作電流。確定問題的原因是單片機的驅動電流不足。為解決這一問題,本次設計采用一套利用三級管控制的驅動電路,經試驗,加入到電路中效果良好,上述缺陷得到解決。
3.2 限流電阻的調試與改進
當確定要加驅動電路之后,怎樣用三極管來控制這個電流大小是一個問題。起初通過三極管直接加5 V電壓。一個LED被燒壞,這就需要加要加限流電阻,但是這電阻要加多大呢?分析如下:正常點亮一個LED的電流大約是5~15 mA左右,動態掃描電路,每次每列最多只點亮1個LED,故每個驅動三極管流過的電流按10 mA的電流大小算。通過加不同阻值的電阻,用萬用表測量后發現用4.7 kΩ的限流電阻與8550(PNP型)三極管串聯控制行,用47 kΩ的電阻與8050(NPN型)三極管串聯控制列便可以滿足要求。
3.3 譯碼器的調試與改進
最初設計方案采用軟件編程來實現掃描時的換行控制,雖然硬件電路相對現在的有少許簡單,但是軟件程序確實相當的復雜,后發現只用一個譯碼器就可以大大簡化程序。
3.4 上拉電阻的選擇
設計之處初用單片機的P0口通過譯碼器控制顯示屏的行,插好線后發現單片機不能正常工作,原因是單片機的P0口是比較特殊的。P0口在不接片外存儲器與不擴展I/O口時,可作為準雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復用為低8位地址總線和雙向數據總線。所以P0口的帶負載能力是比較低的,一般情況下要接一個上拉電阻,所以最后在P0口接了一個10千歐的排阻之后解決了問題。
3.5 消影調試
當所有的線路都連接好后,顯示卻不清晰、有串擾,每行有上一行的重影。在源程序中加入消影程序后可以清晰穩定的顯示。
4 結束語
文中給出了LED漢字顯示屏的系統框圖,各單元硬件電路、軟件設計流程圖及硬件電路的調試流程;詳細闡述了由STC89C52RC芯片、74H C154芯片、晶振電路、復位電路、驅動電路、16x16 LED點陣構成的LED漢字顯示屏系統。所設計的顯示屏可以實現漢字的滾動顯示,顯示的漢字清晰,無串擾,無重影。
led顯示器相關文章:led顯示器原理
存儲器相關文章:存儲器原理
晶振相關文章:晶振原理
評論