按鍵即微動開關,本身不能自鎖。今天我們通過三個程式舉例如何在程式中編寫按鍵控制語句。
一、三個製作中用到的電路圖以及元器件清單相同。
1.電路
「按鍵與led」電路圖
2.元器件清單
二、一鍵無鎖控制led
即按下led點亮,放手led熄滅。
1.程式設計(3.12.1)
#include //標頭檔案
sbit led=p1^0;//定義led引腳
sbit key=p3^2;//定義按鍵引腳
void main()
while(1)
if(key==0)//判斷按鍵是否按下
led=0;//led點亮
else
led=1;//led熄滅
2.程式解釋
「if(key==0)」注意判斷按鍵是否按下,要用「==」而不是「=」;如果按鍵按下,led點亮,否則熄滅。
「= =」與「=」有什麼區別,如何正確使用。
用「= =」用於判斷語句,而「=」是賦值的含義,比如「led=0;」將「0」賦值
三、一鍵自鎖控制led
按一下led點亮,再按一下led熄滅。
1.程式設計
#include //51標頭檔案
sbit led=p1^0;
sbit key=p3 ^ 2;
void main(void)
while(1)
if(key == 0)//判斷按鍵狀態
led =~led;//變化燈的狀態
2.程式解釋
「~」,取反的符號,如果原來是高電平,取反後就為低電平,原來是低電平取反後就是高電平。通過判斷按鍵狀態,不斷取反操作而實現led狀態變化。
3.c語言基礎知識
按鍵防抖
當按下按鍵時,由於金屬彈片的作用,不能很快閉合穩定,放開時也不能立刻斷開,閉合穩定前後稱為按鍵抖動,消除抖動可以通過程式或者硬體電路實現,通常通過程式完成。
按鍵抖動
如何用程式來實現呢?從上圖中可以看出,當檢測到按鍵狀態變化,先延時一段時間(一般為10~20ms),繞開不穩定狀態(前沿抖動),然後再檢測一次按鍵狀態,如果與前面檢測的狀態相同,說明已經進入「閉合穩定」。
4.改進程式
#include //標頭檔案
sbit led=p1^0;
sbit key=p3 ^ 2;
void delay(unsigned int a)
unsigned int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
void main()
while(1)
if(key == 0)//判斷按鍵狀態
delay(20);//延時20ms
if(key == 0)//再次判斷按鍵狀態
led =~led;//變化燈的狀態
while(key == 0);//等待按鍵鬆開
解釋:兩次檢測按鍵狀態,確保按鍵真正按下。按鍵消除抖動程式非常重要,在設計按鍵控制的電路中,一定要加上消除抖動程式。「while(key==0);」該條語句是等待按鍵釋放,檢測到按鍵釋放後,跳出迴圈體。
如何在程式中延時
方法一 使用sleep函式,如延時2秒,用sleep 2000 方法二 使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題 coledatetime start time...
如何在C 中編寫多執行緒應用程式
以前在使用vb來實現多執行緒的時候,發現有一定的難度。雖然也有這樣那樣的方法,但都不盡人意,但在c 中,要編寫多執行緒應用程式卻相當的簡單。這篇文章將作簡要的介紹,以起到拋磚引玉的作用!net將關於多執行緒的功能定義在system.threading名字空間中。因此,要使用多執行緒,必須先宣告引用此...
如何在C 中呼叫C程式
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...