📄 试验.txt
字号:
;==================================================================================
; sw2 +1秒 sw3 +0.1秒 sw4 允许定时 sw5允许运行,禁止定时 sw7清零
; P3.2运行
;==================================================================================
LED1 EQU 08H
LED2 EQU 09H
LED3 EQU 0AH
LED4 EQU 0BH
LED5 EQU 0CH
LED6 EQU 0DH
LED7 EQU 0EH
LedT0 EQU 0FH ;0-6 轮流点亮7个数据管
JS1 EQU 020H
JS2 EQU 021H
TimeS EQU 022H ;秒
TimeM EQU 023H ;0.1秒
NUMB1 EQU 024H ;存十位
NUMB2 EQU 025H ;存个位
ORG 0000H
LJMP START;转入主程序
ORG 000BH
;定时器0中断入口
INT_TO:
PUSH ACC
PUSH PSW
;=============================显示
CLR TF0 ;清定时0中断标志
MOV TH0,#0F6H ;2.5MS
MOV TL0,#03DH ;
MOV A,#11111110B ;关数码管
ORL P2,A
MOV A,LedT0
CJNE A,#0,INT_T0_1 ;秒
MOV A,LED1
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
MOV LedT0,#1
;点小数点
SETB P0.7
LJMP INT_T0_END
INT_T0_1: ;0.1秒
MOV A,LedT0
CJNE A,#1,INT_T0_2
MOV A,LED2
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
MOV LedT0,#2
LJMP INT_T0_END
INT_T0_2: ;万位
MOV A,LedT0
CJNE A,#2,INT_T0_3
MOV A,LED3
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
MOV LedT0,#3
LJMP INT_T0_END
INT_T0_3: ;千位
MOV A,LedT0
CJNE A,#3,INT_T0_4
MOV A,LED4
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
MOV LedT0,#4
LJMP INT_T0_END
INT_T0_4: ;百位
MOV A,LedT0
CJNE A,#4,INT_T0_5
MOV A,LED5
MOVC A,@A+DPTR
MOV P0,A
CLR P2.3
MOV LedT0,#5
LJMP INT_T0_END
INT_T0_5: ;十位
MOV A,LedT0
CJNE A,#5,INT_T0_6
MOV A,LED6
MOVC A,@A+DPTR
MOV P0,A
CLR P2.2
MOV LedT0,#6
LJMP INT_T0_END
INT_T0_6: ;个位
MOV A,LED7
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
MOV LedT0,#0
LJMP INT_T0_END
INT_T0_END:
POP PSW
POP ACC
RETI
;========十六进制转换为十进制,A高位,B低位
HEXtoBCD:
mov b,#0ah ; HEX>BCD
div ab
anl a,#00001111b
anl b,#00001111b
RET
;==============================================外部中断0
INT_IN0:
LJMP CUTC
START:
MOV SP,#60H
MOV TMOD,#01H ;设定T0为十六位定时模式。
MOV TH0,#0F6H ;2MS
MOV TL0,#03DH ;
SETB TR0 ;开定时器0
SETB ET0 ;致能定时0中断
CLR TF0 ;清定时0中断标志
SETB EA ;开总中断
MOV LedT0,#00H
MOV DPTR,#TABLE
MOV NUMB1,#00
MOV NUMB2,#00
MOV TimeS,#00
MOV TimeM,#00
MOV LED1,#0
MOV LED2,#0
MOV LED3,#0
MOV LED4,#0
MOV LED5,#0
MOV LED6,#0
MOV LED7,#0
;=============================================允许
CUTC:
MOV A,#00000011B
ORL A,P3
CPL A
JNB P1.3,$
JNB P3.3,KEY_SW3_RST
JNB P3.2,INT_TIME1
JNB P1.2,SCAN
LJMP CUTC
;=============================================
SCAN:
;按键扫描
MOV A,#11000000B
ORL A,P1
CPL A
JZ SCAN
LCALL DELAY10MS ;去抖动
JNB P1.0,KEY_SW1_INC1 ;秒
JNB P1.1,KEY_SW2_INC2 ;0.1秒
JNB P1.3,CUTC
LJMP SCAN
;===========================================================================时间设定十位
KEY_SW1_INC1:
JNB P1.0,$ ;放开按键
INC LED1
MOV A,LED1
MOV TimeS,A
MOV NUMB1,A
CJNE A,#10,KEY_SW1_END ;等于10,进位
MOV LED1,#00
MOV TimeS,#00
MOV NUMB1,#00
KEY_SW1_END:
JMP SCAN
;=============================================时间设定个位
KEY_SW2_INC2:
JNB P1.1,$ ;放开按键
INC LED2
MOV A,LED2
MOV TimeM,A
MOV NUMB2,A
CJNE A,#10,KEY_SW2_END
MOV LED2,#00
MOV TimeM,#00
MOV NUMB2,#00
KEY_SW2_END:
JMP SCAN
;=============================================清零
KEY_SW3_RST:
MOV LED3,#00
MOV LED4,#00
MOV LED5,#00
MOV LED6,#00
MOV LED7,#00
JNB P3.3,$
KEY_SW3_END:
JMP CUTC
;=============================================运行
INT_TIME1:
SETB P2.0
JNB P3.2,$
INC JS1
MOV A,JS1
CJNE A,#50,TIME_T1_END
MOV JS1,#00
INC JS2
MOV A,JS2
CJNE A,#50,TIME_T1_END
MOV JS2,#00
;定时个位减1
MOV A,TimeM
SUBB A,#1
MOV TimeM,A
JNC TIME_T1_END
CLR C
MOV TimeM,#09
;定时十位减1
MOV A,TimeS
SUBB A,#1
MOV TimeS,A
JNC TIME_T1_END
CLR C
; MOV TimeS,NUMB1
MOV A,NUMB1
MOV TimeS,A
MOV A,NUMB2
MOV TimeM,A
CLR P2.0
;============================================计数
;计数个位加1
INC LED7
MOV A,LED7
CJNE A,#10,KEY_SW3_END
MOV LED7,#00
;计数十位加1
INC LED6
MOV A,LED6
CJNE A,#10,KEY_SW3_END
MOV LED6,#00
;计数百位加1
INC LED5
MOV A,LED5
CJNE A,#10,KEY_SW3_END
MOV LED5,#00
;计数千位加1
INC LED4
MOV A,LED4
CJNE A,#10,KEY_SW3_END
MOV LED4,#00
;计数万位加1
INC LED3
MOV A,LED3
CJNE A,#10,KEY_SW3_END
MOV LED3,#00
LJMP INT_IN0
TIME_T1_END:
MOV A,TimeS
CALL HEXtoBCD
MOV A,TimeM
CALL HEXtoBCD
SJMP INT_TIME1
DELAY10MS:
MOV R4,#20
DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
RET
TABLE:
DB 00111111B ;0
DB 00000110B ;1
DB 01011011B ;2
DB 01001111B ;3
DB 01100110B ;4
DB 01101101B ;5
DB 01111101B ;6
DB 00000111B ;7
DB 01111111B ;8
DB 01101111B ;9
DB 01110111B ;A
DB 01111100B ;B
DB 00111001B ;C
DB 01011110B ;D
DB 01111001B ;E
DB 01110001B ;F
DB 01000000B ;-
DB 00000000B ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -