㈠ 幫我修改個51單片機機消除抖動c語言程序;
你好!在key函數內加上延時就能防止抖動,num 是按鍵返回的鍵值
㈡ 單片機 按鍵作為外部中斷的輸入,怎麼使用軟體防抖動c語言,謝謝。
出個偏招,一般按鍵時間比抖動時間長吧,你先設置為上升沿觸發,中斷進入後記個標志,再把中斷設置為下降沿觸發,這樣按鍵松開時又觸發一次,再記個標志。然後又設置上升沿。完成一次按鍵捕獲
㈢ 問一個關於單片機按鍵延時防抖方面的問題,使用軟體防抖(匯編、C語言均可)!
設置個短延時,來防抖動就可以了。
如if(a==1)
{
delay(5);
if(a==1)
{b}
}
㈣ c語言按鍵抖動問題
第一,中斷函數裡面不能喂狗,本來看門狗也是一個高級別的中斷,比定時器的優先順序高,自然你的中斷時間就不對了。
第二,你的是飛思卡爾的單片機吧,貌似單片機的IO口有數據方向寄存器,先要把按鍵的埠設置為輸入,如果沒有的話,默認引腳都會是高電平,所以你說檢測松開能檢測到,其實是埠一直是高電平。
只能幫你這么多,我沒用過你這款單片機,猜一下是128不?另外按鍵去抖動用普通的delay函數就可以,何必搞中斷,中斷本來就是件麻煩事,對程序運行效果影響很大。
㈤ 單片機鍵盤去抖動c語言程序!!!
使用這個到板子裡面:
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;
unsigned char code LedChar[] = { //數碼管顯示字元轉換表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
void delay();
void main(){
bit keybuf = 1; //按鍵值暫存,臨時保存按鍵的掃描值
bit backup = 1; //按鍵值備份,保存前一次的掃描值
unsigned char cnt = 0; //按鍵計數,記錄按鍵按下的次數
ENLED = 0; //選擇數碼管 DS1 進行顯示
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
P2 = 0xF7; //P2.3 置 0,即 KeyOut1 輸出低電平
P0 = LedChar[cnt]; //顯示按鍵次數初值
while (1){
keybuf = KEY4; //把當前掃描值暫存
if (keybuf != backup){ //當前值與前次值不相等說明此時按鍵有動作
delay(); //延時大約 10ms
if (keybuf == KEY4){ //判斷掃描值有沒有發生改變,即按鍵抖動
if (backup == 0){ //如果前次值為 0,則說明當前是彈起動作
cnt++; //按鍵次數+1
//只用 1 個數碼管顯示,所以加到 10 就清零重新開始
if (cnt >= 10){
cnt = 0;
}
P0 = LedChar[cnt]; //計數值顯示到數碼管上
}
backup = keybuf; //更新備份為當前值,以備進行下次比較
}
}
}
}/* 軟體延時函數,延時約 10ms */
void delay(){
unsigned int i = 1000;
while (i--);
}
㈥ C語言的按鍵開關防抖程序~
兩個思路:
第一個是,若有按鍵按下,添加延遲程序,延遲過後若按鍵還是按下,則判斷為確定按下
第二個是,若你用的硬體有中斷,則用中斷。中斷設置為下降沿有效(低電平有效的話就是出現一次低電平就中斷一次,達不到防抖效果)。
㈦ 單片機C語言代碼問題 這個按鍵消抖是如何實現的
因為按鍵動作接觸的時間比起晶元處理所需的時間周期多得去,而其他因素引起的抖動卻沒有這種特性,所以往往用多次重復或保持較長時間周期來確定是抖動還是按鍵動作;按鍵動作可能保持會有成千上萬個周期。
㈧ 問一個關於C語言的問題:什麼是「防抖動」
單片機里用到的?用c語言編寫單片機按鍵程序時有去抖方法,就是檢測電平後延時一小段時間再檢測電平,若持續不變則按鍵有效。這是為按鍵抖動產生誤差信號設計的
㈨ 誰能幫忙用c語言編寫一個消抖程序
是按鍵消抖嗎?
一般是先檢測按鍵,然後等10到20ms後,再檢測一下,輸出鍵值。