秒表仿真和汇编程序。4 位共阳数码管,显示分和秒。三个按键,一个控制时钟开始,一个控制暂停和继续,一个按键清0 新学会的实现暂停/继续 按键复用功能。
;12M晶振 2010 12 27 调试完成 STRT EQU P3.0
STP EQU P3.1
CLRR EQU P3.2 ;不用清0 键加上可去掉这条 ORG 00H
SJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN: MOV SP,#60H
MOV R3,#10
MOV R4,#20
MOV TMOD,#01H
MOV TH0,#03CH ;12M晶振时定时初值取#3CB0H
MOV TL0,#07H
SETB ET0
SETB EA
k1: LCALL DISP
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START
k2: LCALL DISP
JB STP,K3 ;不用清0 键,此处K3应改为K1
LCALL DISP
JNB STP,$-3
AJMP SS
K3: LCALL DISP ;如不用清0键 ,可去掉K3这段这种程序
JB CLRR,K1
LCALL DISP
JNB CLRR,$-3
AJMP CLEAR
START: SETB TR0
CLR F0 ;如无此条,暂停后,不是按继续键,而是按开始键继续走时,下次按暂停键时,不能暂停
AJMP K1
SS: CPL F0 ;暂停/继续 复用
JNB F0,START
STOP: CLR TR0
AJMP K2
CLEAR: CLR TR0 ;如不用清0键 ,可去掉CLEAR这段程序
MOV A,#0
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV 23H,A
MOV 24H,A
MOV 25H,A
AJMP K3
DISP: MOV A,24H
MOV B,#10
DIV AB
MOV 20H,B ;余数(秒个位数)
MOV 21H,A ;商(秒十位数)
MOV A,25H
MOV B,#10
DIV AB
MOV 22H,B ;余数(分个位数)
MOV 23H,A ;商(分十位数)
MOV A,20H ;秒个位
ACALL SEG7
MOV P1,A
SETB P2.4
ACALL DLY
CLR P2.4
MOV A,21H ;秒十位
ACALL SEG7
MOV P1,A
SETB P2.5
ACALL DLY
CLR P2.5
MOV A,22H ;分个位
ACALL SEG7
MOV P1,A
CLR P1.7
SETB P2.6
ACALL DLY
CLR P2.6
MOV A,23H ;分十位
ACALL SEG7
MOV P1,A
SETB P2.7
ACALL DLY
CLR P2.7
RET
T0INT: MOV TH0,#03CH;#9EH ;定时中断子程序。重装定时常数
MOV TL0,#0B7H;#58H
DJNZ R4,T0INTR ;50msX20=1S,未满20次,跳出中断子程序
MOV R4,#20
INC 24H
MOV A,24H
CJNE A,#60,T0INTR
MOV 24H,#0
INC 25H
MOV A,25H
CJNE A,#60,T0INTR
MOV 25H,#0
T0INTR: RETI
DLY: MOV R7,#10
D1: MOV R6,#50
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
|