按鍵的檢測與去抖動
吳軍老師說,銷售的主要工作 = 賣出產品 + 把錢收回來。
一次完整的按鍵事件 = 按下 + 彈起。
為了避免因為按鍵抖動產生的誤判斷,當檢測到鍵值為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
- 按鍵多次檢測程式註釋
- 三行程式碼按鍵消抖 獨立按鍵 矩陣按鍵 長按 短按 雙擊行程矩陣
- AD去抖動之軟體濾波
- android典型程式碼系列(二十二)------按鍵使上面的EditText抖動Android
- 去抖函式的實現函式
- stm32f407按鍵檢測庫函式版函式
- 理解Underscore中的去抖函式函式
- 恁測試人員系列之:函式抖動與節流函式
- JS函式節流,去抖JS函式
- 【js】什麼是函式節流與函式去抖JS函式
- JavaScript 五十問——認真聊一聊去抖與節流JavaScript
- JavaFx 實現按鈕防抖Java
- Flutter抖動動畫、顫抖動畫、Flutter文字抖動效果Flutter動畫
- android按鍵模擬測試Android
- css設定按鈕心跳收縮後,按鈕文字上下抖動,如何解決?CSS
- 按鍵中斷驅動程式
- JS專題之去抖函式JS函式
- opencv關鍵點檢測OpenCV
- 運動目標檢測與跟蹤
- android 處理按鍵動作Android
- [JS效能優化]函式去抖(debounce)與函式節流(throttle)JS優化函式
- Mysql cluster slave server的自動檢測與修復MySqlServer
- zabbix主動、被動檢測的詳細過程與區別
- 檢測到不相容的鍵盤驅動程式的解決辦法
- 啟動按ctrl鍵 遮蔽自動隱藏功能
- 關於正點原子input子系統,驅動中按鍵中斷只檢測了上升或下降沿卻可以實現連按(EV_REP)的原因
- 函式節流和去抖之間的區別函式
- 【.NET 與樹莓派】矩陣按鍵樹莓派矩陣
- 網路效能四大關鍵指標:頻寬、時延、抖動與丟包率指標
- 2.3用按鍵精靈錄製鍵盤與滑鼠操作
- Mac按鍵Mac
- JavaScript抖動效果JavaScript
- iOS 人臉關鍵點檢測iOS
- mac git命令按tab鍵自動補全MacGit
- 小體積封裝單按鍵觸控檢測晶片VKD233HH,低功耗單鍵觸控晶片封裝晶片
- 教你用程式檢測抄襲/文章去重
- 夸克APP端智慧:文件關鍵點檢測實踐與應用APP