进阶教程:单片机独立按键,分别控制不同的LED点亮流水 代码详解

时间:2023-03-27来源:佚名

大家好,小伙伴们通过以上几篇文章的学习,我相信已经对于单片机控制LED流水的项目已经很熟悉了吧,其实还可以尝试着改一些代码实现花样流水地效果,感兴趣的小伙伴可以试一下,此处不再赘述。

我们言归正传继续说回我们今天的实验项目,单片机的独立按键控制流水灯点亮,其实这个只比上一个实验复杂一点点,上一个实验请移步,就是在流水灯的基础上添加了按键独立控制。及有0~7八个按键及0~7八个LED,当按下按键对应的LED即被点亮。当有规律的不停按下按键时,就会呈现LED花样流水地效果。和上面几篇文章一样,我们同样从软件和硬件的两个角度来为大家讲解一下。

进阶教程:单片机独立按键,分别控制不同的LED点亮流水 代码详解

硬件方面

LED的原理已经说了很多次了,此处不再赘述。

按键的种类其实有很多,但是都大同小异,基本功能是不变的,下面先说一下最简单的也是今天实验中需要的点动开关按键:这种按键工作原理就是你一按下去,就会通电(或实现相应功能),像计算机键盘一样,汽车按键,电话按键一样,一松开就会自动弹起断电。如果一直按下去则会一直生效,直到按键再次弹起。

进阶教程:单片机独立按键,分别控制不同的LED点亮流水 代码详解

单片机关于控制方式和工作原理都不再重复,不明白的小伙伴请自行爬楼或者私信。

有一点我还是要说一下,既然是按键,那就要有人按,这里就涉及到一个误操作的问题,因为误操作往往不是我们想要的,往往会给我们带来损失或者麻烦,为了避免这种情况防止我们误操作,我们需要添加防止误操作的代码,我们单片机上通常叫做消抖,即消除按键抖动。好了,了解完了硬件以后那么我们下面开始讲解软件代码部分。

C语言参考源代码如下:

define uint int //定义类型变量

#define uchar char //宏定义字符型变量

sbit S1 = P3^7; //用P3.7来检测按键是否被按下

sbit S2 = P3^6; sbit S3 = P3^5; sbit S4 = P3^4; sbit S5 = P3^3; sbit S6 = P3^2;

sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3;

sbit LED5 = P2^4; sbit LED6 = P2^5; sbit LED7 = P2^6; sbit LED8 = P2^7;

void delay(uint z);

void main()

{ uchar i;

uint k;

if(S1 == 0) //第一次检测按键被按下

{ delay(8); //延时8ms进行消抖

if(S1 == 0) //再次检测按键被按下,说明确实被按下了

{ for(i=0;i<3;i ) //for循环控制蜂鸣器响3声

{ for(k=0;k<5000;k );//延时500ms

bell = 0; //输出低电平,使蜂鸣器鸣叫

for(k=0;k<10000;k ); //延时500ms

bell = 1; //输出高电平,使蜂鸣器停止 } } }

if(S2 == 0) //第一次检测按键被按下

{ delay(8); //延时8ms进行消抖

if(S2 == 0) //再次检测按键被按下,说明确实被按下了

{ LED1 = 0; //正向流动

delay(500); LED1 = 1; LED2 = 0;

delay(500); LED2 = 1; LED3 = 0;

delay(500); LED3 = 1; LED4 = 0;

delay(500); LED4 = 1; LED5 = 0;

delay(500); LED5 = 1; LED6 = 0;

delay(500); LED6 = 1; LED7 = 0;

delay(500); LED7 = 1; LED8 = 0;

delay(500);LED8 = 1; } }

if(S3 == 0) //第一次检测按键被按下 { delay(8); //延时8ms进行消抖

if(S3 == 0) //再次检测按键被按下,说明确实被按下了

{ LED8 = 0; //反向流动 delay(500);

LED8 = 1; LED7 = 0;

delay(500); LED7 = 1; LED6 = 0; delay(500); LED6 = 1; LED5 = 0;

delay(500); LED5 = 1;LED4 = 0; delay(500); LED4 = 1; LED3 = 0;

delay(500); LED3 = 1; LED2 = 0; delay(500); LED2 = 1; LED1 = 0;

delay(500); LED1 = 1; } }

if(S4 == 0) //第一次检测按键被按下

{ delay(8); //延时8ms进行消抖

if(S4 == 0) //再次检测按键被按下,说明确实被按下了

{ LED1 = 0; //1、3、5、7亮

LED2 = 1; LED3 = 0; LED4 = 1; LED5 = 0; LED6 = 1; LED7 = 0; LED8 = 1; } }

if(S5 == 0) //第一次检测按键被按下

{ delay(8); //延时8ms进行消抖 if(S5 == 0) //再次检测按键被按下,说明确实被按下了

{ LED1 = 1; //2、4、6、8亮

LED2 = 0; LED3 = 1; LED4 = 0; LED5 = 1; LED6 = 0; LED7 = 1; LED8 = 0; } }

if(S6 == 0) //第一次检测按键被按下 { delay(8); //延时8ms进行消抖

if(S6 == 0) //再次检测按键被按下,说明确实被按下了

{ LED1 = 1; //全部灯灭

LED2 = 1; LED3 = 1; LED4 = 1; LED5 = 1; LED6 = 1; LED7 = 1; LED8 = 1; } } }

void delay(uint z)

{ uint x,y; //定义循环变量

for(x=z;x>0;x--) //执行FOR循环语句

for(y=120;y>0;y--); //执行FOR循环语句

}

上述功能是用最基础的编程方法实现的,聪明的你想一想还有其他办法实现吗?通过以上代码,我用PROTEUS仿真图如下:结果8个按键可以分别控制8个LED,实验成功!

进阶教程:单片机独立按键,分别控制不同的LED点亮流水 代码详解

最后如果有什么问题或者建议请给我留言或者私信啊,看到一定第一时间回复,如果你喜欢我的文章,欢迎关注转发评论哦,我们下期再见!

专注基础,从软硬件两个维度,从零开始带你探寻单片机的神秘世界!

    相关阅读

    空调小管(供液管)结霜是什么原因

    空调空调小管(供液管)结霜,常见原因如下: 1、缺冷媒 当空调中缺少冷媒时,极有可能出现空调结霜 现象。解决办法:及时查漏补漏,添加适量的制冷剂,使空调恢复运行。 2、系统...
    2022-12-12
    空调小管(供液管)结霜是什么原因

    空调铜管裸露在外面有什么影响?

    几十年前安装的空调,铜管都是裸露的,没有现在这么讲究,但制冷制热效果一样杠杠的。先抛开“空调用铜管还是铝管好 ”不说,单从使用者的角度来说,将铜管裸露在外是有影响的...
    2022-12-12
    空调铜管裸露在外面有什么影响?

    电风扇不转的四种原因,电风扇不转的处理方法

    在平时使用电风扇时,有时会遇到电风扇不转的问题,那么是什么原因引起的风扇不转,原因有很多种,最常见的电风扇不转的原因就是电容损坏,线路问题,电机故障等,下面就来看...
    2022-12-23
    电风扇不转的四种原因,电风扇不转的处理方法

    空调指示灯亮着会不会费电,一年能费多少度电

    对于空调指示灯亮着会不会费电的问题,会费电,这个不用怀疑。无论哪一种电器设备,哪怕是微小的指示灯,也会是费电的,只是费电量微乎其乎,一年消耗的电量可以忽略不计。...
    2022-12-23
    空调指示灯亮着会不会费电,一年能费多少度电

    小牛电动车怎么解锁限速,6个步骤帮你搞定解限速问题

    有关小牛电动车解限速的方法,可以破解20公里限速的,破解流程不复杂,只要6个步骤就可以搞定,小牛电动车怎么解锁限速,可以来试一试本文给出的解锁限速的方法。 小牛电动车解...
    2022-12-13
    小牛电动车怎么解锁限速,6个步骤帮你搞定解限速问题

    建筑物防雷问题:高层建筑防雷接闪器设计及安装规范

    建筑物防雷问题:高层建筑防雷接闪器设计及安装规范 高层建筑 防雷 接闪器设计及安装规范 雷电是一种强度极大、作用时间极短的瞬变过程。雷电流击中建筑物时,通常会产生电效应...
    2022-12-21
    建筑物防雷问题:高层建筑防雷接闪器设计及安装规范

    2022年格力大一匹空调移机多少钱

    格力大一匹空调移机费用 大一匹的格力空调一般是1.5匹的,2022年1.5匹和1.5匹以下的空调移机费用: 1、普通移机费用150元1台,只拆不装和单装是100元1台; 2、2楼以下无高空费,2楼-5楼...
    2022-12-12
    2022年格力大一匹空调移机多少钱

    空调开冷气时温度越低会不会越费电

    家里买了空调,在夏天用的时候较多,即空调制冷比制热的时间要多一些,那么空调开冷气时温度越低越费电吗,空调开度28度与22度时哪一个会更费电,电工天下小编带大家来了解下。...
    2022-12-23
    空调开冷气时温度越低会不会越费电

    网站栏目