《嵌入式成長系列之51單片機 — 按鍵》
!
🔥小龍報:個人主頁 🎬作者簡介:C++研發,嵌入式,機器人方向學習者
❄️個人專欄:《工科必裝軟件安裝教程》《嵌入式的開端 ---- 51單片機》✨ 永遠相信美好的事情即將發生
文章目錄
- 《嵌入式成長系列之51單片機 --- 按鍵》
- 前言
- 一、應用場景
- 二、點燈原理
- 三、電平
- 四、按鍵值讀取
- 四、按鍵去抖
- 總結與每日勵志
前言
本文討論了按鍵的應用場景、原理、按鍵值讀取和按鍵去抖等內容。
一、應用場景
輕觸開關、按鍵、電容開關、光柵傳感器、微動、關電開關
二、點燈原理
輕觸按鍵可以理解為兩根導線,按下時導線連接,鬆開時導線斷開。我們可以看下原理圖:
按鍵按下時,引腳會被連接到GND,這時候引腳是低電平,按鍵鬆開時,引腳會被上拉到電源,這時候引腳會變成高電平,那我們就可以通過讀取引腳的電平變化,來判斷按鍵是按下還是鬆開了。
三、電平
以TTL電路為例:
TTL電源電壓是3.3V,高電平是2.4V–3.3V,低電平0V–0.8V
按照慣例:使用1來表示高電平,使用0表示低電平
四、按鍵值讀取
看原理圖可知,板卡上有三個按鍵,分別接到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;
}
}
}
四、按鍵去抖
上面的代碼,在實測效果時,有時候我們會發現按下抬起時,燈會變化兩次狀態,其實這是因為按鍵在閉合和斷開時,機械觸點會存在抖動現象,所以需要消抖。
代碼示例:
#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燈狀態切換。針對機械按鍵的抖動問題,提出了延時消抖的解決方案,給出了改進後的穩定代碼實現。最後用勵志語句鼓勵讀者在嵌入式開發領域持續學習進步。文章配有清晰原理圖及示例代碼,適合單片機初學者學習基礎按鍵處理技術。 。