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

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

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

一個按鍵控制多個LED燈

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

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

1.第一個按鍵:按下一次,LED1亮,再次按下LED1滅

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

3.第三個按鍵:按下所有LED滅

4.第四個按鍵:按下所有LED都亮了

四個基礎(chǔ)練習(xí)的效果動圖

按鍵抖動的原因和危害,軟件消抖

按鍵開關(guān)通常為機(jī)械式開關(guān),因為機(jī)械觸點有彈性。 在閉合和斷開的瞬間都會伴隨彈性抖動。 抖動時間: 一般為5ms~10ms

按鍵的抖動對于人類來說是感覺不到的,但對單片機(jī)來說,是一個很“漫長”的過程,因為單片機(jī)處理的速度在“微秒”級,而按鍵抖動的時間至少在“毫秒”級

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

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

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

截圖20230301181746.png

一個按鍵控制多個LED燈

按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往復(fù)。 利用C語言的取模運算符,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按鍵抬起時,變量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個LED燈全熄滅

P0口為高電平時LED熄滅,低電平全亮

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

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

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

補充

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

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

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

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

    關(guān)注

    242

    文章

    23296

    瀏覽量

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

    關(guān)注

    6037

    文章

    44562

    瀏覽量

    635911
  • 抖動
    +關(guān)注

    關(guān)注

    1

    文章

    69

    瀏覽量

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

    關(guān)注

    3

    文章

    4333

    瀏覽量

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

    關(guān)注

    2

    文章

    36

    瀏覽量

    10405
收藏 人收藏

    評論

    相關(guān)推薦

    STM32按鍵控制LED的亮滅

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

    單個按鍵控制LED亮滅

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

    實現(xiàn)按鍵控制LED

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

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

    藍(lán)橋杯單片機(jī)學(xué)習(xí)過程記錄(二)獨立按鍵按鍵控制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

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

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

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

    標(biāo)記的用法,用按鍵控制1LED的亮滅,按鍵
    發(fā)表于 08-09 10:39 ?2.4w次閱讀
    標(biāo)記的用法,用<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>按鍵控制</b>1<b class='flag-5'>個</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ī)仿真實現(xiàn)按鍵控制LED排的亮滅,壓縮包中有程序和電路圖。
    發(fā)表于 07-04 15:25 ?3次下載

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

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

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

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

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

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

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

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

    stm32按鍵控制led亮滅

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