1. 程式人生 > >51微控制器獨立鍵盤原理

51微控制器獨立鍵盤原理

我這按鍵是機械彈性按鍵,所以具有彈性,按鍵在按下和鬆開的瞬間均伴隨有一連串的抖動,鍵抖動會引起一次按鍵被誤讀多次,然後為了保證cpu對鍵的一次閉合僅作一次處理,所以我們必須去除抖動。去除抖動有2種,硬體消抖和軟體消抖。其中一軟體消抖最方便。所以我就以軟體消抖為例。

     獨立按鍵的原理圖和led的原理圖如上,8個led的陽極都接了vcc(vcc認為是電源正極,gnd認為是電源負極),所以只需要led的陰極接的p2i(i取值0到7)口輸入低電平(即0v)對應的led就可以發亮了.接下來看看獨立按鍵的原理圖,首先K1是和rxd管腳相連的,然後rxd管腳又是和P3^1口連線的,所以可以P3^1口是和k1開關連線的,可以知道當k1按鍵按下時電路就導通了,因為k1右邊接了gnd,所以P3^1這個io口的輸出電平就被拉低變0電平了。(p31io口電平能被拉低是因為P3口是準雙向io口),所以我們可以通過判斷P3^1io口的電平來獲知按鍵的狀態,P3^1==1,則按鍵k1沒有按下,P3^1==0,則按鍵k1按下了。接下來展示一個通過獨立鍵盤裡的按鍵k1來控制led1的亮滅的程式

#include<reg52.h>
sbit led1=P2^0;//因為led1由p2^0口控制
sbit k1=P3^1;//P31口的輸出電平由按鍵k1控制
void delay(int i)
{
	while(i--);
}
void keyproc()
{
	if(k1==0)
	{
		delay(1000);//延時消抖
		if(k1==0)
		{
			led1=~led1;////led1狀態反轉,亮變滅,滅變亮
		}
		while(!k1) ;
		
	}
}
void main()
{
	while(1)
	{
		keyproc();
	}
}

把這程式碼燒到微控制器後,我們一按k1,led1就會亮,再按一次就會滅,一直這樣下去