lkc8210 发表于 2022-1-7 14:52 这个会出现两键同时被按下的情形,会出现显示不正常问题? |
win_shi 发表于 2022-1-7 13:31 地板已经解释得很详细了, 如果你无法保证164输出单一的低电平, 那么:你只能添加,为了产生单一低电平而操作164的代码,并在该时间点读取P26状态的代码,来判断按键了。 |
单片机所有IO口都可以即时作为输入端或者输出端。显示LCD一般最多也就需要12、13个IO口,而89C52有40个IO口可以使用。所以你完全可以抛弃164,直接使用IO口驱动LCD,其他未使用的,选一些出来做动态扫描键盘用。 |
lkc8210 发表于 2022-1-7 14:52 非常感谢,是我愚钝,只想着只能输入串口了,谢谢~~ |
win_shi 发表于 2022-1-7 13:31 74hc164的输出是由你控制的 怎么会不知道输出的并口状态呢? 如单片机控制164输出0xFD 而又捡测到P26 == 0 就说明K1按下 但正如沙发所说的 这个方式只适合用在动态扫描 的 LED上 因为你不能保证164输出单一低电平 如164输出0xF9而按下的是K2 单片机就可能以为是K1按下 而且如果164的D1长期输出高点平(机会很小但有可能出现) 就算按下K1 单片机也会捡测不到 以下是我写的例子 ![]() ![]() |
188610329 发表于 2022-1-7 13:14 非常感谢您的指导,我也是想用当P26==0时来判断有按键按下,但是不知道怎么去判断是那个按键按下的,查资料说74hc164只支持输入,所以输出的并口状态如何获取呢,也就是k1 k2 k3 k4那个是低或者拉高,怎么去识别,还请不吝赐教,非常感谢~ |
在你程序中, 你应该清楚地知道在任意时间点, D1,D2,D3,D4 状态的吧? 当P2.6 = 0 的时候, D1~D4 哪个处于 低电平, 说明 这一时刻 与之对应的 K1~K4 中的哪个按键被按下。 一般,LCD 不太适合用这个方式因为不需要时时更新LCD的内容。 通常,这个方式比较适合用在动态扫描 的 LED上 , 接在LED的公共端,在更新位码的时候顺便 判断一下If(P26 == 0) 就能立刻确定按键了。 |