按鍵的檢測與去抖動
吳軍老師說,銷售的主要工作 = 賣出產品 + 把錢收回來。
一次完整的按鍵事件 = 按下 + 彈起。
為了避免因為按鍵抖動產生的誤判斷,當檢測到鍵值為0時,先延時“讓子彈飛一會”,如果再次檢測到鍵值為0,說明是真的有按鍵按下了,那就幹活——數碼管顯示對應數字。同時打卡——讓 flag=1,說明真的有按下並且幹活了。當鬆開按鍵之後,檢測到鍵健為1,那就不幹活,同時看一下flag的值是0還是1,如果是1,那說明有幹活並打卡了,那就把flag恢復為0,為下一次幹活做準備。
程式碼如下:
#include <reg51.h>
#define uchar unsigned char
sbit K1 = P0^0;
uchar SingleLED[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar i;
void display(void);
void delay10ms(void);
//一次完整的按鍵事件及去抖動
//完整的按鍵事件 = 按下 + 彈起
//程式碼邏輯: 按下 + 去抖 + 執行任務 + 去抖 + 彈起
//定一個標記位,用來記錄按鍵是按下,還是彈起。
void main()
{
uchar flag = 0; //預設為0,表示沒有按下
while (1)
{
if(K1 == 0)
{
delay10ms();
if(K1 == 0) //延時後,還是低電平,說明是真的發生了按下事件
{
if(flag == 0)
{
display();
flag = 1;
}
}
}
else
{
delay10ms();
if(flag == 1) //說明產生了一次彈起事件
{
flag = 0;
}
}
}
}
void display(void)
{
i = i +1;
if(i == 15)
{
i = 0;
}
P1 = SingleLED[i];
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=1; c>0; c--)
for(b=38; b>0; b--)
for(a=130; a>0; a--);
}
相關文章
- 特權FPGA 按鍵消抖檢測程式碼FPGA
- 三行程式碼按鍵消抖 獨立按鍵 矩陣按鍵 長按 短按 雙擊行程矩陣
- stm32f407按鍵檢測庫函式版函式
- 按鍵中斷驅動程式
- 去抖函式的實現函式
- opencv關鍵點檢測OpenCV
- 超簡單的抖音去水印
- 理解Underscore中的去抖函式函式
- 關於正點原子input子系統,驅動中按鍵中斷只檢測了上升或下降沿卻可以實現連按(EV_REP)的原因
- 小體積封裝單按鍵觸控檢測晶片VKD233HH,低功耗單鍵觸控晶片封裝晶片
- 全自動化的抖音啟動速度測試
- 【.NET 與樹莓派】矩陣按鍵樹莓派矩陣
- 啟動按ctrl鍵 遮蔽自動隱藏功能
- 恁測試人員系列之:函式抖動與節流函式
- css設定按鈕心跳收縮後,按鈕文字上下抖動,如何解決?CSS
- 2.3用按鍵精靈錄製鍵盤與滑鼠操作
- 按鍵原理
- form表單按enter鍵自動提交的問題ORM
- 【js】什麼是函式節流與函式去抖JS函式
- JavaScript 五十問——認真聊一聊去抖與節流JavaScript
- JavaFx 實現按鈕防抖Java
- 仿抖音點贊按鈕
- iOS 人臉關鍵點檢測iOS
- 抖音要檢測報告一定要做嗎
- mac git命令按tab鍵自動補全MacGit
- 夸克APP端智慧:文件關鍵點檢測實踐與應用APP
- 抖音去水印超簡單
- JS函式節流,去抖JS函式
- 抖音一鍵釋出工具,一鍵釋出抖音影片
- 教你用程式檢測抄襲/文章去重
- Flutter抖動動畫、顫抖動畫、Flutter文字抖動效果Flutter動畫
- [20200107]vim 按鍵與金山詞霸衝突.txt
- 獨立按鍵的掃描
- 基於Keras的動物檢測Keras
- TensorFlow Lite+OpenCV實現移動端水印的檢測與去除OpenCV
- 鍵盤失靈按什麼鍵恢復 win10鍵盤恢復按鍵Win10
- 如何理解自動化測試資料驅動與關鍵字驅動的區別?
- [JS效能優化]函式去抖(debounce)與函式節流(throttle)JS優化函式