📄 hex.asm
字号:
ANL A,R2
ADD A,#30H
MOV 3AH,A
MOV A,R2
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 39H,A
MOV 3BH,#03H ;分
MOV R2,S2S
MOV A,#0FH
ANL A,R2
ADD A,#30H
MOV 3DH,A
MOV A,R2
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 3CH,A
MOV 3EH,#04H
MOV 3FH,#05H
MOV R1,#37H
DS2: MOV A,@R1
LCALL DISPABLE
INC R1
CJNE R1,#40H,DS2
RET
KK3: MOV C,PAND
ANL C,KG3 ;PAND、KG3 同时为1定时器2才工作
JC KK33
LJMP OUT33
KK33: MOV A,S3S
JB SN3,SH3 ;SN3为1说明了定时器3时间到,顺序显示超时时间
CJNE A,#00H,NET3
CJNE A,S3M,NET33
CLR SPEAK ;开蜂鸣器
CLR LED3 ; LED3亮表示定时器3定时时间到
SETB SN3 ;定时器3定时时间到,SN3置1
LJMP OUT33
SH3: MOV A,S3S
ADD A,#01H ;顺序显示超时时间
DA A
MOV S3S,A
CJNE A,#60H,OUT33
MOV S3S,#00H
LJMP OUT33
NET3: ANL A,#0FH ;倒计时显示定时器3剩余时间数据处理
CJNE A,#00H,BD3
MOV A,S3S
ADD A,#09H
SWAP A
DEC A
SWAP A
MOV S3S,A
SJMP OUT33
NET33: MOV S3S,#59H
MOV A,S3M
ANL A,#0FH
CJNE A,#00H,BD33
MOV A,S3M
ADD A,#09H
SWAP A
DEC A
SWAP A
MOV S3M,A
SJMP OUT33
BD33: DEC S3M
SJMP OUT33
BD3: DEC S3S
OUT33: RET
DISP3: ;显示定时器3时间子程序
MOV A,#0C0H ;从0C0H地址开始显示
LCALL ENABLE
MOV 41H,#33H
JB KG3,K3
MOV 42H,#07H ;关,表示定时器3不工作
JMP G3
K3: MOV 42H,#06H ;开,表示定时器3工作
G3: MOV R2,S3M
MOV A,#0FH
ANL A,R2
ADD A,#30H
MOV 44H,A
MOV A,R2
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 43H,A
MOV 45H,#03H ;分
MOV R2,S3S
MOV A,#0FH
ANL A,R2
ADD A,#30H
MOV 47H,A
MOV A,R2
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 46H,A
MOV 48H,#04H ;秒
MOV 49H,#05H
MOV R1,#41H
DS3: MOV A,@R1
LCALL DISPABLE
INC R1
CJNE R1,#4AH,DS3
RET
TIME0: ;定时器/计数器0中断入口
MOV TH0,#3CH ;重赋初值
MOV TL0,#0AFH
PUSH ACC ;入栈保护
PUSH PSW
DJNZ 5CH,TIM ;不够1秒,中断返回
MOV 5CH,#10H ;到1秒,执行相应程序
MOV C,SZSJ
ANL C,KSZT
MOV PAND,C
LCALL KK1
LCALL KK2
LCALL KK3
TIM: POP PSW
POP ACC
RETI
ROW1: MOV P2,#7FH ;开始/暂停切换键
MOV A,P2
CJNE A,#7FH,SW1
JMP OUT
SW1: CJNE A,#7EH,OUT
LCALL DELAY
MOV A,P2
CJNE A,#7FH,OUT
MOV A,#0CDH
LCALL ENABLE
CPL XUAN
JB XUAN,XUAN2
MOV A,#20H
LCALL DISPABLE ;开始清除地址0CDH的标志$
JMP XUAN1
XUAN2: MOV A,#24H ;暂停在地址0CDH显示的标志$
LCALL DISPABLE
XUAN1: CPL KSZT
CPL TR0
OUT: RET
ROW3: MOV P2,#0DFH ;设置定时器的开/关,K处于工作状态,G为不工作状态
MOV A,P2
CJNE A,#0DFH,SW3
JMP OUT
SW3: CJNE A,#0DEH,OUT
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,OUT
MOV A,#0CDH
LCALL ENABLE
MOV A,#0FBH ;显示万字,表示处于设置定时器的开/关状态,
LCALL DISPABLE
AN1: MOV P2,#0DFH ;设置定时器1
MOV A,P2
CJNE A,#0DFH,AN11
JMP AN2
AN11: CJNE A,#0D7H,AN2
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,AN2
CPL KG1 ;定时器1的开/关切换
CLR SN1
SETB SPEAK ;关蜂鸣器
SETB LED1 ;关定时器1定时时间到指示灯
AN2: MOV P2,#0DFH ;设置定时器2
MOV A,P2
CJNE A,#0DFH,AN22
JMP AN3
AN22: CJNE A,#0DBH,AN3
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,AN3
CPL KG2 ;定时器2的开/关切换
CLR SN2
SETB SPEAK ;关蜂鸣器
SETB LED2 ;关定时器2定时时间到指示灯
AN3: MOV P2,#0DFH ;设置定时器3
MOV A,P2
CJNE A,#0DFH,AN33
JMP AN4
AN33: CJNE A,#0DDH,AN4
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,AN4
CPL KG3 ;定时器3的开/关切换
CLR SN3
SETB SPEAK ;关蜂鸣器
SETB LED3 ;关定时器3定时时间到指示灯
AN4: LCALL DISP1
LCALL DISP2
LCALL DISP3
MOV P2,#0DFH
MOV A,P2
CJNE A,#0DFH,SWWW
JMP AN1
SWWW: CJNE A,#0DEH,AN1 ;退出定时器开/关切换设置
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,AN1
MOV A,#0CDH
LCALL ENABLE
MOV A,#20H
LCALL DISPABLE
SW4: RET
ROW2: MOV P2,#0BFH ;键盘设置,用于定时器时间设置和日期时间设置
MOV A,P2
CJNE A,#0BFH,SW22
OUTTT: RET
SW22: CJNE A,#0BEH,OUTTT
LCALL DELAY
MOV A,P2
CJNE A,#0BFH,OUTTT
JB DSSJ,SHJ ; DSSJ为0,设置定时器的值,为1设置日期时间的值
DSH: JB KSZT,OUTTT ; KSZT为0即暂停状态才能设置定时器的值
INC SZ123 ; SZ123 为1,设置定时器1的值,为2设置定时器2的值,为3设置定时器3的值
SZZ1: MOV A,SZ123
SZ1: CJNE A,#01H,SZ2 ;设置定时器1的值
MOV XS,#01H
MOV A,#0DH ; 光标有闪烁
LCALL ENABLE
MOV A,#82H
LCALL ENABLE
LJMP KEY1H
SZ2: CJNE A,#02H,SZ3 ;设置定时器2的值
MOV XS,#03H
MOV A,#0DH ; 光标有闪烁
LCALL ENABLE
MOV A,#89H
LCALL ENABLE
LJMP KEY1H
SZ3: CJNE A,#03H,SZ4 ;设置定时器3的值
MOV XS,#07H
MOV A,#0DH ; 光标有闪烁
LCALL ENABLE
MOV A,#0C2H
LCALL ENABLE
LJMP KEY1H
SZ4: MOV SZ123,#01H
LJMP SZZ1
SHJ: MOV DS1302ADDR,#8EH ;设置日期时间的值
MOV DS1302DATA,#00H ;关写保护,允许写DS1302
LCALL WRITE
MOV DS1302ADDR,#80H
MOV DS1302DATA,#80H ;DS1302停止振荡
LCALL WRITE
MOV XSSS,#01H
MOV A,#8EH
LCALL ENABLE
MOV A,#0F1H ;在地址F1H显示千表示设置日期时间
LCALL DISPABLE
MOV A,#0DH ; 光标有闪烁
LCALL ENABLE
MOV A,#82H ; 光标在82H处开始显示
LCALL ENABLE
LJMP KEY1H
KEY1H: MOV P2,#7FH ;数字7
MOV A,P2
CJNE A,#7FH,DY7
LJMP KEY2H
DY7: CJNE A,#77H,DY8
LCALL DELAY
MOV A,P2
CJNE A,#7FH,DY8
MOV 52H,#70H ;存放数的高位BCD码
MOV 53H,#37H ;存放要显示的数的ASCII码
MOV 54H,#07H ;存放数的低位BCD码
JB DSSJ,DI7
LCALL ZHLI ;调用定时器定时时间处理子程序
JMP KEY1H
DI7: LCALL ZHLI2 ;调用日期时间处理子程序
LJMP KEY1H
DY8: CJNE A,#7BH,DY9 ;数字8
LCALL DELAY
MOV A,P2
CJNE A,#7FH,DY9
MOV 52H,#80H ;存放数的高位BCD码
MOV 53H,#38H ;存放要显示的数的ASCII码
MOV 54H,#08H ;存放数的低位BCD码
JB DSSJ,DI8
LCALL ZHLI
JMP KEY1H
DI8: LCALL ZHLI2
LJMP KEY1H
DY9: CJNE A,#7DH,KEY1H ;数字9
LCALL DELAY
MOV A,P2
CJNE A,#7FH,KEY1H
MOV 52H,#90H
MOV 53H,#39H
MOV 54H,#09H
JB DSSJ,DI9
LCALL ZHLI
JMP KEY1H
DI9: LCALL ZHLI2
LJMP KEY1H
KEY2H: MOV P2,#0BFH
MOV A,P2
CJNE A,#0BFH,DY4
LJMP KEY3H
DY4: CJNE A,#0B7H,DY5 ;数字4
LCALL DELAY
MOV A,P2
CJNE A,#0BFH,DY5
MOV 52H,#40H
MOV 53H,#34H
MOV 54H,#04H
JB DSSJ,DI4
LCALL ZHLI
JMP KEY2H
DI4 : LCALL ZHLI2
JMP KEY2H
DY5: CJNE A,#0BBH,DY6 ;数字5
LCALL DELAY
MOV A,P2
CJNE A,#0BFH,DY6
MOV 52H,#50H
MOV 53H,#35H
MOV 54H,#05H
JB DSSJ,DI5
LCALL ZHLI
JMP KEY2H
DI5: LCALL ZHLI2
JMP KEY2H
DY6: CJNE A,#0BDH,TUICH ;数字6
LCALL DELAY
MOV A,P2
CJNE A,#0BFH,TUICH
MOV 52H,#60H
MOV 53H,#36H
MOV 54H,#06H
JB DSSJ,DI6
LCALL ZHLI
JMP KEY2H
DI6: LCALL ZHLI2
JMP KEY2H
TUICH: CJNE A,#0BEH,KEY3H ;判断是否退出设置
LCALL DELAY
MOV A,P2
CJNE A,#0BFH,KEY3H
MOV A,#0CH ; 光标无闪烁
LCALL ENABLE
JNB DSSJ, DDSH
MOV A,#8EH
LCALL ENABLE ;退出后清除设置标志
MOV A,#20H
LCALL DISPABLE
MOV DS1302ADDR,#80H
MOV DS1302DATA,SEC ;DS1302晶振开始振荡
LCALL WRITE
MOV DS1302ADDR,#8EH
MOV DS1302DATA,#80H ;打开写保护,禁止写入DS1302
LCALL WRITE
DDSH: RET
FANHUI: JMP KEY3H
KEY3H: MOV P2,#0DFH
MOV A,P2
CJNE A,#0DFH,DY1
JMP KEY4H
DY1: CJNE A,#0D7H,DY2 ;数字1
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,DY2
MOV 52H,#10H
MOV 53H,#31H
MOV 54H,#01H
JB DSSJ,DI1
LCALL ZHLI
JMP KEY3H
DI1 : LCALL ZHLI2
JMP KEY3H
DY2: CJNE A,#0DBH,DY3 ;数字2
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,DY3
MOV 52H,#20H
MOV 53H,#32H
MOV 54H,#02H
JB DSSJ,DI2
LCALL ZHLI
JMP KEY3H
DI2 : LCALL ZHLI2
JMP KEY3H
DY3: CJNE A,#0DDH,KEY4H ;数字3
LCALL DELAY
MOV A,P2
CJNE A,#0DFH,KEY4H
MOV 52H,#30H
MOV 53H,#33H
MOV 54H,#03H
JB DSSJ,DI3
LCALL ZHLI
JMP KEY3H
DI3: LCALL ZHLI2
JMP KEY3H
KEY4H: MOV P2,#0EFH
MOV A,P2
CJNE A,#0EFH,DY0
JMP KEY1H
DY0: CJNE A,#0E7H,ZHUAN ;数字0
LCALL DELAY
MOV A,P2
CJNE A,#0EFH,ZHUAN
MOV 52H,#00H
MOV 53H,#30H
MOV 54H,#00H
JB DSSJ,DI0
LCALL ZHLI
JMP KEY4H
DI0: LCALL ZHLI2
JMP KEY4H
ZHUAN: JMP KEY1H
ZHLI: MOV A,XS ;设置定时器
XS1: CJNE A,#01H,XS2 ;设置定时器1高位
MOV XS,#02H
MOV A,S1S
ANL A,#0FH
ADD A,52H ;52H中存放的是设置的高位数值
MOV S1S,A
MOV A,53H ;显示定时器高位的值
LCALL DISPABLE
RET
XS2: CJNE A,#02H,XS3 ;设置定时器1低位
MOV XS,#01H
MOV A,S1S
ANL A,#0F0H
ADD A,54H ;54H中存放的是设置的低位数值
MOV S1S,A
MOV A,53H ;显示定时器低位的值
LCALL DISPABLE
MOV A,#82H ;返回定时器1高位显示的地址
LCALL ENABLE
RET
XS3: CJNE A,#03H,XS4 ;设置定时器2分的高位
MOV XS,#04H
MOV A,S2M
ANL A,#0FH
ADD A,52H
MOV S2M,A
MOV A,53H
LCALL DISPABLE
RET
XS4: CJNE A,#04H,XS5 ;设置定时器2分的低位
MOV XS,#05H
MOV A,S2M
ANL A,#0F0H
ADD A,54H
MOV S2M,A
MOV A,53H
LCALL DISPABLE
MOV A,#14H ;光标右移1位
LCALL ENABLE
RET
XS5: CJNE A,#05H,XS6 ;设置定时器2秒的高位
MOV XS,#06H
MOV A,S2S
ANL A,#0FH
ADD A,52H
MOV S2S,A
MOV A,53H
LCALL DISPABLE
RET
XS6: CJNE A,#06H,XS7 ;设置定时器2秒的低位
MOV XS,#03H
MOV A,S2S
ANL A,#0F0H
ADD A,54H
MOV S2S,A
MOV A,53H
LCALL DISPABLE
MOV A,#89H
LCALL ENABLE
RET
XS7: CJNE A,#07H,XS8 ;设置定时器3分的高位
MOV XS,#08H
MOV A,S3M
ANL A,#0FH
ADD A,52H
MOV S3M,A
MOV A,53H
LCALL DISPABLE
RET
XS8: CJNE A,#08H,XS9 ;设置定时器3分的低位
MOV XS,#09H
MOV A,S3M
ANL A,#0F0H
ADD A,54H
MOV S3M,A
MOV A,53H
LCALL DISPABLE
MOV A,#14H ;光标右移1位
LCALL ENABLE
RET
XS9: CJNE A,#09H,XS10 ;设置定时器3秒的高位
MOV XS,#0AH
MOV A,S3S
ANL A,#0FH
ADD A,52H
MOV S3S,A
MOV A,#0C5H
LCALL ENABLE
MOV A,53H
LCALL DISPABLE
RET
XS10: CJNE A,#0AH,XS11 ;设置定时器3秒的低位
XS11: MOV XS,#07H
MOV A,S3S
ANL A,#0F0H
ADD A,54H
MOV S3S,A
MOV A,53H
LCALL DISPABLE
MOV A,#0C2H ;返回定时器3分的高位地址
LCALL ENABLE
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -