0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个按键控制多个LED灯

CHANBAEK 来源:头条号电子秘探 作者:头条号电子秘探 2023-03-24 15:41 次阅读

通过四个基础练习学习按键开关

1.第一个按键:按下一次,LED1亮,再次按下LED1灭

2.第二个按键:按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往复。

3.第三个按键:按下所有LED灭

4.第四个按键:按下所有LED都亮了

四个基础练习的效果动图

按键抖动的原因和危害,软件消抖

按键开关通常为机械式开关,因为机械触点有弹性。 在闭合和断开的瞬间都会伴随弹性抖动。 抖动时间: 一般为5ms~10ms

按键的抖动对于人类来说是感觉不到的,但对单片机来说,是一个很“漫长”的过程,因为单片机处理的速度在“微秒”级,而按键抖动的时间至少在“毫秒”级

软件消抖的方法是不断检测按键值,直到按键值稳定。

实现方法:假设未按键时输入为1,按键后输入为0,抖动时不确定。 可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。 延时的5ms~10ms恰好避开了抖动期。

if(0==BUTTON1)//判断是否有按键按下
        {   
            delay(10); //延时一段时间(10ms)去除前沿抖动
            if(0==BUTTON1)//再次确认是否有按键按下
            {
                while(0==BUTTON1);//按键抬起继续往下执行,没有则继续等待
                LED1 = ~LED1;   //按下一次,LED1亮,再次按下LED1灭 
        }

截图20230301181746.png

一个按键控制多个LED灯

按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往复。 利用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);//按键抬起继续往下执行,没有则继续等待
                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 全亮
            }
        }

把四个练习封装成函数

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

补充

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

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

为什么要这样定义,这样写非常直观,不用担心平台的不同可移植性好,它的字节数一看就知道,u16是16位2个字节,

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23277

    浏览量

    660831
  • 单片机
    +关注

    关注

    6037

    文章

    44558

    浏览量

    635192
  • 抖动
    +关注

    关注

    1

    文章

    69

    浏览量

    18860
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62604
  • 按键开关
    +关注

    关注

    2

    文章

    36

    浏览量

    10401
收藏 人收藏

    评论

    相关推荐

    STM32按键控制LED的亮灭

    使用按键控制LED的亮灭,按键按下时LED亮起,按键
    的头像 发表于 12-11 14:19 3821次阅读
    STM32<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b>的亮灭

    单个按键控制LED亮灭

    单个按键控制LED亮灭PCB打样找华强 http://www.hqpcb.com 样板2天出货
    发表于 07-28 16:24

    实现按键控制LED

    本文说明项目功能实现按键控制LED在两
    发表于 08-17 09:00

    独立按键按键控制led学习过程记录

    蓝桥杯单片机学习过程记录(二)独立按键按键控制led按键控制流水灯按键控制
    发表于 01-06 08:16

    Stduino Nano按键控制LED

    关键词:stm32 小蓝板 STM32F103C8T6 Stduino IDE Stduino Nano 按键控制LED通过Stduino IDE 开发STM32小蓝板,按键控制板载
    发表于 01-10 07:35

    如何实现按键控制LED

    编程的要点是什么?如何实现按键控制LED
    发表于 01-26 08:04

    标记的用法,用按键控制1LED的亮灭,按键去抖

    标记的用法,用按键控制1LED的亮灭,按键
    发表于 08-09 10:39 2.4w次阅读
    标记的用法,用<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>去抖

    按键控制花样【汇编版】

    按键控制花样【汇编版】按键控制花样【汇编版】按键控制花样【汇编版】
    发表于 12-29 11:04 0次下载

    51单片机通过按键控制LED闪烁

    51单片机通过按键控制LED闪烁
    发表于 11-11 18:36 122次下载
    51单片机通过<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>闪烁

    按键控制LED

    基于51单片机仿真实现按键控制LED排的亮灭,压缩包中有程序和电路图。
    发表于 07-04 15:25 3次下载

    设计分享|74LS148实现按键控制LED

    74LS148实现按键控制LED
    的头像 发表于 01-04 09:21 3866次阅读

    如何用按键控制不同的LED流转模式?

    实现的任务就是用LCD做一个菜单,用按键控制不同的LED流转模式。
    发表于 07-26 16:53 685次阅读
    如何用<b class='flag-5'>按键控制</b>不同的<b class='flag-5'>LED</b>流转模式?

    基于单片机按键控制多个LED

    按键控制8位LED
    的头像 发表于 08-16 09:35 1962次阅读

    单片机独立按键控制led程序

    单片机独立按键控制LED程序 单片机独立按键控制LED程序是
    的头像 发表于 09-02 17:05 4588次阅读

    stm32按键控制led亮灭

    stm32按键控制led亮灭  在嵌入式系统中,硬件按键常常被用作开关输入,控制LED
    的头像 发表于 09-02 17:05 1.1w次阅读