找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7920|回复: 0
打印 上一主题 下一主题
收起左侧

4X4矩阵键盘0~9输入 8 位数码管显示

[复制链接]
跳转到指定楼层
楼主
ID:85192 发表于 2015-7-10 01:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
4D显示的程序,只有一位显示。一直想写个多位显示的,没成功,知道问题在于防抖处理,可是无法下手,最后放弃。今天再试,成功了。


;按下4X4矩阵键盘之0~9,依次在8 位数码管上从最低位往高位显示按键的键名。8次后,从最低位重新开始。
;E:\DPJ\4X4KEY\4X4KEY_2.ASM           2012 01 03
ORG 00H   
AJMP MAIN   
ORG 30H
MAIN:
MOV SP,#60H
MOV DPTR,#TABLE
MOV A,#10
MOV 30H,A
MOV 31H,A
MOV 32H,A
MOV 33H,A
MOV 34H,A
MOV 35H,A
MOV 36H,A
MOV 37H,A

KEY:
ACALL KEYSCAN   ;调用KEYSCAN,判断是否有键按下
JB F0,$-2   ;无键按下,转ACALL KEYSCAN,继续扫描
CJNE R0,#1,KEY_1
MOV 30H,R1
AJMP KEY   ;R1为取码指针
KEY_1:
CJNE R0,#2,KEY_2
MOV 31H,R1
AJMP KEY
KEY_2:
CJNE R0,#3,KEY_3
MOV 32H,R1
AJMP KEY
KEY_3:
CJNE R0,#4,KEY_4
MOV 33H,R1
AJMP KEY
KEY_4:
CJNE R0,#5,KEY_5
MOV 34H,R1
AJMP KEY
KEY_5:
CJNE R0,#6,KEY_6
MOV 35H,R1
AJMP KEY
KEY_6:
CJNE R0,#7,KEY_7
MOV 36H,R1
AJMP KEY
KEY_7:
CJNE R0,#8,KEY_8
MOV 37H,R1
MOV R0,#0
KEY_8:
AJMP KEY
KEYSCAN:    ;按键检测子程序
ACALL DISP
SETB F0   ;设F0=1
MOV R3,#0F7H  ;行扫描指针初值(P2.3=0)
MOV R1,#00H   ;取码指针初值
L2:
MOV A,R3   ;载入扫描指针
MOV P2,A   ;输出至P2,开始扫描为0的一行
NOP
MOV A,P2   ;读入P2
SETB C   
MOV R5,#4   ;检测P2.7~P2.4,共4 列
L3:    ;检测4列
RLC A   ;左移一位(P2.7~P2.4)
JNC KEY1   ;检测到C=0,表示被按下
INC R1   ;无键按下则取码指针加1
DJNZ R5,L3   ;4列检测完毕?
MOV A,R3   ;载入扫描指针
SETB C
RRC A       ;扫描为0的下一行,
MOV R3,A   ;存回R3扫描指针寄存器
JC L2   ;C=0,表示行扫描完毕
RT:
RET
   
KEY1:
ACALL D10MS   ;防抖
KEY10:
ACALL DISP   ;这里调用一次显示子程序,按下按键,显示保持连续 。
MOV A,P2
ANL A,#0F0H
ORL A,#0FH
CJNE A,#0FFH,KEY10          ;释放
CLR F0   ;F0清0 ,表示按键按下过
INC R0   ;按键按下次数,以确定显示的位数
RET
DISP:
MOV A,30H
MOVC A,@A+DPTR  ;取码,关送显示
MOV P0,A
CLR P1.0
ACALL D1MS
SETB P1.0
MOV A,31H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.1
ACALL D1MS
SETB P1.1
MOV A,32H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.2
ACALL D1MS
SETB P1.2
MOV A,33H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.3
ACALL D1MS
SETB P1.3
MOV A,34H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.4
ACALL D1MS
SETB P1.4
MOV A,35H
MOVC A,@A+DPTR  ;
MOV P0,A
CLR P1.5
ACALL D1MS
SETB P1.5
MOV A,36H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.6
ACALL D1MS
SETB P1.6
MOV A,37H
MOVC A,@A+DPTR  
MOV P0,A
CLR P1.7
ACALL D1MS
SETB P1.7
RET
D10MS:
MOV R7,#10
ACALL D1MS
DJNZ R7,$-2
RET
D1MS:
MOV R5,#20
MOV R4,#25
DJNZ R4,$
DJNZ R5,$-4
RET
TABLE:  
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;显示码表,共阴

END   




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表