键盘编码芯片 MM74C922

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

 

--本文完--

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值