📄 2051.asm
字号:
kk1 bit b.1
kk2 bit b.2
kk3 bit b.3
ORG 0000H
LJMP START
ORG 000BH
LJMP CTC0
TT1 EQU 37H ;50ms
TT2 EQU 38H ;秒
TT3 EQU 39H ;分
TT4 EQU 3AH ;时
YUESHI EQU 40H
YUEFEN EQU 41H
YUEFEE EQU 42H
ORG 43H
VIEW0: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H , 92H , 82H, 0F8H
DB 80H , 90H, 88H , 83H , 0C6H, 0A1H, 86H, 84H
ORG 0A0H
TEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,10H,11H,12H,13H,14H,15H
DB 16H,17H,18H,19H,20H,21H,22H,23H
DB 24H,25H,26H,27H,28H,29H,30H,31H
DB 32H,33H,34H,35H,36H,37H,38H,39H
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,50H,51H,52H,53H,54H,55H
DB 56H,57H,58H,59H,60H
ORG 100H
START: MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA
SETB ET0
SETB TR0
JB P,NEXT
NEXT: MOV A,#00H
MOV R2,#17H ;24小时
MOV YUESHI,#00H
MOV YUEFEN,#00H
MOV YUEFEE,#00H
MOV R3,#3BH ;60分
MOV R4,#3BH ;60秒
SETB KK1
SETB KK2
SETB KK3
mainline:
JB P3.2,KEY1
CLR KK1
KEY1: JNB p3.2,KEY2 ;当p1.3高电平时就往下执行,但是只要执行一次后,kk1就为1,往后就不再执行
JB KK1,KEY2
INC YUESHI
SETB KK1 ;这以段的任务是不用延时也能消除按键抖动的程序
KEY2: JB P3.3,KEY3
CLR KK2
KEY3: JNB P3.3,KEY4
JB KK2, KEY4
INC YUEFEN
SETB KK2
KEY4: JB P3.4,KEY5
CLR KK3
KEY5: JNB P3.4,RES
JB KK3, RES
SETB KK3
INC YUEFEE
RES:
MOV A,YUESHI
SUBB A,R2
JNZ BUDAOSHI
MOV YUESHI,#00H
BUDAOSHI:
MOV A,YUEFEN
SUBB A,R3
JNZ BUDAOFEN
MOV YUEFEN,#00H
BUDAOFEN:
MOV A,YUEFEE
SUBB A,R4
JNZ BUDAOFENN
MOV YUEFEE,#00H
BUDAOFENN:
MOV A,YUESHI
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送小时的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
SETB P2.4
SETB P2.3
SETB P2.2
CLR P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;显示时的十位
SETB P2.5
SETB P2.4
SETB P2.3
SETB P2.2
SETB P2.1
CLR P2.0
LCALL DELAY
MOV A,YUEFEN
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送分的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
SETB P2.4
CLR P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;显示分的十
SETB P2.5
SETB P2.4
SETB P2.3
CLR P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
LCALL DELAY
MOV A,YUEFEE
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送秒的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
SETB P2.4
SETB P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;显示秒的十位
SETB P2.5
CLR P2.4
SETB P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
JNB P3.5, NEXT2;按下就进入定时煮饭的阶段
LJMP mainline
DELAY:
MOV R5,#04H ;40ms延时子程序
L7: MOV R6,#0FAH
L8: DJNZ R6,L8
DJNZ R5,L7
RET
NEXT2:
MOV A,#00H
MOV TT1,A ;让TT1重新清零这一步是必须的
MOV TT2,#00H
MOV A,YUEFEN
MOV TT3,A
MOV A,YUESHI
MOV TT4,A
LOOP1:
MOV A,TT4
JZ AINI1
LCALL TIMEING1
AINI1:
MOV A,TT4
JNZ AINI2
LCALL TIMEING1
;-------------定时程序:--------------------
AINI2:
MOV A,TT1
CJNE A,#14H,RET001
SUBB A,#14H ;20×50ms=1s
JNZ RET001
MOV TT1,A ;TT1清零
DEC TT2
MOV A,TT2
SUBB A,#0FFH ;到零?
JNZ RET001
MOV TT2,#3BH ;重新送数
DEC TT3
MOV A,TT3
SUBB A,#0FFH
JNZ RET001
MOV TT3,#3BH
DEC TT4
MOV A,TT4
SUBB A,0FFH
JNZ RET001
HERE:
CLR P3.7
;定时中止
SJMP HERE;
RET001:
LJMP LOOP1
;-----------显示倒计时--------------
TIMEING1:
MOV A,TT4
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送小时的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
SETB P2.4
SETB P2.3
SETB P2.2
CLR P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
CLR P2.5
MOV P0,A ;显示时的十位
SETB P2.5
SETB P2.4
SETB P2.3
SETB P2.2
SETB P2.1
CLR P2.0
LCALL DELAY
MOV A,TT3
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送分的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
SETB P2.4
CLR P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;显示分的十位
SETB P2.5
SETB P2.4
SETB P2.3
CLR P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
MOV A,TT2
MOV DPTR,#TEMP_TAB
MOVC A,@A+DPTR
MOV R0,A
ANL A,#0FH;送秒的个位
MOV DPTR,#VIEW0
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
SETB P2.4
SETB P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;显示秒的十位
SETB P2.5
CLR P2.4
SETB P2.3
SETB P2.2
SETB P2.1
SETB P2.0
LCALL DELAY
RET
;**************定时中断子程序****************************************
CTC0:
MOV TL0,#0B0H ;定时50ms
MOV TH0,#3CH
INC TT1
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -