數碼管是單片機系統中經常用到的顯示器件, 從內部結構上可以分為共陰極和共陽極數碼管。對不同的數碼管,電路的接法也不一樣。圖1A為數碼管的結構圖。以共陽極數碼管為例, 要想點亮某段, 只需要在相應的段上給低電平即可。圖1B為共陽極數碼管段碼分布, 以及一個顯示的實例。
圖1 數碼管段碼分布及顯示示例
按照工作方式, 數碼管驅動可以分為靜態顯示和動態掃描。所謂靜態顯示, 就是每一個數碼管的段碼都要獨占具有鎖存功能的輸出口, CPU把要顯示的字碼送到輸出口上,就可以使數碼管顯示對應的字符, 直到下一次送出另外一個字碼之前, 顯示的內容一直不會消失;動態掃描是把所有顯示器的8個段碼中的A-dp的各個相同段連接在一起, 接到一個公共的輸出口上,而數碼管的位端分別接在另外的輸出口上,通過這兩個輸出口的兩組信號相互作用來產生顯示效果。即讓各位數碼管按照一定順序輪流顯示, 只要掃描頻率足夠高, 由于人眼的“ 視覺暫留”現象,就能連續穩定的顯示。靜態顯示法的優點是顯示穩定、亮度大, 節約CPU時間, 但占有I/O口線較多, 硬件成本高。動態掃描其特點在于能顯著降低顯示部分成本,大大減少顯示接口的連線結構。舉例, 靜態驅動4位數碼管, 需要4×8=32個I/O口, 而動態的驅動位數碼管只需要4+8=12個I/O口。
電路圖詳解
單片機的I/O資源是有限的, 因此如何節省I/O口線而又不影響系統的功能是單片機工程師面臨的實際問題。圖2采用是串行轉并行芯片74HC595和三線一八線譯碼器實現8位數碼管的驅動, 好處是可以節省更多的I/O口線作其他用途。正常驅動8個數碼管需要8+8=16根口線, 采用595+138的方式只需要3+3=6根。
圖2 數碼管顯示電路連接圖
為了更好地理解電路, 這里簡單介紹一下74HC595和74LS138兩個芯片的作用。74HC595是一款串行移位輸入、8位并行輸出的芯片, 內帶數據移位寄存器和三態輸出鎖存器;SER為串行數據輸入;SRCLK為移位時鐘輸入;RCLK為鎖存控制輸入;QA-QH為數據輸出, QH’為向下一片(位)的串行數據輸出。74LS138是一個3線一8線的譯碼器, 低電平有效輸出, 因此每個時刻輸出端口只有一個是低電平, 其余都是高電平輸出, 因此可以驅動共陰極數碼管。如果驅動共陽極的數碼管還需要做一個非門的轉換。最后, 為了增加單片機I/O的輸出能力, 在74HC595與數碼管之間串接了一個74HC245并行驅動芯片。
從電路圖中可以看到, 每個芯片的電源和地附近都接了一個104電容, 這個高頻濾波電容, 可以減小電源對IC的影響。注意高頻電容的布線, 連線應靠近電源端并盡量粗短, 否則, 等于增大了電容的等效串聯電阻, 會影響濾波效果。其實, 不加這個電容也可以, 但萬一因為干擾出了問題, 就會很難查找根源, 實際調試電路板的時候就會發現電容的作用非常大的, 而這些恰恰是初學者容易忽略的地方。
關健程序分析
動態掃描需要注意的一個問題, 由于所有數碼管的段碼接到一個公用的I/O上, 在每個瞬間, 各個位數碼管上的段碼都是一樣的, 要想在不同的位顯示不同的信息, 必須用掃描顯示的方式, 在一段時間內, 只點亮一個數碼管, 其余的都處于關閉狀態;下一個時間段內點亮下一個數碼管, 其余的都處于關閉狀態。如此循環, 造成一個視覺暫留的效果, 當閃爍的頻率大于50Hz的時候, 人眼就分辨不出來了, 即各個位上顯示的信息就“ 區分”開了。掃描頻率過高, 每個位顯示的時間太短, 數碼管的亮度不夠;掃描頻率過低, 會有明顯的閃爍感。這個時間需要根據不同的硬件電路, 做不同的調整, 而且跟數碼管的個數有關, 一般的經驗值延時10ms左右。
圖3 數碼管動態顯示流程圖
總結
動態掃描過程中,?LED顯示的亮度同驅動電流、點亮時間和關斷時間有關, 調整驅動電流大小和掃描頻率, 可以控制LED顯示的亮度, 同時穩定顯示。這需要在實際的調試過程中不斷的嘗試, 找到一個最佳臨界點!對于尺寸比較大的數碼管, 可以在74HC245與數碼管之間再串接一個ULN2003(7段)或者ULN2803(8段)達林頓管增加驅動能力。
評論