找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

有大佬能详细讲一下这个51单片机独立按键的扫描程序吗

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

正文摘要:

uchar keystr[] = {1, 1, 1, 1}, backup[] = {1, 1, 1, 1}; void KeyScan() {                                    ...

回复

ID:1047681 发表于 2022-10-21 09:14
188610329 发表于 2022-10-20 09:56
按键按下  为 0, 按键释放 为 1,  你不需要管keybuf 原来是什么值, 只要知道,每次会把 按键状态 补入 ...

嗯嗯,讲的很清楚很明白,感谢大佬不吝赐教!!
ID:624769 发表于 2022-10-20 09:56
powerhope 发表于 2022-10-20 08:50
好的好的,非常感谢,那这个函数的意思就是,一直在main函数里面循环,然后每执行一次keybuf就会左移一位 ...

按键按下  为 0, 按键释放 为 1,  你不需要管keybuf 原来是什么值, 只要知道,每次会把 按键状态 补入keybuf, 那么,如果 keybuf 为0xff  意味着 最后8次检测的状态 都是1,按键处在稳定的 “释放”状态, 反之,keybuf 为 0x00, 意味着 最后8次检测的状态 都是0,按键处在稳定的 “按下”状态, 所以,除了0x00,或者 0xff, 其他任何值都代表,按键在变化的过程中,或者在抖动中。
至于按下的是哪个键,就看 keybuf[0]~keybuf[3]  哪个变 0x00了,不就知道了?
ID:1047681 发表于 2022-10-20 08:50
188610329 发表于 2022-10-18 11:08
1)  移位后补0,   即  0xff   左移后   0xfe  左移8次 就变 0x00了
2)  | 是或操作,不是与操作。

好的好的,非常感谢,那这个函数的意思就是,一直在main函数里面循环,然后每执行一次keybuf就会左移一位,等移位8次才会变成0x00,也就实现了消除抖动的功能对吗?再或上按键的位状态,就可以判断出按下了哪个按键对吧
ID:624769 发表于 2022-10-18 11:08
powerhope 发表于 2022-10-18 10:51
就是那个keybuf移位之后与的操作,keybuf不都是0xff嘛,也就是1111 1111,那与上KEY1是不会出现0x00的吧 ...

1)  移位后补0,   即  0xff   左移后   0xfe  左移8次 就变 0x00了
2)  | 是或操作,不是与操作。

基础补一下吧。
ID:1047681 发表于 2022-10-18 10:51

就是那个keybuf移位之后与的操作,keybuf不都是0xff嘛,也就是1111 1111,那与上KEY1是不会出现0x00的吧?
还有就是KEY1都是位操作,也就是sbit,那它们的值默认的是多少呢?我只知道按位操作的话,当按键1按下时,KEY1 = 0,也就是IO口呈低电平。
ID:161164 发表于 2022-10-14 17:01
哪里不懂?

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

Powered by 单片机教程网

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