|
我們講述了單只LED與單片機(jī)的接口電路及編程實例,目的在于讓初學(xué)者了解LED在單片機(jī)中的應(yīng)用原理,單只LED顯示在實際應(yīng)用中并無多大用途, 一般都是多位的LED顯示,F(xiàn)在我們作進(jìn)一步學(xué)習(xí),我們要講解的是8位LED的顯示原理及實際的編程方法。 這里我們沒有采用多I/O口的8051系列單片機(jī),而是采用了完全兼容C51指令系統(tǒng)的質(zhì)優(yōu)價廉的AT89C2051單片機(jī), 它的軟件編程與C51完全一致。 在多數(shù)的應(yīng)用場合中,我們并不希望使用多I/O端口的單片機(jī),原則上是使用盡量少引腳的器件。在沒有富余端口的情況下,怎樣通過擴(kuò)展電路達(dá)到預(yù)期的目的呢?我們希望通過此例使 設(shè)計人員在實際應(yīng)用中了解一點電路擴(kuò)展的原理,對實際的應(yīng)用有所幫助。
下圖是led動態(tài)顯示電路及顯示程序, 由于AT89C2051外部 15個I/O引腳, 即P1口和P3口, 單P3口的 P3.6是不引出的, 15個I/O口要直接驅(qū)動 8位LED顯然是不夠的, 我們通過一片面 74LS273對地址進(jìn)行鎖存,如果P1口僅用于顯示驅(qū)動而沒有與其它外設(shè)進(jìn)行 數(shù)據(jù)交換, 可省略這個鎖存器, 直接或通過其他 驅(qū)動電路驅(qū)動連接LED。 地址線我們通過 一片74LS138三—八譯碼器對8位LED進(jìn)行分時選通,這樣在任一時刻, 只有一位LED是點亮的, 但只要掃描的頻率足夠高(一般大于25Hz), 由于人眼的視覺暫留特性直觀上感覺卻是連續(xù) 點亮的,這就是我們常說的動態(tài)掃描電路。

此電路中,74LS273用于驅(qū)動LED的8位段碼,8位LED相應(yīng)的"a"—"g"段連在一起, 它們的公共端分別連至由74LS138(點擊芯片型號可瀏覽其詳細(xì)的技術(shù)手冊)譯碼選通后經(jīng)74LS04反相驅(qū)動的輸出端。這樣當(dāng)選通某一位LED時, 相應(yīng)的地址線(74LS04輸出端)輸出的是高電平,所以我們的LED選用共陽LED數(shù)碼管。 動態(tài)掃描的頻率有一定的要求,頻率太低,LED將出現(xiàn)閃爍現(xiàn)象。 如頻率太高,由于每個LED點亮的時間太短,LED的亮度太低,肉眼無法看清, 所以一般均取幾個ms左右為宜,這就要求在編寫程序時, 選通某一位LED使其點亮并保持一定的時間, 程序上常采用的是調(diào)用延時子程序。在C51指令中,延時子程序是相當(dāng)簡單的, 并且延時時間也很容易更改, 可參見程序清單中的DELAY延時子程序。 為簡單起見,我們只是編寫了8位LED同步顯示"00000000"—"11111111" 直到"99999999"數(shù)字,并且反復(fù)循環(huán)。 程序很簡單,流程圖略去。
顯示程序

|