《嵌入式成長系列之51單片機 — 按鍵》

!

《嵌入式成長系列之51單片機 --- 按鍵》_#c語言

🔥小龍報:個人主頁 🎬作者簡介:C++研發,嵌入式,機器人方向學習者
❄️個人專欄:《工科必裝軟件安裝教程》《嵌入式的開端 ---- 51單片機》✨ 永遠相信美好的事情即將發生

《嵌入式成長系列之51單片機 --- 按鍵》_#嵌入式硬件_02

文章目錄

  • 《嵌入式成長系列之51單片機 --- 按鍵》
  • 前言
  • 一、應用場景
  • 二、點燈原理
  • 三、電平
  • 四、按鍵值讀取
  • 四、按鍵去抖
  • 總結與每日勵志

前言

本文討論了按鍵的應用場景、原理、按鍵值讀取和按鍵去抖等內容。

一、應用場景

輕觸開關、按鍵、電容開關、光柵傳感器、微動、關電開關

《嵌入式成長系列之51單片機 --- 按鍵》_#51單片機_03


《嵌入式成長系列之51單片機 --- 按鍵》_#學習方法_04

二、點燈原理

輕觸按鍵可以理解為兩根導線,按下時導線連接,鬆開時導線斷開。我們可以看下原理圖:

《嵌入式成長系列之51單片機 --- 按鍵》_#c語言_05


按鍵按下時,引腳會被連接到GND,這時候引腳是低電平,按鍵鬆開時,引腳會被上拉到電源,這時候引腳會變成高電平,那我們就可以通過讀取引腳的電平變化,來判斷按鍵是按下還是鬆開了。

三、電平

以TTL電路為例:
TTL電源電壓是3.3V,高電平是2.4V–3.3V,低電平0V–0.8V
按照慣例:使用1來表示高電平,使用0表示低電平

四、按鍵值讀取

《嵌入式成長系列之51單片機 --- 按鍵》_#51單片機_06


《嵌入式成長系列之51單片機 --- 按鍵》_#c語言_07


《嵌入式成長系列之51單片機 --- 按鍵》_#嵌入式硬件_08


看原理圖可知,板卡上有三個按鍵,分別接到P3.5 P3.6 P3.7三個IO上

代碼示例:

#include <reg52.h>

sbit led1= P2^7;         
sbit key1 = P3^7;

void main()
{
    while(1)
    {
        //當按鍵按下時燈切換
        if(key1 == 0)
        {
            led1= ~led1;
        }
    }                
}

四、按鍵去抖

上面的代碼,在實測效果時,有時候我們會發現按下抬起時,燈會變化兩次狀態,其實這是因為按鍵在閉合和斷開時,機械觸點會存在抖動現象,所以需要消抖。

《嵌入式成長系列之51單片機 --- 按鍵》_#學習方法_09


代碼示例:

#include <reg52.h>

sbit led1=P2^7;         
sbit key1 = P3^7;

//延時ms函數,參數用來改變延時的具體時間
void delay_ms(unsigned int xms)   //@12MHz
{
    unsigned int i, j;
    for(i=xms;i>0;i--)
    {
        for(j=124;j>0;j--)
        {}
    }
}

//主函數
void main()
{
    while(1)
    {
        //當按鍵按下時燈切換
        if(key1 == 0)
        {
            delay_ms(10);
            if(key1 == 0){
                led1= ~led1;
                delay_ms(1000);
            }
        }
    }                
}

總結與每日勵志

本文介紹了51單片機中按鍵的應用場景、工作原理及按鍵值讀取方法。重點講解了按鍵通過電平變化檢測狀態(高電平1表示鬆開,低電平0表示按下)的原理,並通過代碼示例演示瞭如何實現按鍵控制LED燈狀態切換。針對機械按鍵的抖動問題,提出了延時消抖的解決方案,給出了改進後的穩定代碼實現。最後用勵志語句鼓勵讀者在嵌入式開發領域持續學習進步。文章配有清晰原理圖及示例代碼,適合單片機初學者學習基礎按鍵處理技術。

《嵌入式成長系列之51單片機 --- 按鍵》_#c語言_10