51 匯編編程:多路延時(shí)開關(guān)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
;51單片機(jī),8個(gè)按鍵、8個(gè)發(fā)光二極管。
;一個(gè)鍵按下則對(duì)應(yīng)燈亮,3秒后滅,每個(gè)鍵控制一個(gè)燈。
;
;題目要求的電路,非常簡(jiǎn)單,用P1連接按鍵、P2連接LED即可。
;
;用定時(shí)器,定時(shí)7.5ms,中斷400遍,即為3秒鐘。
;針對(duì)每個(gè)燈,都要有一個(gè)計(jì)時(shí)單元,用來(lái)控制亮燈3秒鐘的時(shí)間。
;用匯編語(yǔ)言編寫程序如下:
KEYEQU30H
K_LEQU31H
K_TEQU32H
ORG0000H
AJMPSTART
ORG000BH;T0中斷入口地址
JMPT0_INT
START:
MOVTH0,#40;定時(shí)7.5ms@11.0592MHz
SETBTR0
SETBET0
SETBEA
SJMP$;主程序結(jié)束
;--------------------------------
T0_INT:
MOVTH0,#40;定時(shí)7.5ms@11.0592MHz
MOVA,P1
CPLA;有按鍵,為1
MOVKEY,A
XRLA,K_L
MOVK_T,A
MOVK_L,KEY
MOVA,KEY
CPLA;沒(méi)按則為1
ANLA,K_T;釋放則為1
;-----------------------------------
MOVR0,#40H
MOVR2,#127
T0_L1:
JNBACC.7,$+9
MOV@R0,#200
XCHA,R2
ANLP2,A;打開LED
XCHA,R2
;
RLA
XCHA,R2
RRA;右移R2
XCHA,R2
INCR0
CJNER0,#48H,T0_L1
;-----------------------------------
CPLF0
JNBF0,T0_END
MOVR0,#40H
MOVR2,#128
MOVA,R2
T0_L2:
DEC@R0
CJNE@R0,#255,$+6
INC@R0
ORLP2,A;關(guān)閉LED
;
RRA;右移R2
MOVR2,A
INCR0
CJNER0,#48H,T0_L2
T0_END:
RETI
;-----------------------------------
END
;-----------------------------------
本程序,使用了定時(shí)中斷方式,對(duì)按鍵進(jìn)行檢測(cè);并含有延時(shí)消抖、等待釋放的環(huán)節(jié)。
在按鍵按下、再釋放后,即刻,就能使LED發(fā)光,經(jīng)過(guò)3秒鐘之后,自動(dòng)熄滅。
各個(gè)按鍵的動(dòng)作互不影響,各個(gè)LED的亮滅,互不干擾,都是獨(dú)立的進(jìn)行控制。
仿真運(yùn)行的截圖如下: