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

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

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

一個(gè)按鍵控制多個(gè)LED燈

CHANBAEK ? 來源:頭條號(hào)電子秘探 ? 作者:頭條號(hào)電子秘探 ? 2023-03-24 15:41 ? 次閱讀

通過四個(gè)基礎(chǔ)練習(xí)學(xué)習(xí)按鍵開關(guān)

1.第一個(gè)按鍵:按下一次,LED1亮,再次按下LED1滅

2.第二個(gè)按鍵:按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往復(fù)。

3.第三個(gè)按鍵:按下所有LED滅

4.第四個(gè)按鍵:按下所有LED都亮了

四個(gè)基礎(chǔ)練習(xí)的效果動(dòng)圖

按鍵抖動(dòng)的原因和危害,軟件消抖

按鍵開關(guān)通常為機(jī)械式開關(guān),因?yàn)闄C(jī)械觸點(diǎn)有彈性。 在閉合和斷開的瞬間都會(huì)伴隨彈性抖動(dòng)。 抖動(dòng)時(shí)間: 一般為5ms~10ms

按鍵的抖動(dòng)對(duì)于人類來說是感覺不到的,但對(duì)單片機(jī)來說,是一個(gè)很“漫長(zhǎng)”的過程,因?yàn)閱纹瑱C(jī)處理的速度在“微秒”級(jí),而按鍵抖動(dòng)的時(shí)間至少在“毫秒”級(jí)

軟件消抖的方法是不斷檢測(cè)按鍵值,直到按鍵值穩(wěn)定。

實(shí)現(xiàn)方法:假設(shè)未按鍵時(shí)輸入為1,按鍵后輸入為0,抖動(dòng)時(shí)不確定。 可以做以下檢測(cè):檢測(cè)到按鍵輸入為0之后,延時(shí)5ms~10ms,再次檢測(cè),如果按鍵還為0,那么就認(rèn)為有按鍵輸入。 延時(shí)的5ms~10ms恰好避開了抖動(dòng)期。

if(0==BUTTON1)//判斷是否有按鍵按下
        {   
            delay(10); //延時(shí)一段時(shí)間(10ms)去除前沿抖動(dòng)
            if(0==BUTTON1)//再次確認(rèn)是否有按鍵按下
            {
                while(0==BUTTON1);//按鍵抬起繼續(xù)往下執(zhí)行,沒有則繼續(xù)等待
                LED1 = ~LED1;   //按下一次,LED1亮,再次按下LED1滅 
        }

截圖20230301181746.png

一個(gè)按鍵控制多個(gè)LED燈

按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往復(fù)。 利用C語(yǔ)言的取模運(yùn)算符,1%4 = 1 , 2%4=2 , 3%4=3 , 4%4=0 , 5%4=1 , 6%4=2...

//定義全局變量count,a
if(0==BUTTON2)
        {   
            delay(10);//延遲10ms
            if(0==BUTTON2)
            {
                while(!BUTTON2);//按鍵抬起繼續(xù)往下執(zhí)行,沒有則繼續(xù)等待
                count++;//每按下BUTTON2按鍵抬起時(shí),變量count加1
               
                a = count%4;
                switch(a)
                {
                    case 1:
                    P0= 0xfe; //11111110    LED1亮
                    break;
                    case 2:
                    P0= 0xfd;//11111101    LED2亮
                    break;
                    case 3:
                    P0= 0xfb; //11111011   LED3亮
                    break;
                    case 0:
                    P0=0xf7;//11110111    LED4亮
                    break;
                    default :
                    P0=0xff;
                    break;
                }
           
            }   
        }

按下4個(gè)LED燈全熄滅

P0口為高電平時(shí)LED熄滅,低電平全亮

if(0==BUTTON3)
        {   
            delay(10);
            if(0==BUTTON3)
            {
                while(0==BUTTON3);
                P0 = 0xff;  //P0 = 0x00 全亮
            }
        }

把四個(gè)練習(xí)封裝成函數(shù)

void main()
{ 
    while(1)
    {
          task1();
          task2();
          task3();
          task4();
    } 
}

補(bǔ)充

#define u16 unsigned int 等效于typedef unsigned int u16;

#define u8 unsigned char 等效于typedef unsigned char u8;

為什么要這樣定義,這樣寫非常直觀,不用擔(dān)心平臺(tái)的不同可移植性好,它的字節(jié)數(shù)一看就知道,u16是16位2個(gè)字節(jié),

聲明:本文內(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)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    23004

    瀏覽量

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

    關(guān)注

    6026

    文章

    44460

    瀏覽量

    631220
  • 抖動(dòng)
    +關(guān)注

    關(guān)注

    1

    文章

    68

    瀏覽量

    18834
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4263

    瀏覽量

    62250
  • 按鍵開關(guān)
    +關(guān)注

    關(guān)注

    2

    文章

    36

    瀏覽量

    10369
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32按鍵控制LED的亮滅

    使用個(gè)按鍵控制LED的亮滅,按鍵按下時(shí)LED亮起,按鍵
    的頭像 發(fā)表于 12-11 14:19 ?3373次閱讀
    STM32<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b>的亮滅

    單個(gè)按鍵控制個(gè)LED亮滅

    單個(gè)按鍵控制個(gè)LED亮滅PCB打樣找華強(qiáng) http://www.hqpcb.com 樣板2天出貨
    發(fā)表于 07-28 16:24

    實(shí)現(xiàn)個(gè)按鍵控制個(gè)LED

    本文說明項(xiàng)目功能實(shí)現(xiàn)個(gè)按鍵控制個(gè)LED在兩個(gè)
    發(fā)表于 08-17 09:00

    獨(dú)立按鍵按鍵控制led學(xué)習(xí)過程記錄

    藍(lán)橋杯單片機(jī)學(xué)習(xí)過程記錄(二)獨(dú)立按鍵按鍵控制led按鍵控制流水燈按鍵控制
    發(fā)表于 01-06 08:16

    Stduino Nano按鍵控制LED

    關(guān)鍵詞:stm32 小藍(lán)板 STM32F103C8T6 Stduino IDE Stduino Nano 按鍵控制LED通過Stduino IDE 開發(fā)STM32小藍(lán)板,按鍵控制板載
    發(fā)表于 01-10 07:35

    如何實(shí)現(xiàn)按鍵控制LED?

    編程的要點(diǎn)是什么?如何實(shí)現(xiàn)按鍵控制LED?
    發(fā)表于 01-26 08:04

    標(biāo)記的用法,用個(gè)按鍵控制1個(gè)LED的亮滅,按鍵去抖

    標(biāo)記的用法,用個(gè)按鍵控制1個(gè)LED的亮滅,按鍵
    發(fā)表于 08-09 10:39 ?2.4w次閱讀
    標(biāo)記的用法,用<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>按鍵控制</b>1<b class='flag-5'>個(gè)</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>的亮滅,<b class='flag-5'>按鍵</b>去抖

    按鍵控制花樣【匯編版】

    按鍵控制花樣【匯編版】按鍵控制花樣【匯編版】按鍵控制花樣【匯編版】
    發(fā)表于 12-29 11:04 ?0次下載

    51單片機(jī)通過按鍵控制LED閃爍

    51單片機(jī)通過按鍵控制LED閃爍
    發(fā)表于 11-11 18:36 ?122次下載
    51單片機(jī)通過<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>閃爍

    按鍵控制LED

    基于51單片機(jī)仿真實(shí)現(xiàn)按鍵控制LED排的亮滅,壓縮包中有程序和電路圖。
    發(fā)表于 07-04 15:25 ?3次下載

    設(shè)計(jì)分享|74LS148實(shí)現(xiàn)按鍵控制LED

    74LS148實(shí)現(xiàn)按鍵控制LED。
    的頭像 發(fā)表于 01-04 09:21 ?3518次閱讀

    如何用按鍵控制不同的LED流轉(zhuǎn)模式?

    實(shí)現(xiàn)的任務(wù)就是用LCD做一個(gè)菜單,用按鍵控制不同的LED流轉(zhuǎn)模式。
    發(fā)表于 07-26 16:53 ?637次閱讀
    如何用<b class='flag-5'>按鍵控制</b>不同的<b class='flag-5'>LED</b>流轉(zhuǎn)模式?

    基于單片機(jī)按鍵控制多個(gè)LED

    個(gè)按鍵控制8位LED。
    的頭像 發(fā)表于 08-16 09:35 ?1831次閱讀

    單片機(jī)獨(dú)立按鍵控制led程序

    單片機(jī)獨(dú)立按鍵控制LED程序 單片機(jī)獨(dú)立按鍵控制LED程序是
    的頭像 發(fā)表于 09-02 17:05 ?4356次閱讀

    stm32按鍵控制led亮滅

    stm32按鍵控制led亮滅? 在嵌入式系統(tǒng)中,硬件按鍵常常被用作開關(guān)輸入,控制LED
    的頭像 發(fā)表于 09-02 17:05 ?1w次閱讀