所要实现的功能:
1.外部放置的键盘不少于四个,用来设定不同的倒计时时间;
2.当时间到达设定值时,发光二极管和蜂鸣器发出信;(这个还没加进去)
3在数码管上显示倒计时时间。
问题描述:
当第一次按下电源键再按所需要倒计时的时间时,可以正常倒计时,暂停键也正常。但当我想要重置并且选择另一个时间作为倒计时时,数码管只显示那个时间,但是没有进行倒计时,然后再按下其他按键也没有反应了。
代码如下:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP TINT0 ;转向外部中断子程序(暂停功能)
ORG 0013H
LJMP TINT1 ;转向外部中断1服务程序
ORG 000BH
LJMP T0INT ;转向定时中断0服务程序
ORG 0030H
;P0口接数码管的段选(高电平有效)
;P2.0-P2.3接数码管的位选(低电平有效)
MAIN:
MOV P2,#00H ;初始化P2口
MOV P0,#3FH ;让6位数码管显示0
SETB EA;中断允许
SETB ET0;定时器0中断允许
SETB EX0;外部中断0允许
SETB EX1 ;外部中断1允许
;SETB IE1
SETB PX1 ;外部中断1为高优先级
SETB PX0 ;外部中断0位高优先级
;SETB PS
CLR PT0 ;定时器中断0位低优先级
MOV TMOD,#01H;置定时器0为工作方式1
MOV TH0,#3CH ;12MHz50ms初值
MOV TL0,#0B0H
MOV R5,#00H
MOV R6,#00H
JB P1.0,MAIN
SETB TR0 ;启动定时器
JNB P3.0, S1OK ;若按下P3.0,则跳转至S1OK
JNB P3.1, S2OK ;若按下P3.1,则跳转至S2OK
JNB P3.4, S3OK ;若按下P3.4,则跳转至S3OK
JNB P3.6, S4OK ;若按下P3.6,则跳转至S4OK
JMP MAIN
S1OK:
MOV R4,#2
ACALL DISP
SJMP MAIN
S2OK:
MOV R4,#3
ACALL DISP
SJMP MAIN
S3OK:
MOV R4,#4
ACALL DISP
SJMP MAIN
S4OK:
MOV R4,#5
ACALL DISP
SJMP MAIN
;==========================================
;=========键盘扫描程序=====================
DISP:
;计时显示扫描
;R4为时钟,R5为分,R6为秒
;显示小时的十位
MOV A,R4
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#03EH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;显示小时的个位
MOV A,B
LCALL CHABIAO
MOV P2,#03DH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;显示分钟的十位
MOV A,R5
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#03BH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;显示分钟的个位
MOV A,B
LCALL CHABIAO
MOV P2,#037H
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;显示秒钟的十位
MOV A,R6
MOV B,#10
DIV AB
LCALL CHABIAO
MOV P2,#02FH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
;显示秒钟的个位
MOV A,B
LCALL CHABIAO
MOV P2,#01FH
MOV P0,A
LCALL DELAY1
MOV P2,#03FH
// JNB P3.0, S1OK ;若按下P3.0,则跳转至S1OK
// JNB P3.1, S2OK ;若按下P3.1,则跳转至S2OK
// JNB P3.4, S3OK ;若按下P3.4,则跳转至S3OK
// JNB P3.6, S4OK ;若按下P3.6,则跳转至S4OK
CJNE R0,#20,DISP
MOV R0,#00H
DEC R6
CJNE R6,#0FFH,DISP
MOV R6,#59
DEC R5
CJNE R5,#0FFH,DISP
MOV R5,#59
DEC R4
CJNE R4,#0FFH,DISP
MOV R4,#0
CLR TR0
RET
// RET
;====================================
DELAY1: MOV 20H, #1 ;延时20ms
AJMP DEL1
DELAY2: MOV 20H, #100 ;延时2s
AJMP DEL1
DEL1: MOV 40H, #125 ;延时子程序的跳转程序
DEL11: MOV 30H, #20
DEL12: DJNZ 30H, DEL12
DJNZ 40H, DEL11
DJNZ 20H, DEL1
RET
;==================================
;查表指令
CHABIAO:
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
;============================
;定时中断子程序
T0INT:
INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
RETI
EXIT:
RETI
;================================================
;外部中断0子程序
TINT0:
CPL TR0
RETI
TINT1:
JMP MAIN
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H
END |