c語言延時程式 如何在程式中編寫按鍵的控制語句呢?

2021-10-11 07:12:01 字數 1791 閱讀 4319

按鍵即微動開關,本身不能自鎖。今天我們通過三個程式舉例如何在程式中編寫按鍵控制語句。

一、三個製作中用到的電路圖以及元器件清單相同。

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 然後在呼叫這些函式之...