admin管理员组文章数量:1571935
4×4 的键盘,在单片机系统中,是很常见的。一般都是占用一个单片机的 8 位接口。
对于这种输入设备,通常是由单片机来识别某行某列的按键是否按下,还需要延时消抖等等。做而论道以前写过不少这方面的博文。
为了节省单片机的 IO 接口,也可以使用外接芯片来驱动 4×4 的键盘,如:8279。
MM74C922,就是一块较好的 4×4 的键盘编码芯片。它能够自己独立地进行键盘检测、消抖,以 8421 码给出键值。它还能给出按键是否按下的标志,其数据线还具有三态输出的功能,便于进行总线连接。
总之,这块芯片的功能很全面。
美中不足的是:它是以输出 1 来代表有键按下。如果用来向 51 单片机申请中断,还需要加上一个反相器。
下图就是利用 MM74C922 驱动的 4×4 键盘的电路图。
图中使用了六位共阳数码管,位选的驱动,加了反相器 7404,制作实际的电路时,应该使用 8550。
该电路的驱动程序如下所示。
;--------------------------------------
D_BUF EQU 30H ;30H~35H 为显示缓冲区
;
ORG 00H
MOV R1, #D_BUF
M_LOOP:
CALL DISP
JNB P2.7, M_LOOP ;没有按键就转移
CALL READKEY
MOV @R1, A ;存入键值
INC R1
CJNE R1, #D_BUF + 6, M_LOOP
SJMP 00H
;--------------------------------------
READKEY:
MOV P0, #255 ;关闭显示, 准备读键
CLR P2.6 ;/OE=0
NOP
MOV A, P0
SETB P2.6
ANL A, #15
PUSH ACC
R_LOOP:
CALL DISP
JB P2.7, R_LOOP ;等待释放
POP ACC
RET
;--------------------------------------
DISP: ;共阳数码管, P0:段, P2:位(有反相)
MOV R2, #254 ;位选, 低电平有效
MOV R0, #D_BUF
MOV A, @R0
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC
MOV P2, #255
MOV P0, A
MOV P2, R2
DJNZ R7, $ ;显示1024T
DJNZ R7, $
MOV A, R2
RL A
MOV R2, A
INC R0
CJNE R0, #D_BUF + 6, $ - 19 ;显示6位
MOV P2, #255
RET ;占用时间约为6.1ms
;-----------------------
TAB: ;共阳段码
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H;0~7
DB 080H, 090H, 088H, 083H, 0C6H, 0A1H, 086H, 08EH;8~F
END
;--------------------------------------
本程序,可以驱动 MM74C922,正确读出键值,依次显示在数码管上。
按照做而论道设计的电路,这块芯片仅仅单独占用了单片机的两条 IO 口线,就实现了 16 个按键的驱动,确实是非常节省资源。
本电路、程序,用 PROTEUS 仿真成功了,暂时还没有进行硬件实验。
--本文完--
版权声明:本文标题:键盘编码芯片 MM74C922 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727707298a1126493.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论