單片機(jī)AT89C51 00——99帶倒計(jì)時(shí)計(jì)數(shù)器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1. 設(shè)計(jì)任務(wù)
(1. 上電時(shí)顯示“00”,第一次按下SP1后就開始計(jì)數(shù)。
(2. 第二次按SP1后,計(jì)數(shù)停止。
(3. 第三次按SP1后,計(jì)數(shù)清零。
(4. 第四次按下倒計(jì)時(shí) 。
2. 電路的原理圖
3. 系統(tǒng)板上硬件連線
(1.把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)a-h端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD1對應(yīng)著b,……,P0.7/AD7對應(yīng)著h。
(2.把“單片機(jī)系統(tǒng)”區(qū)域中的P2.0/A8-P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)a-h端口上;要求:P2.0/A8對應(yīng)著a,P2.1/A9對應(yīng)著b,……,P2.7/A15對應(yīng)著h。
(3.把“單片機(jī)系統(tǒng)“區(qū)域中的P3.5/T1用導(dǎo)線連接到”獨(dú)立式鍵盤“區(qū)域中的SP1端口上;
4.
匯編源程序
D1A EQU 30H 個(gè)位寄存地址設(shè)置;
D1B EQU 31H 十位寄存地址設(shè)置;
SEC EQU 32H
KY1 EQU 33H
SP1 BIT P3.5 位選口設(shè)置;
ORG 0000H
LJMP START
ORG 0B00H 中斷方式選折;
LJMP INT_T0
START: MOV KY1,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB 個(gè)位和十位的區(qū)分;
MOV DPTR,#TABLE 開始查個(gè)位的段碼;
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA 開啟中斷;
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KY1 第一次按下鍵盤,開始計(jì)數(shù);
MOV A,KY1
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV D1A,#00H
MOV D1B,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KY1,#00H
KN3: INC KY1
DEC KY1 第4次按下鍵盤,開始計(jì)數(shù);
MOV A,KY1
CJNE A,#04H,KN3
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV D1A,#00H
MOV D1B,#00H
LJMP DKN
DKN: JNB SP1,$
LJMP WT
DELY10MS: 延時(shí)子程序;
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0: 中斷子程序;
INC D1A
MOV A,D1A
CJNE A,#100,NEXT
MOV D1A,#00H
INC D1B
MOV A,D1B
CJNE A,#5,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END