![]() |
發布時間: 2022-10-14 14:22
正文摘要:uchar keystr[] = {1, 1, 1, 1}, backup[] = {1, 1, 1, 1}; void KeyScan() { ... |
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口呈低電平。 |
哪里不懂? |