📄 test12.asm
字号:
;=================================================
; 0-9999记数器 sw1 + sw2 - sw3 清零
; 按下sw时对应 D9 D8 点亮
;=================================================
;
; 多功能红外单片机开发板 配套实验板学习例程
;
; 中国DSP网
;
; http://www.chinadsp.cn
; E-mail:ylmcu@163.com
;=================================================
LED1 EQU 08H
LED2 EQU 09H
LED3 EQU 0AH
LED4 EQU 0BH
LedT0 EQU 0CH ;0-3 轮流点亮4个数据管
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,#11110000B ;关数码管
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
LJMP INT_T0_END
INT_T0_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,LED4
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
MOV LedT0,#0
LJMP INT_T0_END
INT_T0_END:
POP PSW
POP ACC
RETI
;=============================================
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 LED1,#0
MOV LED2,#0
MOV LED3,#0
MOV LED4,#0
;=============================================
SCAN:
;按键扫描
MOV A,#11100011B
ORL A,P3
CPL A
JZ SCAN
LCALL DELAY10MS ;去抖动
JNB P3.2,KEY_SW1_INC
JNB P3.3,KEY_SW2_DEC
JNB P3.4,KEY_SW3_RST
LJMP SCAN
;=============================================
KEY_SW1_INC:
;点灯d9
CLR P1.7
JNB P3.2,$ ;放开按键
INC LED4
MOV A,LED4
CJNE A,#10,KEY_SW1_END ;等于10,进位
MOV LED4,#00
INC LED3
MOV A,LED3
CJNE A,#10,KEY_SW1_END
MOV LED3,#00
INC LED2
MOV A,LED2
CJNE A,#10,KEY_SW1_END
MOV LED2,#00
INC LED1
MOV A,LED1
CJNE A,#10,KEY_SW1_END
MOV LED1,#00
MOV LED2,#00
MOV LED3,#00
MOV LED4,#00
KEY_SW1_END:
;灭灯d9
SETB P1.7
JMP SCAN
;=============================================
KEY_SW2_DEC:
;点灯d8
CLR P1.6
JNB P3.3,$ ;放开按键
CLR C
MOV A,LED4
SUBB A,#1
MOV LED4,A
JNC KEY_SW2_END ;借位,表示已经减到小于0
MOV LED4,#09
CLR C
MOV A,LED3
SUBB A,#1
MOV LED3,A
JNC KEY_SW2_END
MOV LED3,#09
CLR C
MOV A,LED2
SUBB A,#1
MOV LED2,A
JNC KEY_SW2_END
MOV LED2,#09
CLR C
MOV A,LED1
SUBB A,#1
MOV LED1,A
JNC KEY_SW2_END
MOV LED1,#09
MOV LED2,#09
MOV LED3,#09
MOV LED4,#09
KEY_SW2_END:
;灭灯d8
SETB P1.6
JMP SCAN
;=============================================
KEY_SW3_RST:
MOV LED1,#00
MOV LED2,#00
MOV LED3,#00
MOV LED4,#00
;检测按键是否放开
JNB P3.4,$
JMP SCAN
DELAY10MS:
MOV R4,#20
DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
RET
TABLE:
DB 00101000B ;0
DB 11101011B ;1
DB 00110010B ;2
DB 10100010B ;3
DB 11100001B ;4
DB 10100100B ;5
DB 00100100B ;6
DB 11101010B ;7
DB 00100000B ;8
DB 10100000B ;9
DB 01100000B ;A
DB 00100101B ;b
DB 00111100B ;C
DB 00100011B ;d
DB 00110100B ;E
DB 01110100B ;F
DB 11110111B ;-
DB 11111111B ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -