RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C51單片機(jī)獨(dú)立按鍵的使用

CHANBAEK ? 來源:Zi Jin Code ? 作者:錕醬不是醬 ? 2023-11-01 11:34 ? 次閱讀

前面我們簡(jiǎn)單的學(xué)習(xí)了C51的IO結(jié)構(gòu),現(xiàn)在我們來看看,準(zhǔn)雙向IO口如何使用按鍵輸入

圖片

這是準(zhǔn)雙向IO的基本結(jié)構(gòu),單片機(jī)就靠?jī)?nèi)部輸入線來讀取IO的電平狀態(tài)。

我們以這個(gè)電路分析準(zhǔn)雙向IO上的按鍵使用

圖片

在準(zhǔn)雙向口中,我們需要先給IO寫高電平才能去讀取IO的電平變化(高->低)

在寫高電平的情況下……

三極管截止

圖片

沒有按下按鍵,電流由正極經(jīng)過上拉電阻流到內(nèi)部輸入線路,這時(shí)候內(nèi)部讀出高電平

圖片

這時(shí)候按下按鍵,按下按鍵,電流由VCC流經(jīng)上拉電阻再流經(jīng)按鍵最后流向GND。由于電流由正極流向負(fù)極。內(nèi)部輸入線路線路的電流流向負(fù)極,這時(shí)候讀出的數(shù)值就是低電平的

如果我們寫IO是低電平的話,三極管始終導(dǎo)通,內(nèi)部輸入的電流經(jīng)過三極管接到負(fù)極,這時(shí)候無論有沒有按下按鍵,都只能讀出低電平

圖片

圖片

按鍵的電路

圖片

我們使用的開發(fā)板有四個(gè)獨(dú)立按鍵,這四個(gè)獨(dú)立按鍵接在P3.2 - P3.4

我們使用單片機(jī)準(zhǔn)雙向IO提供的IO內(nèi)部的上拉電阻,所以不需要外部上拉電阻

首先,需要使用sbit定義我們的按鍵所連接的IO

sbit KEY = P3^4;

接下來,給這個(gè)按鍵所屬的IO寫高電平

KEY = 1;

讀取按鍵按下的代碼

if(KEY == 0)
{
  unsigned char a = 550;
  while(a--);//延遲消抖
  if(KEY == 0)
    {
    while(!KEY);//檢測(cè)按鍵是否松開,防止連按
    
    //這里是你的要放下按鍵按下后執(zhí)行的代碼

    }
}

這里需要說明一下

if(KEY == 0)用于讀取按鍵是否按下按鍵,讀取方式直接用KEY == 0,KEY == 1直接讀取這一位IO寄存器值。

當(dāng)我們第一次讀取之后,還需要延遲一會(huì)再次讀取按鍵,我們把這個(gè)過程稱為延遲消抖

這是因?yàn)槲覀兪褂玫陌存I是物理按鍵,內(nèi)部的簡(jiǎn)化結(jié)構(gòu)如圖

圖片

按鍵上面有一個(gè)彈片,按下按鍵彈片后觸點(diǎn)接觸,按鍵導(dǎo)通,松開按鍵,彈片回彈,按鍵斷開,電壓的變化總是高電平》低電平》高電平

上面描述的是理想狀態(tài),但是實(shí)際上,物理按鍵并不像我們想象如此理想,當(dāng)我們按下按鍵的時(shí)候,按鍵的彈片會(huì)發(fā)生震動(dòng),導(dǎo)致電壓會(huì)有一定的抖動(dòng)幅度

圖片

這些幅度的抖動(dòng)會(huì)影響單片機(jī)對(duì)按鍵的讀取和識(shí)別

我們可以用硬件電路消抖,下面展示一個(gè)簡(jiǎn)單的硬件消抖電路

圖片

在這個(gè)電路里面,一顆0.1u的電容用于消除抖動(dòng),電容充放電實(shí)現(xiàn)消抖的效果

那么為什么不使用上面的電路實(shí)現(xiàn)消抖呢??

答案很簡(jiǎn)單——成本高嘛

所以我們使用軟件消抖

if(KEY == 0)
{
  unsigned char a = 550;
  while(a--);//延遲消抖
  if(KEY == 0)
    {
    while(!KEY);//檢測(cè)按鍵是否松開,防止連按

    //這里是你的要放下按鍵按下后執(zhí)行的代碼

    }
}

單片機(jī)先讀取按鍵引腳的電平,軟件延遲后再次讀取后再次讀取按鍵的電平,如果還是按下的狀態(tài),那么就開始等待按鍵松開,等待按鍵松開是必要的,如果不等待按鍵松開,可能我們按下按鍵久一點(diǎn)按鍵就變成多次連按了

那么下面就是一個(gè)簡(jiǎn)單的項(xiàng)目,按鍵開關(guān)LED

/*
按鍵學(xué)習(xí)
按鍵按下,LED實(shí)現(xiàn)開關(guān)


青青子衿工作室
Zi Jin Code
*/
#include < reg52.h >


sbit LED = P1^0;
sbit KEY = P3^3;


void main()
{
  KEY = 1;//使用按鍵之前,對(duì)應(yīng)的引腳寫高電平
  LED = 1;
  while(1)
  {
    if(KEY == 0)
    {
      unsigned int a = 550;
      while(a--);//延遲消抖
      if(KEY == 0)//再次檢測(cè)...
      {
        while(!KEY){}//檢測(cè)按鍵是否松開
        LED = !LED;//LED狀態(tài)取反
      }
    }
  }
}

編譯并且上傳程序,測(cè)試

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 三極管
    +關(guān)注

    關(guān)注

    142

    文章

    3607

    瀏覽量

    121823
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6034

    文章

    44541

    瀏覽量

    634133
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    107918
  • C51單片機(jī)
    +關(guān)注

    關(guān)注

    12

    文章

    164

    瀏覽量

    34750
  • 獨(dú)立按鍵
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    11551
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    學(xué)習(xí)C51單片機(jī)按鍵移位

    今天開始學(xué)習(xí)C51單片機(jī)按鍵移位實(shí)驗(yàn)實(shí)驗(yàn)所用的是LED和獨(dú)立按鍵首先講光盤給的案例代碼給出
    發(fā)表于 12-01 06:19

    C51單片機(jī)實(shí)現(xiàn)獨(dú)立按鍵點(diǎn)亮LED燈

    :stc-isp-15xx-v6.85H.exe驅(qū)動(dòng):ch341ser(適用于win10操作系統(tǒng))實(shí)驗(yàn)部分1、C51單片機(jī)實(shí)現(xiàn)流水燈實(shí)驗(yàn)2、美化你的流水燈(自加)3、C51單片機(jī)實(shí)現(xiàn)蜂
    發(fā)表于 12-13 06:37

    單片機(jī)C51編程規(guī)范

    單片機(jī)C51編程規(guī)范 1單片機(jī)C51編程規(guī)范- 前言   為了提高源程序的質(zhì)量和可維護(hù)性,從而最終提高軟件產(chǎn)品生產(chǎn)力,特編寫此規(guī)范。
    發(fā)表于 01-14 21:03 ?2568次閱讀

    單片機(jī)基礎(chǔ)知識(shí)C51

    單片機(jī)基礎(chǔ)知識(shí)C51版,學(xué)習(xí)單片機(jī)的基礎(chǔ)知識(shí)。包括單片機(jī)的簡(jiǎn)介,單片機(jī)的程序如何寫,單片機(jī)的應(yīng)用
    發(fā)表于 11-18 16:48 ?0次下載

    獨(dú)立按鍵依次輸入數(shù)據(jù)

    獨(dú)立按鍵依次輸入數(shù)據(jù) C51單片機(jī)源碼,KEIL源文件,C語言編寫
    發(fā)表于 06-20 16:36 ?17次下載

    C51單片機(jī)精典教程

    C51單片機(jī)精典教程.pdf
    發(fā)表于 12-16 15:44 ?24次下載

    c51單片機(jī)溫測(cè)

    電子發(fā)燒友網(wǎng)站提供《c51單片機(jī)溫測(cè).docx》資料免費(fèi)下載
    發(fā)表于 05-26 08:00 ?21次下載

    51單片機(jī)獨(dú)立按鍵程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)獨(dú)立按鍵程序免費(fèi)下載。
    發(fā)表于 06-20 17:43 ?7次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>獨(dú)立</b><b class='flag-5'>按鍵</b>程序免費(fèi)下載

    C51單片機(jī)流水燈C代碼

    C51單片機(jī)流水燈C代碼
    發(fā)表于 11-05 15:20 ?34次下載
    <b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b>流水燈<b class='flag-5'>C</b>代碼

    單片機(jī)按鍵使用程序 (51單片機(jī)

    單片機(jī)獨(dú)立按鍵使用程序 (51單片機(jī)獨(dú)立按鍵
    發(fā)表于 11-11 18:36 ?108次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>按鍵</b>使用程序 (<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>)

    C51單片機(jī)學(xué)習(xí)筆記(三)——按鍵對(duì)燈、蜂鳴器等器件的控制

    C51單片機(jī)學(xué)習(xí)筆記(三)——按鍵對(duì)燈、蜂鳴器等器件的控制文章目錄C51單片機(jī)學(xué)習(xí)筆記(三)——按鍵
    發(fā)表于 11-14 13:21 ?25次下載
    <b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b>學(xué)習(xí)筆記(三)——<b class='flag-5'>按鍵</b>對(duì)燈、蜂鳴器等器件的控制

    51單片機(jī)(V51)———獨(dú)立按鍵、4x4矩陣按鍵

    51單片機(jī)(V51)———獨(dú)立按鍵、4x4矩陣按鍵
    發(fā)表于 11-16 17:36 ?26次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(V<b class='flag-5'>51</b>)———<b class='flag-5'>獨(dú)立</b><b class='flag-5'>按鍵</b>、4x4矩陣<b class='flag-5'>按鍵</b>

    C51單片機(jī)C52單片機(jī)內(nèi)部的資源區(qū)別

    C52單片機(jī)可以理解為是C51單片機(jī)的增強(qiáng)版? 兩個(gè)方面有差異,存儲(chǔ)空間和定時(shí)器計(jì)數(shù)器方面有區(qū)別 ○ C52
    發(fā)表于 11-19 10:36 ?20次下載
    <b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>C</b>52<b class='flag-5'>單片機(jī)</b>內(nèi)部的資源區(qū)別

    基于89C51單片機(jī)的8位端口檢測(cè)8獨(dú)立按鍵源程序

    基于89C51單片機(jī)的8位端口檢測(cè)8獨(dú)立按鍵源程序
    發(fā)表于 05-16 10:49 ?1次下載

    基于89C51單片機(jī)獨(dú)立按鍵依次輸入數(shù)據(jù)源程序

    基于89C51單片機(jī)獨(dú)立按鍵依次輸入數(shù)據(jù)源程序
    發(fā)表于 05-16 09:12 ?0次下載
    RM新时代网站-首页