基于51单片机的流水灯—按键控制速度

基于51单片机的流水灯

(仿真+程序)

功能介绍

具体功能:

1.有8个LED组合成流水灯;

2.由下到上依次点亮;

3.有4个按键可以控制流水速度;

​演示视频:

基于51单片机的流水灯—按键控制速度 

添加图片注释,不超过 140 字(可选)

硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

设计资料

01仿真图

本设计使用Proteus7.8和Proteus8.9两个版本设计,具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)等。具体内容如下,全网最全! !

 

资料获取请观看前面演示视频!

点赞分享一起学习成长。

  • 32
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用51单片机实现流水灯按键控制的基本步骤: 1. 硬件连接:将LED灯连接到P1口的8个引脚上,将按键连接到P3.2口上。 2. 软件编写:使用Keil C51编写代码,实现按键检测和LED流水灯效果。 3. 按键检测:在主循环中,不断检测P3.2口的状态,如果检测到按键按下,就改变LED灯的流水方向。 4. LED流水灯:使用一个变量来记录LED灯的状态,根据这个变量的值控制LED灯的亮灭。同时,使用延时函数控制LED灯的流水速度。 以下是示例代码: ```c #include <reg51.h> #define LED P1 #define KEY P3 void delay(unsigned int i); // 延时函数 void main() { unsigned char flag = 0; // 记录LED流水方向的变量 unsigned char ledVal = 0x01; // 控制LED灯亮灭的变量 while(1) { if(KEY & 0x04) // 检测按键是否按下 { delay(10); // 延时去抖动 if(KEY & 0x04) // 再次检测按键是否按下 { flag = !flag; // 改变LED流水方向 } } if(flag) // LED流水方向为向右 { ledVal = ledVal << 1; if(ledVal == 0x00) { ledVal = 0x01; } } else // LED流水方向为向左 { ledVal = ledVal >> 1; if(ledVal == 0x00) { ledVal = 0x80; } } LED = ledVal; // 控制LED灯亮灭 delay(500); // 延时控制LED流水速度 } } void delay(unsigned int i) // 简单的延时函数 { unsigned int j, k; for(j = i; j > 0; j--) { for(k = 125; k > 0; k--); } } ``` 在上述代码中,我们使用了一个变量flag来记录LED流水方向,当flag为1时,LED灯从右向左流水,当flag为0时,LED灯从左向右流水。在主循环中,我们不断检测P3.2口的状态,如果检测到按键按下,就改变LED流水方向。同时,根据flag的值控制LED灯的流水方向。 需要注意的是,在检测按键状态时,需要加上一个延时去抖动的函数,否则可能会出现按键多次触发的问题。在本例中,我们简单地使用了一个延时函数来实现去抖动。 另外,在控制LED灯的亮灭时,我们使用了一个变量ledVal来记录LED灯的状态。每次改变LED流水方向时,我们都需要对ledVal进行相应的操作,以控制LED灯的流水方向。同时,使用一个延时函数来控制LED灯的流水速度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值