188610329 发表于 2022-10-20 09:56 嗯嗯,讲的很清楚很明白,感谢大佬不吝赐教!! |
powerhope 发表于 2022-10-20 08:50 按键按下 为 0, 按键释放 为 1, 你不需要管keybuf 原来是什么值, 只要知道,每次会把 按键状态 补入keybuf, 那么,如果 keybuf 为0xff 意味着 最后8次检测的状态 都是1,按键处在稳定的 “释放”状态, 反之,keybuf 为 0x00, 意味着 最后8次检测的状态 都是0,按键处在稳定的 “按下”状态, 所以,除了0x00,或者 0xff, 其他任何值都代表,按键在变化的过程中,或者在抖动中。 至于按下的是哪个键,就看 keybuf[0]~keybuf[3] 哪个变 0x00了,不就知道了? |
188610329 发表于 2022-10-18 11:08 好的好的,非常感谢,那这个函数的意思就是,一直在main函数里面循环,然后每执行一次keybuf就会左移一位,等移位8次才会变成0x00,也就实现了消除抖动的功能对吗?再或上按键的位状态,就可以判断出按下了哪个按键对吧 |
powerhope 发表于 2022-10-18 10:51 1) 移位后补0, 即 0xff 左移后 0xfe 左移8次 就变 0x00了 2) | 是或操作,不是与操作。 基础补一下吧。 |
就是那个keybuf移位之后与的操作,keybuf不都是0xff嘛,也就是1111 1111,那与上KEY1是不会出现0x00的吧? 还有就是KEY1都是位操作,也就是sbit,那它们的值默认的是多少呢?我只知道按位操作的话,当按键1按下时,KEY1 = 0,也就是IO口呈低电平。 |
哪里不懂? |