外部中断扫描矩阵键盘
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
外部中断扫描矩阵键盘
;将4个7段数码显示器显示的内容放在4个显存中,4个显存空间定义如下
LED0 EQU30H
LED1 EQU31H
LED2 EQU32H
LED3 EQU 33H
ORG 0000H
LJMP MAIN
ORG0003H;转入外部中断0服务程序入口
LJMP INP0
ORG0040H
MAIN: MOV SP, #60H
SETB EX0 ;开INT0中断
SETB IT0 ;设置中断触发方式
SETB EA ;开总中断
MOV LED0, #0
MOV LED1, #1
MOV LED2, #2
MOV LED3, #3
START: MOV P0, #00H;使显示器不显示
MOV P2, #0FFH;关闭显示器位选择码目的也是使显示器不显示
MOV A, LED0
LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序
CLR P2.0;最后一位七段数码管显示
LCALL DELAY ;少许延时目的是使得数码管更亮
MOV P0, #00H;使显示器不显示
MOV P2, #0FFH ;
MOV A, LED1
LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序
CLR P2.1;倒数第二位七段数码管显示
LCALL DELAY
MOV P0, #00H;使显示器不显示
MOV P2, #0FFH ;
MOV A, LED2
LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序
CLR P2.2 ;倒数第三位七段数码管显示
LCALL DELAY
MOV P0, #00H;使显示器不显示
MOV P2, #0FFH ;
MOV A, LED3
LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序
CLR P2.3;倒数第四位七段数码管显示
LCALL DELAY
LJMP START ;跳回初始位置,使程序循环;;;;;;;;;;;;;;;;;;;;;;;;;;;中断程序
INP0: CLR EA
PUSH PSW
PUSH ACC
PUSH B
JB P2.3, NP2 ;P2.3口输出低电平,扫描K0,K1,K2,K3
SK0: JB P2.4, SK1 ;P2.4为高电平扫描K0
LCALL OPRK0 ;P2.4为低电平执行K0对应子程序
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP ;重新循环扫描
SK1: JB P2.5, SK2
LCALL OPRK1
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SK2: JB P2.6, SK3
LCALL OPRK2
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SK3: JB P2.7, NP2 ;换一次输出位
LCALL OPRK3
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
NP2: JB P2.2, NP3 ;P2.2口输出低电平,扫描K4,K5,K6,K7 SK4: JB P2.4, SK5 ;P2.4为高电平扫描K5
LCALL OPRK4 ;P2.4为低电平执行K5对应子程序
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP ;重新循环扫描
SK5: JB P2.5, SK6
LCALL OPRK5
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SK6: JB P2.6, SK7
LCALL OPRK6
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SK7: JB P2.7, NP3 ;换一次输出位
LCALL OPRK7
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
NP3: JB P2.1, NP4 ;P2.1口输出低电平,扫描K8,K9,KA,KB SK8: JB P2.4, SK9 ;P2.4为高电平扫描K8
LCALL OPRK8 ;P2.4为低电平执行K8对应子程序
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP ;重新循环扫描
SK9: JB P2.5, SKA
LCALL OPRK9
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SKA: JB P2.6, SKB
LCALL OPRKA
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SKB: JB P2.7, NP4 ;换一次输出位
LCALL OPRKB
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
NP4: JB P2.0, SKLOOP;P2.0口输出低电平,扫描KC,KD,KE,KF SKC: JB P2.4, SKD ;P2.4为高电平扫描KC
LCALL OPRKC
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP ;重新循环扫描
SKD: JB P2.5, SKE
LCALL OPRKD
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SKE: JB P2.6, SKF
LCALL OPRKE
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SKF: JB P2.7, SKLOOP ;换一次输出位
LCALL OPRKF
LCALL DELAY1 ;延时去除抖动
LJMP SKLOOP
SKLOOP: POP B
POP ACC
POP PSW
SETB EA
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;子程序
OPRK0: MOV P1, #00H
SETB P1.0
MOV LED3, #16