一.外部中断
代码:
******************************************************************************
* 文件名:外部中断控制数码管加减
* 描 述:
* 作 者:思索与猫
* 日 期: 19/6/27
* 备 注:
*
******************************************************************************
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中断0地址
AJMP EXINT0
ORG 0013H ;外部中断1地址
AJMP EXINT1
ORG 0100H
DULA BIT P2.6
WELA BIT P2.7
DISPLAY:DB 0FFH,03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
; 注意1~10为0~9
;(防止减到0出现乱码)
MAIN:
MOVE SP,#60H ;指定堆栈段位置(防止程序出错)
SETB IT0 ;外部中断初始化
SETB IT1
SETB EX0
SETB EX1
SETB EA
MOV R7,#5 ;初值显示为4
MOV DPTR,#DISPLAY
SETB WELA ;位码
MOV P0,#0FEH
CLR WELA
LOOP: ;循环,查表选择段码
SETB DULA
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
CLR DULA
AJMP LOOP
EXINT0:ACALL DELAY10MS ;中断0
JB P3.2,RE ;消抖
JNB P3.2,$
ACALL LOOP1
AJMP RE
LOOP1:
INC R7 ;自加到11清1
CJNE R7,#11,RE
MOV R7,#1
RET
EXINT1:ACALL DELAY10MS ;中断1
JB P3.3,RE ;消抖
JNB P3.3,$
ACALL LOOP2
AJMP RE
LOOP2:
DEC R7 ;自减到0赋值为10
CJNE R7,#0,RE
MOV R7,#10
RET
RE:RETI
DELAY10MS: ;@11.0592MHz
PUSH 30H
PUSH 31H
MOV 30H,#18
MOV 31H,#230
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
END
二.独立按键
代码:
******************************************************************************
* 文件名:独立按键控制数码管和LED
* 描 述:
* 按下S1,数码管显示1,LED1亮
* 按下S2,数码管显示2,LED2亮
* 按下S3,数码管显示3,LED3亮
* 按下S4,数码管显示4,LED4亮
* 作 者:思索与猫
* 日 期: 19/6/27
* 备 注:
*
******************************************************************************
ORG 0000H
AJMP MAIN
ORG 0100H
K1 BIT P3.0 ;位定义,P3.0~P3.3口为独立键盘
K2 BIT P3.1
K3 BIT P3.2
K4 BIT P3.3
DULA BIT P2.6
WELA BIT P2.7
DISPLAY:DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
;数码管段码0~9
MAIN:
MOV SP,#60H ;指定堆栈位置(防止程序出错)
MOV DPTR,#DISPLAY ;位选设置
SETB WELA
MOV P0,#0FEH
CLR WELA
LOOP:
JNB K1,EVENT1 ;扫描键盘K1,K2,K3,K4
JNB K2,EVENT2
JNB K3,EVENT3
JNB K4,EVENT4
SETB DULA ;查表设置段码
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
CLR DULA
AJMP LOOP
EVENT1: ;按下按键K1
ACALL DELAY10MS ;延时10ms
JB K1,RE ;消抖,再次判断是否按下K1,没有则返回,有则继续
JNB K1,$ ;松开K1后才执行以下程序
MOV P1,#0FEH ;LED1亮
MOV R7,#01H ;段码设置1
AJMP RE ;返回
EVENT2:
ACALL DELAY10MS
JB K2,RE
JNB K2,$
MOV P1,#0FDH
MOV R7,#02H
AJMP RE
EVENT3:
ACALL DELAY10MS
JB K3,RE
JNB K3,$
MOV P1,#0FBH
MOV R7,#3
AJMP RE
EVENT4:
ACALL DELAY10MS
JB K4,RE
JNB K4,$
MOV P1,#0F7H
MOV R7,#4
AJMP RE
RE:RET
DELAY10MS: ;@11.0592MHz
PUSH 30H
PUSH 31H
MOV 30H,#18
MOV 31H,#230
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
END