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

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

|