阵列式键盘实训C语言,新人求教 阵列式键盘

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

ORG 0000H

LJMP START

ORG 00100H

DBUF EQU 30H

TEMP EQU 40H

DIN BIT P3.0

CLK BIT P3.1

START: MOV A,#16H

MAIN: ACALL DISP

MOV 30H, A

ACALL KEY1

AJMP MAIN

KEY1: MOV P1,#0F0H;对输入应锁存写

1

MOV A,P1

CJNE A,#0F0H, K11 有键按下

K10: AJMP KEY1 无键按下

K11: ACALL DELAY 延时去抖动

MOV P1,#0F0H

MOV A,P1 再读取键盘状况

CJNE A,#0F0H, K12 确有键按下

SJMP K10 误动作

K12: MOV B,A 存列值

MOV P1,#0FEH 检测第一列

MOV A,P1

CJNE A,#0FEH,K13

MOV P1,#0FDH 检测第二列

MOV A,P1

CJNE A,#0FDH,K13

MOV P1,#0FBH 检测第三列

MOV A,P1

CJNE A,#0FBH,K13

MOV P1,#0F7H 检测第四列 MOV A,P1

CJNE A,#0F7H, K13

AJMP K10 多键同时按下

K13: ANL A,#0FH 得行值

ORL A,B 得按下的行列值

MOV B,A 暂存键值

MOV R1,#16 16

个键

MOV R2,#0 键码初值

MOV DPTR,#K1TAB 键码表首址

K14: MOV A,R2

MOVC A,@A+DPTR 从键值表取键值

CJNE A,B, K16 与按下键的键比较

MOV P1,#0F0H

K15: MOV A,P1

CJNE A,#0F0H, K15

ACALL DELAY 延时去抖动

MOV A,R2 得键码

RET

K16: INC R2

DJNZ R1,K14

AJMP K10

K1TAB: DB 0EEH,0EDH,0EBH,0E7H

DB 0DEH,0DDH,0DBH,0D7H

DB 0BEH,0BDH,0BBH,0B7H

DB 07EH,07DH,07BH,077H

DISP: MOV DBUF,#0CH

MOV DBUF+1,#5

MOV DBUF+2,#1

MOV DBUF+3,#16

MOV DBUF+4,A

MOV R0,#DBUF

MOV R1,#TEMP

MOV R2,#8

DP10:MOV DPTR,#SEGTAB

MOV A,@R0

MOVC A,@A+DPTR

MOV @R1,A

INC R0

INC R1

DJNZ R2,DP10

MOV R0,#TEMP

MOV R1,#5

DP12:MOV R2,#8

MOV A,@R0

DP13:RLC A

MOV DIN,C

CLR CLK

SETB CLK

DJNZ R2,DP13

INC R0

DJNZ R1,DP12

RET

SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH

DB 7DH,07H,7FH,6FH,77H,7CH

DB 58H,5EH,79H,71H,00H,40H

DELAY: MOV R4,#02H

AA1: MOV R5,#0F8H

AA: NOP

NOP

DJNZ R5,AA

DJNZ R4,AA1

RET

END

汇编找到了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值