📄 时钟与秒表.asm
字号:
ORG 0000H
AJMP MAIN
ORG 000BH ;定时器计数器0的定口地地址
AJMP T0INT
ORG 001BH ;定时器计数器1的定口地地址
AJMP T1INT
ORG 0030H
MAIN: ;此程序的跑表部分由TO计数完成,计时部分由T1计数完成.
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 40H,#00H
MOV 41H,#00H
MOV 42H,#00H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV SP,#60H
MOV TMOD,#10H ;定时器计数器1工作方式1,同时设置定时器T0为工作方式0
MOV TH0,#0CH
MOV TL0,#78H
SETB ET0
MOV TH1,#03CH
MOV TL1,#0AFH
SETB ET1
SETB TR1
SETB EA
DISPLAY:
MOV A,50H
CJNE A,#00H,KGD ;如果50H中的数不等于0则转移
MOV R0,#41H
ACALL INKEY
AJMP DT
KGD:
CJNE A,#01H,DT
MOV R0,#31H
ACALL OUTKEY
MOV A,51H
CJNE A,#00H,DT
ACALL INKEY
DT:
ACALL DISPLAY1
AJMP DISPLAY
DISPLAY1: ;显示子程序
MOV A,@R0
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.6
ACALL DELAY
SETB P0.6
MOV A,@R0
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.5
ACALL DELAY
SETB P0.5
INC R0
MOV A,@R0
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.4
ACALL DELAY
SETB P0.4
MOV A,@R0
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.3
ACALL DELAY
SETB P0.3
RET
OUTKEY:
MOV P3,#0FFH
JB P3.5,OUT
DD: ACALL BUZZER
JNB P3.5,DD ;去抖
INC 51H
MOV A,51H
CJNE A,#01H,DD22
MOV TH0,#3CH
MOV TL0,#0AFH
SETB TR0
AJMP OUT
DD22: CJNE A,#02H,DD33
CLR TR0
AJMP OUT
DD33:
MOV 51H,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
OUT: RET
INKEY:
MOV P3,#0FFH
JB P3.3,NEXT1 ;P3.3等于1则转移
KK: ACALL BUZZER
JNB P3.3 ,KK
INC 50H
MOV A,50H
CJNE A,#01H,KK22
AJMP NEXT1
KK22: MOV 50H,#00H
NEXT1: RET
DELAY: MOV 55H,#10H
DELAY0: MOV 54H,#50H
DELAY1: DJNZ 54H,DELAY1
DJNZ 55H,DELAY0
RET
TABLE: INC A ;基地址加一
MOVC A, @A+PC ;查段码表,取其相应的段码
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H ;0-9的段码
BUZZER:
CLR P1.0
ACALL DELAY
SETB P1.0
RET
T0INT:
PUSH ACC
CLR TR0
MOV TH0, #0CH
MOV TL0, #78H
INC 30H
MOV A,30H
CJNE A,#02H,EXIT ;得到了1%秒
MOV 30H, #00H
INC 31H
MOV A, 31H
DA A
MOV 31H,A
CJNE A,#100H,EXIT
MOV 31H,#00H
INC 32H
MOV A, 32H
DA A
MOV 32H, A
CJNE A,#100H,EXIT
MOV 32H, #00H ;前面用到了 R0,R1,R2
EXIT:
SETB TR0
POP ACC
RETI
T1INT:
PUSH ACC
CLR TR1
MOV TH1,#3CH
MOV TL1,#0AFH
INC 40H
MOV A,40H
CJNE A,#14H,EXIT1
MOV 40H,#00H
INC 41H
MOV A,41H
DA A
MOV 41H,A
CJNE A,#60H,EXIT1
MOV 41H,#00H
INC 42H
MOV A,42H
DA A
MOV 42H,A
CJNE A,#60H,EXIT1
MOV 42H,#00H
EXIT1:
SETB TR1
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -