原因:由於按鍵是由金屬片組成,當按下鬆開後,會發生抖動,效果等同於在很小的時間內按下好多次,由於人的反應時間較計算機的計算能力差距很大,因此,計算機經過處理後產生的效果是人眼看不到的,爲了能夠看到清晰的效果,因此,需要設置按鍵消抖。解決方法:保證每個引腳的信號輸入的脈衝週期大於
輸入引腳的讀取週期。
當小於脈衝週期時,發送的信號會出現部分丟失。
當大於脈衝週期時,發送的信號始終都會被接收,代碼實現體現在延時讀取引腳的數據。
這裏借用51單片機的按鍵消抖程序來看具體的實現
//軟件消抖的獨立式鍵盤輸入實驗
#include<reg52.h> // 包含51單片機寄存器定義的頭文件
sbit S1=P1^4; //將S1位定義爲P1.4引腳
sbit LED0=P0^0; //將LED0位定義爲P0.0引腳
//延時約30ms函數
void delay(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
//主函數
void main(void)
{
LED0=0; //P0.0引腳輸出低電平
while(1)
{
if(S1==0) //P1.0引腳輸出低電平,按鍵S1被按下
{
delay(); //延時一段時間再次檢測
if(S1==0) // 按鍵S1的確被按下
LED0=~LED0; //P0.0引腳取反,即實現開關燈功能
while(!S1); //等待下一次按鍵
}
}
}