51單片機學(xué)習之1-鎖存器驅(qū)動led燈
真值表
這表格分成兩個部分:INPUTS(輸入)、OUTPUT(輸出)。
L:表示低電平 在INPUTS表示輸入低電平 在OUTPUT表示輸出低電平。
H:表示高電平 在INPUTS表示輸入高電平在OUTPUT表示輸出高電平。
X:表示無所謂是高電平還是低電平。
Q0:表示維持原來的狀態(tài)不變。
Z:高阻態(tài) (接的是高電平則是高電平,接的是低電平則是低電平)當輸出高阻態(tài)時,說明芯片沒有工作。
INPUTS(輸入):
OE:OE上面有一條橫杠代表低電平有效。
LE:鎖存控制。
D:輸入端 即 D0 — D7
OUTPUT(輸出):
Q:輸出端 即 Q0 — Q7
真值表解釋:
第三行:OE=LLE=H D=H Q=H
表示OE為低電平時,LE為高電平即不鎖存,那么D是高電平則Q也是高電平。
第四行:OE=LLE=H D=L Q=L
表示OE為低電平時,LE為高電平即不鎖存,那么D是低電平則Q也是低電平。
第五行:OE=L LE=L D=X Q=Q0
表示OE為低電平時,LE為低電平即鎖存,那么無論D是什么狀態(tài),Q仍保持上一次的狀態(tài)。
第六行:OE=H LE=X D=X Q=Z
表示OE為高電平即停用芯片,LE無論是什么狀態(tài),D無論是什么狀態(tài),Q保持高阻態(tài)即不起作用。本文引用地址:http://m.butianyuan.cn/article/201611/323865.htm
二、電路圖
單片機的一組P0口要控制8個Led燈,首先需要將LE引腳置1,讓74HC573的Q輸出端與D輸入端關(guān)聯(lián)起來。這樣P0口的電平狀態(tài)會傳遞給D輸入端進而改變Q的電平狀態(tài)。
8個Led的正極接在1k的排阻。相當于每個Led串入一個1k的電阻。這里的電阻起限流作用,硅發(fā)光二極管的發(fā)光壓降是0.7V;其發(fā)光的電流一般為3—10mA,而單片機(控制芯片)的I/O口有一個灌入電流一般為20mA左右(超過這個電流時,單片機內(nèi)部PN節(jié)會被擊穿)。所以加一個1k電阻限流,避免流過Led的電流過大而燒毀Led。
(單片機(控制芯片)的I/O口有一個灌入電流一般為20mA左右;超過這個電流時,單片機內(nèi)部PN節(jié)會被擊穿。一般的繼電器驅(qū)動電流在40、50—120mA;一般常用9012的PNP(9013、NPN)三極管作為開關(guān)三極管,該三極管的驅(qū)動電流可以達到200mA左右,可以用來驅(qū)動繼電器。達林頓反向驅(qū)動器:ULN2001A—ULN2002A(ST)驅(qū)動電流500mA;(給低電平輸出高電平,給高電平輸出低電平))
電阻的取值:
當Led點亮后,Led會有一個電壓。一般情況下紅色直插LED應(yīng)該是1.7V,剩下3.3V的電壓會加在電阻上。Led需要的電流是3.3ma(0.0033A)電壓除于電流3.3V/0.0033A=1000歐=1K。(不同的廠家生產(chǎn)的LED的電壓和電流可能略有差別)
我們要讓Led亮,那么首先要明確的是,單片機是TTL電平,高電平為+5V低電平為0V,單片機供電也是5V,所以電源正極VCC應(yīng)該為+5V負極為0V。Led的正極通過電阻接在VCC,Led的負極接在74HC573的Q輸出端。當單片機的IO口給低電平時即0V,并且74HC573LE為高電平,那么電流會從VCC→1K電阻→Led→74HC573Q→74HC573D→單片機的IO口,此時Led燈亮。
按照上面的電路圖,程序代碼應(yīng)為:
#include
sbitLed=P0^0;
sbitLE=P1^6;//由于51單片機上電,IO口默認為高電平所以這句可省略。
voidmain()
{
LE=1; //由于51單片機上電,IO口默認為高電平所以這句可省略。
Led=0;//直接操作P0的0端口讓第一個Led燈亮
//P0=0xFE;//操作P0一組IO口,0xFE==11111110,P0的0端口置0其余置1 效果和 Led=0 一樣。不同的是前者操作了一組端口后者只操作了一個端口
P0=0x00; //P1端口全部置0即讓所有的LED燈亮。
while(1); // 程序運行到這里的時候 一直無限循環(huán)。因為Keil 編譯后期產(chǎn)生的匯編代碼中,結(jié)尾有一條 LJMP main,就是不同的執(zhí)行main函數(shù)。加上這一條就可以阻止它重復(fù)執(zhí)行上面的代碼。
評論