找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

求助单片机+74HC164扫描按键怎么实现思路及驱动

查看数: 2877 | 评论数: 7 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-1-7 10:40

正文摘要:

74HC164是 二位串入、8位并出移位寄存器 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。主复位 (MR) 输入端上的一 ...

回复

ID:712493 发表于 2022-6-17 16:52
lkc8210 发表于 2022-1-7 14:52
74hc164的输出是由你控制的
怎么会不知道输出的并口状态呢?
如单片机控制164输出0xFD

这个会出现两键同时被按下的情形,会出现显示不正常问题?
ID:624769 发表于 2022-1-7 20:43
win_shi 发表于 2022-1-7 13:31
非常感谢您的指导,我也是想用当P26==0时来判断有按键按下,但是不知道怎么去判断是那个按键按下的,查资 ...

地板已经解释得很详细了,

如果你无法保证164输出单一的低电平,
那么:你只能添加,为了产生单一低电平而操作164的代码,并在该时间点读取P26状态的代码,来判断按键了。
ID:517466 发表于 2022-1-7 19:43
单片机所有IO口都可以即时作为输入端或者输出端。显示LCD一般最多也就需要12、13个IO口,而89C52有40个IO口可以使用。所以你完全可以抛弃164,直接使用IO口驱动LCD,其他未使用的,选一些出来做动态扫描键盘用。
ID:570965 发表于 2022-1-7 15:48
lkc8210 发表于 2022-1-7 14:52
74hc164的输出是由你控制的
怎么会不知道输出的并口状态呢?
如单片机控制164输出0xFD

非常感谢,是我愚钝,只想着只能输入串口了,谢谢~~
ID:161164 发表于 2022-1-7 14:52
win_shi 发表于 2022-1-7 13:31
非常感谢您的指导,我也是想用当P26==0时来判断有按键按下,但是不知道怎么去判断是那个按键按下的,查资 ...

74hc164的输出是由你控制的
怎么会不知道输出的并口状态呢?
如单片机控制164输出0xFD
而又捡测到P26 == 0
就说明K1按下

但正如沙发所说的
这个方式只适合用在动态扫描 的 LED上
因为你不能保证164输出单一低电平
如164输出0xF9而按下的是K2
单片机就可能以为是K1按下

而且如果164的D1长期输出高点平(机会很小但有可能出现)
就算按下K1
单片机也会捡测不到

以下是我写的例子






ID:570965 发表于 2022-1-7 13:31
188610329 发表于 2022-1-7 13:14
在你程序中, 你应该清楚地知道在任意时间点, D1,D2,D3,D4 状态的吧?
当P2.6 = 0 的时候, D1~D4 哪个处于 ...

非常感谢您的指导,我也是想用当P26==0时来判断有按键按下,但是不知道怎么去判断是那个按键按下的,查资料说74hc164只支持输入,所以输出的并口状态如何获取呢,也就是k1 k2 k3 k4那个是低或者拉高,怎么去识别,还请不吝赐教,非常感谢~
ID:624769 发表于 2022-1-7 13:14
在你程序中, 你应该清楚地知道在任意时间点, D1,D2,D3,D4 状态的吧?
当P2.6 = 0 的时候, D1~D4 哪个处于 低电平, 说明 这一时刻 与之对应的 K1~K4 中的哪个按键被按下。
一般,LCD 不太适合用这个方式因为不需要时时更新LCD的内容。
通常,这个方式比较适合用在动态扫描 的 LED上 , 接在LED的公共端,在更新位码的时候顺便 判断一下If(P26 == 0)  就能立刻确定按键了。

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

Powered by 单片机教程网

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