键盘编码芯片 MM74C922

来源:互联网 发布:电子表格相同数据排序 编辑:程序博客网 时间:2024/06/01 10:23

4×4 的键盘,在单片机系统中,是很常见的。一般都是占用一个单片机的 8 位接口。


对于这种输入设备,通常是由单片机来识别某行某列的按键是否按下,还需要延时消抖等等。做而论道以前写过不少这方面的博文。


为了节省单片机的 IO 接口,也可以使用外接芯片来驱动 4×4 的键盘。


MM74C922,就是一块较好的 4×4 的键盘编码芯片。


它能够自己独立地进行键盘检测、消抖,以 8421 码给出键值。


它还能给出按键是否按下的标志,其数据线还具有三态输出的功能,便于进行总线连接。


总之,这块芯片功能很全面。


美中不足的是:它是以输出 1 来代表有键按下。如果用来向 51 单片机申请中断,还需要加上一个反相器。


下图就是利用 MM74C922 驱动的 4×4 键盘的电路图。


键盘编码芯片 MM74C922 - 非著名博主 - 电子信息角落


图片链接:http://xiangce.baidu.com/picture/detail/8d3b08f9c6212ac71b9a4c2ce7d3b3126a1920c3


图中使用了六位共阳数码管,位选的驱动,加了反相器 7404,制作实际的电路时,应该使用 8550。


百度知道上面有一个问题,要求把每次的按键,依次的显示在各个数码管上,并不是以前常见的移位显示。


题目链接:http://zhidao.baidu.com/question/514089095.html


仿照题目的要求,做而论道编写了如下的程序:

;--------------------------------------

D_BUF  EQU  30H    ;30H~35H 为显示缓冲区

;

    ORG   0000H

    MOV   R1, #D_BUF

M_LOOP:

    CALL  DISP

    JNB   P2.6, M_LOOP  ;没有按键就转移

    CALL  READKEY

    MOV   @R1, A    ;存入键值

    INC   R1

    CJNE  R1, #D_BUF + 6, M_LOOP

    SJMP  0000H

;--------------------------------------

READKEY:

    MOV   P0, #255      ;关闭显示, 准备读键

    CLR   P2.7          ;/OE=0

    NOP

    MOV   A, P0

    SETB  P2.7

    ANL   A, #15

    PUSH  ACC

R_LOOP:

    CALL  DISP

    JB    P2.6, 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 仿真成功了,暂时还没有进行硬件实验。


0 0