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
    +关注

    关注

    237

    文章

    22450

    浏览量

    645891
  • 单片机
    +关注

    关注

    6001

    文章

    43978

    浏览量

    620869
  • 抖动
    +关注

    关注

    1

    文章

    66

    浏览量

    18699
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • 按键开关
    +关注

    关注

    2

    文章

    34

    浏览量

    10268
收藏 人收藏

    评论

    相关推荐

    STM32按键控制LED的亮灭

    使用一个按键控制LED的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过
    的头像 发表于 12-11 14:19 2044次阅读
    STM32<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b>的亮灭

    单个按键控制LED亮灭

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

    Arduino 按键控制LED实验

    按键控制LED亮 灭, 想使用两按键控制亮灭,控制
    发表于 12-19 17:20

    实现按键控制LED

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

    如何使用库函数的方法用按键控制LED的取反?

    如何使用库函数的方法用按键控制LED的取反?
    发表于 11-25 08:52

    如何利用Stduino通过按键控制LED亮灭

    2020/01/06 星期作者:Astilbe问题:如何利用Stduino通过按键控制LED亮灭。我们已经学习过怎么点亮
    发表于 01-05 07:52

    单片机实现独立按键控制Led

    单片机零基础入门(5):实现独立按键控制Led、需求如下:二、需求分析:三、源代码:四、解释:、需求如下:独立
    发表于 01-06 08:06

    独立按键按键控制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和蜂鸣器?什么叫上\下拉电阻呢?Static有哪些用途?
    发表于 01-18 07:41

    如何实现按键控制LED

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

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

    标记的用法,用一个按键控制1个LED灯的亮灭,按键去抖 这一课,我们学习怎么用一个按键K1控制1个LE
    发表于 08-09 10:39 2.3w次阅读
    标记的用法,用一个<b class='flag-5'>按键控制</b>1个<b class='flag-5'>LED</b>灯的亮灭,<b class='flag-5'>按键</b>去抖

    单片机 多个按键控制多个led亮灭

    单片机 按键控制led亮灭初始状态按下k1按下k2按下剩余按键再按下k1按下剩余按键代码如下#include <reg52.h>void delay(unsigned
    发表于 11-23 16:20 45次下载
    单片机 <b class='flag-5'>多个</b><b class='flag-5'>按键控制</b><b class='flag-5'>多个</b><b class='flag-5'>led</b>亮灭

    基于stm32的按键控制led亮灭

    基于stm32的按键控制led亮灭资料文件分享
    发表于 09-21 15:50 32次下载

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

    两个按键控制8位LED灯。
    的头像 发表于 08-16 09:35 1221次阅读