📄 6wmb-main.asm
字号:
;-------------------------------------------------------------------
;
;;
;;;实用秒表数码管显示程序
;;; 杜洋 20050625pm
;;;6位数码管中头三位是秒显示(最大999秒)
;;;后3位是毫秒(千进制,最大999毫秒),最大精度为1MS.
;;;段码为P0口,数位码为P2口。
;;;3个控制键:P3.2是开始计时,P3.3是停止,P3.4是清零。
;;
;
;--------------------------------------------------------------------
WS EQU P2 ;WS(位数)
DM EQU P0 ;DM(段码)
WS_5 EQU P2.5 ;WS_5(第6位的显示)
KEY_1 EQU P3.2 ;开始计时或继续计时
KEY_2 EQU P3.3 ;计时中断
KEY_3 EQU P3.4 ;显示清零
;---------------------------------------------------------------------
ORG 00H
JMP START
ORG 0BH ;定时器T0入口
JMP TT0
ORG 13H ;外中断1入口
JMP INT
ORG 30H
;----------------------------------------------------------------------
START:
MOV R0,#70H ;清70H-7AH共11个内存单元
MOV R7,#0BH ;
CLEARDISP:
MOV @R0,#00H ;
INC R0 ;
DJNZ R7,CLEARDISP ;
MOV TMOD,#01H ;设T0为16位定时器
MOV TH0,#0FCH ;50MS定时初值(T0计时用)
MOV TL0,#18H ;50MS定时初值(1MS延时,FC18H)
SETB EA
SETB IT1 ;INT1下沉触发
LOOP0:
MOV P3,#0FFH
MOV P0,#0
MOV P2,#0FFH
LOOP1:; ;等待开始
JNB KEY_1,KEY1 ;等待按键开始
JNB KEY_3,KEY3 ;(如果用单片机硬件按键复位可省去此键)
CALL DISPLAY
JMP LOOP1
KEY1:; ;开始键消抖动
CALL DS20MS
JB KEY_1,LOOP1
SETB EX1
SETB TR0 ;开启T0定时器
SETB ET0
JMP LOOP0
KEY3: ;清零键去抖
CALL DS20MS
JB KEY_3,LOOP0
CLR TR0
CLR ET0
JMP START
;---------------------------------------------------------
TT0: ;定时中断
CLR TR0
CLR ET0
MOV R0,#70H
TTT1:
MOV A,@R0
INC A
CJNE A,#10,GO1
MOV A,#0
MOV @R0,A
INC R0
CJNE R0,#76H,TTT1
MOV R0,#70H
GO1: ;中断结束
MOV @R0,A
MOV TH0,#0FCH
MOV TL0,#18H
SETB ET0
SETB TR0
RETI
;-------------------------------------------------------------
INT: ;停止键按下处理
CLR ET0 ;(为了保证停止时间的精准,采用了中断停止)
CLR TR0
RETI
;-------------------------------------------------------------
DISPLAY: ;显示程序(显示程序占时20MS)
MOV R1,#70H
MOV R5,#0FEH
PLAY:
MOV A,R5
MOV WS,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DM,A
LCALL DL1MS ;显示1MS
INC R1
MOV A,R5
JNB ACC.5,ENDOUT
RL A
MOV R5,A
JMP PLAY
ENDOUT:
SETB WS_5
MOV DM,#0FFH
MOV WS,#0FFH
RET
TAB: ;数码显示段码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;------------------------------------------------------------
;延时程序
DL1MS: ;1MS延时程序,LED显示程序用
MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DS20MS: ;20MS延时程序
CALL DISPLAY
CALL DISPLAY
RET
;-------------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -