51動態掃描LED顯示電路編程範例

admin @ 2014-03-14 , reply:0

上一節我們講述了單隻LED與單片機的介面電路及編程實例,目的在於讓初學者了解LED在單片機中的應用原理,單隻LED顯示在實際應用中並無多大用途,一般都是多位的LED顯示。現在我們作進一步學習,我們要講解的是8位LED的顯示原理及實際的編程方法。這裡我們沒有採用多I/O口的8051系列單片機,而是採用了完全兼容C51指令系統的質優價廉的AT89C2051單片機,它的軟體編程與C51完全一致。
    在多數的應用場合中,我們並不希望使用多I/O埠的單片機,原則上是使用盡量少引腳的器件。在沒有富餘埠的情況下,怎樣通過擴展電路達到預期的目的呢?我們希望通過此例使設計人員在實際應用中了解一點電路擴展的原理,對實際的應用有所幫助。


    左圖是顯示電路,由於AT89C2051外部15個I/O引腳,即P1口和P3口,單P3口的P3.6是不引出的,15個I/O口要直接驅動8位LED顯然是不夠的,我們通過一片面74LS273對地址進行鎖存,如果P1口僅用於顯示驅動,而沒有與其它外設進行數據交換,可省略這個鎖存器,直接或通過其他驅動電路驅動連接LED。地址線我們通過一片74LS138三—八解碼器對8位LED進行分時選通,這樣在任一時刻,只有一位LED是點亮的,但只要掃描的頻率足夠高(一般大於25Hz),由於人眼的視覺暫留特性,直觀上感覺卻是連續點亮的,這就是我們常說的動態掃描電路。
 
    此電路中,74LS273用於驅動LED的8位段碼,8位LED相應的"a"—"g"段連在一起,它們的公共端分別連至由74LS138解碼選通后經74LS04反相驅動的輸出端。這樣當選通某一位LED時,相應的地址線(74LS04輸出端)輸出的是高電平,所以我們的LED選用共陽LED數碼管。
    動態掃描的頻率有一定的要求,頻率太低,LED將出現閃爍現象。如頻率太高,由於每個LED點亮的時間太短,LED的亮度太低,肉眼無法看清,所以一般均取幾個ms左右為宜,這就要求在編寫程序時,選通某一位LED使其點亮並保持一定的時間,程序上常採用的是調用延時子程序。在C51指令中,延時子程序是相當簡單的,並且延時時間也很容易更改,可參見程序清單中的DELAY延時子程序。
    為簡單起見,我們只是編寫了8位LED同步顯示"00000000"—"11111111"直到"99999999"數字,並且反覆循環。程序很簡單,流程圖略去。

    · 程序清單:



[admin via 研發互助社區 ] 51動態掃描LED顯示電路編程範例已經有5831次圍觀

http://www.cocdig.com/docs/show-post-862.html