51單片機玩轉物聯網基礎篇03-獨立按鍵

前言

上一節,我們完成了51單片機控制LED燈,並實現流水燈效果,本節我們學習操作獨立按鍵,並通過兩個按鍵,分別打開和關閉所有LED燈,按鍵作為輸入設備,在系統開發過程中十分常見,一般來說,按鍵可以設置系統參數、控制系統運行狀態。

一、基礎知識

1.按鍵簡介

通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,電壓信號會發生變化,常見的按鍵開關如下圖所示,其中A端引腳在同側,默認斷開,B端引腳在不在同側,默認導通,當按鍵按下時,A端導通,B端斷開。

51單片機玩轉物聯網基礎篇03-獨立按鍵

此類開關,按下時候通常不會立刻導通,開和關的瞬間伴有一連串抖動,一般為5ms到10ms,具體抖動時間由按鍵機械特性決定,抖動過程如下圖所示:

51單片機玩轉物聯網基礎篇03-獨立按鍵

為了解決這個問題,通常可以採用硬件消抖和軟件消抖兩種方式,硬件消抖原理是利用電容平波,再經過施密特反相器整形之後就得到了沒有毛刺的脈衝波,大多數實際項目中為了節約成本,通常採用軟件濾波方式,軟件濾波一般採用延時方式處理,當首次檢測到按鍵按下時,軟件延時10ms左右時間,然後再次查看按鍵狀態,如果還是按下則認為有按鍵按下。

2.按鍵檢測原理

簡單的獨立按鍵連接電路原理圖如下所示

51單片機玩轉物聯網基礎篇03-獨立按鍵

獨立按鍵電路中,按鍵一邊接GND,另一邊接到單片機IO口上,當按鍵按下時候,按鍵兩邊1和2導通,單片機P2.5引腳直接連接GND,電平為低電平,所以只需要讓單片機不斷的檢測P2.5引腳的I/O口是否為低電平,一旦程序檢測到I/O口引腳變為低電平說明按鍵按下了。

3.開發板按鍵硬件電路

實驗使用開發板獨立按鍵部分原理圖如下,K1、K2、K3、K4四個按鍵一端引腳均接地,另一端接到單片機不同I/O口,可以根據不同I/O口的電平檢測按鍵是否按下。

51單片機玩轉物聯網基礎篇03-獨立按鍵

二、實例

1.創建工程

將上一節工程複製出來,並修改名字為02-key

51單片機玩轉物聯網基礎篇03-獨立按鍵

2.程序修改

<code>w 
sbit key1 = P2^

4

; sbit key2 = P2^

5

;

unsigned

char

val =

0

;

void

delay_ms

(

int

ms)

{

int

i =

0

, j =

0

;

for

(i = ms; i >

0

; i--) {

for

(j =

110

; j >

0

; j--); } }

int

main

(

void

)

{

while

(

1

) {

if

(

0

== key1 ||

0

== key2) { delay_ms(

10

);

if

(

0

== key1) { P1 =

0x00

; }

if

(

0

== key2) { P1 =

0xFF

; } } delay_ms(

5

); } }/<code>

程序中檢測KEY1和KEY2的狀態,當按下KEY1時候,點亮LED3-LED10 8個LED燈,KEY2按鍵按下時候,熄滅LED3-LED10。

三、運行

編譯代碼後,按照第一節內容,將生成的project.hex文件下載到板子中,按下KEY1時候,效果如下圖所示:

51單片機玩轉物聯網基礎篇03-獨立按鍵

點擊KEY2時候,燈熄滅,由於比較簡單,就不放圖了。

一葉孤沙出品:一沙一世界,一葉一菩提

硬件獲取:某寶搜小驛物聯


分享到:


相關文章: