📄 正计时倒计时秒表.txt
字号:
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
KEYF BIT 00H
ST EQU 21H
KEY EQU 22H
KD EQU 23H
MIH EQU 30H
MIL EQU 31H
SEH EQU 32H
SEL EQU 33H
MSH EQU 34H
MSL EQU 35H
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP CH451INT1
ORG 000BH
LJMP INT_0
ORG 001BH
LJMP INT_1
ORG 0100H
MAIN:MOV SP,#60H
MOV ST,#0
CLR KEYF
MOV KD,#0
ACALL CH451_INT
MOV MIH,#0
MOV MIL,#0
MOV SEH,#0
MOV SEL,#80H
MOV MSH,#0
MOV MSL,#0
MOV TMOD,#11H
MOV DPTR,#56318
MOV TH0,DPH
MOV TL0,DPL
MOV TH1,DPH
MOV TL1,DPL
ML0: LCALL SS
LCALL DISPLAY
NOP
JNB KEYF,ML0
CLR KEYF
MOV DPTR,#STAB
MOV A,ST
MOV B,#8
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,KD
RL A
MOV R0,A
MOVC A,@A+DPTR
MOV ST,A
MOV A,R0
INC A
MOVC A,@A+DPTR
MOV B,#3
MUL AB
MOV DPTR,#TASK
JMP @A+DPTR
TASK:LJMP P_0 ;清0
LJMP P_1 ;正向计
LJMP P_2 ;停止
LJMP P_3
LJMP P_4
LJMP P_5
LJMP P_6
LJMP P_7
LJMP P_8
LJMP P_9
;正向计时
P_1:
SETB EA
SETB ET0
SETB TR0
LJMP ML0
;停止
P_2:CLR TR1
CLR TR0
LCALL DISPLAY
LJMP ML0
;清0
P_0:MOV MIH,#0
MOV MIL,#0
MOV SEH,#0
MOV SEL,#80H
MOV MSH,#0
MOV MSL,#0
LCALL DISPLAY
LJMP ML0
DISPLAY:MOV R1,#MIH
MOV B,#08H
DISPLAY0:MOV A,@R1
LCALL WRITE_CH451
INC B
INC R1
MOV A,R1
CJNE A,#36H,DISPLAY0
RET
STAB:DB 1,1,5,5,0,8,0,8
DB 2,2,1,8,1,8,1,8
DB 0,0,2,8,2,8,2,8
DB 1,1,5,5,3,8,3,8
DB 6,9,3,8,4,8,4,8
DB 5,8,4,4,5,6,5,7
DB 4,2,6,8,6,8,6,8
GETKD:MOV A,KEY
CJNE A,#43H,OUT1
MOV A,#3
MOV KD,A
SETB KEYF
OUT1:CJNE A,#42H,OUT2
MOV A,#2
MOV KD,A
SETB KEYF
OUT2:CJNE A,#41H,OUT3
MOV A,#1
MOV KD,A
SETB KEYF
OUT3:CJNE A,#40H,OUT4
MOV A,#0
MOV KD,A
SETB KEYF
OUT4:RET
INT_0:PUSH PSW
PUSH ACC
MOV DPTR,#56318
MOV TH0,DPH
MOV TL0,DPL
MS0: INC MSL
MOV A,MSL
CJNE A,#10,IOUT
MOV MSL,#0
MS1: INC MSH
MOV A,MSH
CJNE A,#10,IOUT
MOV MSH,#0
SE0: INC SEL
MOV A,SEL
CJNE A,#8AH,IOUT
MOV SEL,#80H
SE1: INC SEH
MOV A,SEH
CJNE A,#6,IOUT
MOV SEH,#0
MI0: INC MIL
MOV A,MIL
CJNE A,#10,IOUT
MOV MIL,#0
MI1: INC MIH
MOV A,MIH
CJNE A,#10,IOUT
MOV MIH,#0
IOUT:POP ACC
POP PSW
RETI
;正向
P_3:MOV B,#0110B
MOV A,#00000000B
LCALL WRITE_CH451
MOV MIH,#0
MOV MIL,#0
MOV SEH,#0
MOV SEL,#80H
MOV MSH,#0
MOV MSL,#0
LCALL DISPLAY
LJMP ML0
;倒向
P_4:MOV B,#0110B
MOV A,#00000000B
LCALL WRITE_CH451
LCALL DISPLAY
LJMP ML0
;调时
P_5:
MOV B,#0110B
MOV A,#00001000B
LCALL WRITE_CH451
LCALL DISPLAY
LJMP ML0
;+1
P_6:
MOV R0,SEL
INC R0
MOV SEL,R0
MOV A,SEL
CJNE A,#8AH,S2
MOV SEL,#80H
MOV R1,SEH
INC R1
MOV SEH,R1
MOV A,SEH
CJNE A,#6,S2
MOV SEH,#0
MOV R2,MIL
INC R2
MOV MIL,R2
MOV A,MIL
CJNE A,#10,S2
MOV MIL,#0
MOV R3,MIH
INC R3
MOV MIH,R3
MOV A,MIH
CJNE A,#10,S2
MOV MIH,#0
S2:LCALL DISPLAY
LJMP ML0
;-1
P_7:MOV A,SEL
MOV R0,SEL
DEC R0
MOV SEL,R0
CJNE A,#80H,S21
MOV SEL,#89H
MOV A,SEH
MOV R1,SEH
DEC R1
MOV SEH,R1
CJNE A,#0,S21
MOV SEH,#5
MOV A,MIL
MOV R2,MIL
DEC R2
MOV MIL,R2
CJNE A,#0,S21
MOV MIL,#9
MOV A,MIH
MOV R3,MIH
DEC R3
MOV MIH,R3
CJNE A,#0,S21
MOV MIH,#9
S21:LCALL DISPLAY
LJMP ML0
;null
P_8:LJMP ML0
;初始化CH451
CH451_INT: MOV P1,#60H ;禁止其它芯片
CLR DIN ;先低后高
SETB DCLK ;置为默认的高电平
SETB DIN ;输出上升沿CH451选择4线串行接口
SETB LOAD ;为加载数据作准备
SETB DOUT ;默认是高电平
MOV B,#04H ;设置CH451系统参数
MOV A,#03H ;关看门狗开显示键盘
LCALL WRITE_CH451;写入命令字
MOV B,#05H
MOV A,#80H
LCALL WRITE_CH451
NOP
CLR IT1 ;置外部中断信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1 ;置高优先级
SETB EX1 ;允许键盘中断
SETB EA ;开总中断
RET
;写入
WRITE_CH451:PUSH ACC
CLR EX1 ;禁止键盘中断
CLR LOAD ;命令开始
MOV R7,#08H ;将ACC中的8位送出
WRITE_8: RRC A ;低位在前,高位在后
CLR DCLK ;为输入数据作准备
MOV DIN,C ;送出一位数据
SETB DCLK ;产生上升沿通知CH451输入位数据
DJNZ R7,WRITE_8 ;位数据未完继续
MOV A,B
MOV R7,#04H ;将B中的4位数据送出
WRITE_4: RRC A ;低位在前,高位在后
CLR DCLK ;为输入数据作准备
MOV DIN,C ;送出一位数据
SETB DCLK ;产生上升沿通知CH451输入位数据
DJNZ R7,WRITE_4 ;位数据未完继续
SETB LOAD ;产生加载上升沿通知CH451处理命令数据
SETB EX1 ;准许键盘中断
POP ACC
RET
CH451INT1:PUSH PSW
PUSH ACC
CLR EX1
CLR LOAD
MOV A,#0F7H
INTER4: SETB C
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
CJNE A,#0FFH,INTER4
SETB LOAD
MOV A,#0FCH
INTER7: MOV C,DOUT
CLR DCLK
RLC A
SETB DCLK
JC INTER7
MOV KEY,A
ACALL GETKD
POP ACC
POP PSW
SETB EX1
CLR IE1
RETI
;倒向计时
P_9:MOV R6,#01H
SETB EA
SETB ET1
SETB TR1
LJMP ML0
INT_1:PUSH PSW
PUSH ACC
MOV DPTR,#56318
MOV TH1,DPH
MOV TL1,DPL
MOV A,MSL
DEC MSL
CJNE A,#0,AOUT
MOV MSL,#9
MOV A,MSH
DEC MSH
CJNE A,#0,AOUT
MOV MSH,#9
MOV A,SEL
DEC SEL
CJNE A,#80H,AOUT
MOV SEL,#89H
MOV A,SEH
DEC SEH
CJNE A,#0,AOUT
MOV SEH,#5
MOV A,MIL
DEC MIL
CJNE A,#0,AOUT
MOV MIL,#9
MOV A,MIH
DEC MIH
CJNE A,#0,AOUT
MOV MIH,#9
AOUT: POP ACC
POP PSW
RETI
SS:
CJNE R6,#01H,SK
MOV R0,MSL
MOV R1,MSH
MOV R2,SEL
MOV R3,SEH
MOV R4,MIL
MOV R5,MIH
CJNE R0,#0,SK
CJNE R1,#0,SK
CJNE R2,#80H,SK
CJNE R3,#0,SK
CJNE R4,#0,SK
CJNE R5,#0,SK
CLR TR1
CLR P3.7
MOV R7,#248
MOV R6,#60
DLY1: DJNZ R6,DLY1
DJNZ R7,DLY1
SETB P3.7
SK:LCALL DISPLAY
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -