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

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

3天内不再提示

基于51单片机设计的花样流水灯设计

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-06-11 10:00 次阅读

一、项目介绍

花样流水灯是一种常见的LED灯效果,被广泛应用于舞台表演、节日庆典、晚会演出等场合。在现代智能家居电子产品中,花样流水灯也被广泛使用,通过调整亮灭顺序和时间,可以实现各种炫酷的灯光效果,增强用户体验。而51单片机作为一种常见的嵌入式开发平台,具有体积小、功耗低、可编程性强等优点,非常适合用于开发花样流水灯及其他嵌入式应用。

以下场景中流水灯得到了广泛的应用:

  • 舞台表演:花样流水灯可用于舞台背景、音乐MV等场合,配合音乐和舞蹈,营造出炫酷、动感的视觉效果。
  • 节日庆典:在传统节日如春节、中秋节等场合,花样流水灯可以用于灯笼、彩灯等装饰,为节日增添喜庆氛围。
  • 晚会演出:在各种晚会、派对、聚会等场合,花样流水灯可以用于舞台效果、音乐灯光秀等,增强整个活动的氛围和趣味性。
  • 智能家居:花样流水灯可以使用在居家灯光控制中,实现远程控制、定时开关、自动调节等功能,提升居住环境的科技感和人性化。

image-20230606215451680

二、设计原理

2.1 基本原理

花样流水灯是一种常见的LED灯效果,通常由多个LED灯组成,通过控制每个LED灯的亮灭顺序和时间,实现花样流水灯的效果。在51单片机中,可以使用定时器端口控制来实现这一效果。

2.2 硬件搭建

为了实现花样流水灯,需要将多个LED灯按照一定的顺序连接到51单片机的IO引脚上。电路设计上,为每个LED灯配备一个电阻,并将它们连接到5V电源引脚和地线上。

具体硬件搭建方法如下:

(1)将多个LED灯依次连接起来组成一个电路链,将第一个LED的正极接到P1.0口,第二个LED的正极接到P1.1口,第三个LED的正极接到P1.2口,以此类推,一共连接7个LED灯。

(2)为每个LED灯配备一个适当的电阻,用来限制电流,防止损坏LED。

(3)将每个LED的负极连接到5V电源引脚附近的地线上,形成一个完整的电路。

2.3 软件实现

在软件实现上,使用51单片机的定时器和端口控制来控制LED灯的亮灭顺序和时间。

具体方法如下:

(1)设置一个计数器变量count,用来保存当前亮起的LED灯的编号(从0开始)。

(2)在定时器中断处理函数中,每次计数器溢出时,将当前亮起的LED灯熄灭,并将count加1;当count等于LED灯总数时,将count重置为0。

(3)然后,再将下一个LED灯亮起,以此类推。

(4)通过控制定时器的计数周期和每个灯亮起的时间,可以调整花样流水灯的效果。

三、代码实现

3.1 流水灯代码实现1

#include < reg52.h >#define LED_NUM 8         // LED灯总数
 #define TIMER_TICK 500    // 定时器计数初值,控制亮灭时间
 #define HIGH 0            // 高电平
 #define LOW 1             // 低电平unsigned int count = 0;
 ​
 // 定时器中断处理函数
 void TimerInterrupt() interrupt 1
 {
     static unsigned long tick = 0;
 ​
     tick++;
 ​
     if (tick >= TIMER_TICK)
     {
         P1 &= ~(1 < < count); // 熄灭当前LED
         count++;             // 切换到下一个LEDif (count >= LED_NUM)
         {
             count = 0;       // 重置计数器
         }
 ​
         P1 |= (1 < < count);  // 亮起下一个LED
         tick = 0;            // 重置计时器
     }
 }
 ​
 // 主函数
 void main()
 {
     unsigned int i;
 ​
     P1 = 0xFF;              // 所有IO口初始化为高电平
     TMOD |= 0x01;           // 定时器0,模式1,16位自动重载
     TH0 = (65536 - TIMER_TICK) / 256;
     TL0 = (65536 - TIMER_TICK) % 256;
     ET0 = 1;                // 定时器中断允许
     EA = 1;                 // 总中断允许
     TR0 = 1;                // 定时器开始计数while (1)
     {
         // 等待中断事件
     }
 }

3.2 流水灯实现效果2

【1】逐个点亮

#include < reg52.h >void Delay(unsigned int t) // 延时函数
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ​
 void main()
 {
     while (1)
     {
         unsigned char i; // 定义计数器i
         for (i = 0; i < 8; i++) // 循环8次,依次点亮LED灯
         {
             P0 = ~(1 < < i); // 通过位运算生成控制信号,输出到P0口,控制LED灯点亮
             Delay(500); // 延时500ms
         }
     }
 }

【2】逐个熄灭

#include < reg52.h >void Delay(unsigned int t) // 延时函数
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ​
 void main()
 {
     while (1)
     {
         unsigned char i; // 定义计数器i
         for (i = 7; i < 8; i--) // 循环8次,依次熄灭LED灯
         {
             P0 = ~(1 < < i); // 通过位运算生成控制信号,输出到P0口,控制LED灯熄灭
             Delay(500); // 延时500ms
         }
     }
 }

【3】来回流动

#include < reg52.h >void Delay(unsigned int t) // 延时函数
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ​
 void main()
 {
     while (1)
     {
         unsigned char i; // 定义计数器i
         for (i = 0; i < 8; i++) // 循环8次,依次点亮LED灯
         {
             P0 = ~(1 < < i); // 通过位运算生成控制信号,输出到P0口,控制LED灯点亮
             Delay(500); // 延时500ms
         }
         for (i = 6; i > 0; i--) // 循环6次,依次熄灭LED灯
         {
             P0 = ~(1 < < i); // 通过位运算生成控制信号,输出到P0口,控制LED灯熄灭
             Delay(500); // 延时500ms
         }
     }
 }

3.3 闪光灯的实现

下面是三个不同的闪光灯效果的代码,分别为常亮、快闪和慢闪。

【1】常亮闪光灯

#include < reg52.h >
 ​
 sbit LED = P1 ^ 0;
 ​
 void main() {
     while (1) {
         LED = 0; // LED常亮
     }
 }

【2】快闪闪光灯

#include < reg52.h >
 ​
 sbit LED = P1 ^ 0;
 ​
 void delay(unsigned int i) {
     while (i--);
 }
 ​
 void main() {
     while (1) {
         LED = 0; // LED亮
         delay(50000); // 延时一段时间
         LED = 1; // LED灭
         delay(50000); // 延时一段时间
     }
 }

【2】慢闪闪光灯

#include < reg52.h >
 ​
 sbit LED = P1 ^ 0;
 ​
 void delay(unsigned int i) {
     while (i--);
 }
 ​
 void main() {
     while (1) {
         LED = 0; // LED亮
         delay(100000); // 延时一段时间
         LED = 1; // LED灭
         delay(100000); // 延时一段时间
     }
 }

以上三个代码中,都使用了P1口的第0位来控制LED灯的亮灭。其中,第一个代码是常亮闪光灯,只需要将LED置为0。第二个代码是快闪闪光灯,使用了一个delay函数来实现延时,每次延时50000个时钟周期,即约为500ms。第三个代码是慢闪闪光灯,与第二个代码类似,只是将延时时间改为了100000个时钟周期,即约为1s。

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

    关注

    22

    文章

    1592

    浏览量

    107778
  • 51单片机
    +关注

    关注

    273

    文章

    5697

    浏览量

    123056
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94307
  • 定时器
    +关注

    关注

    23

    文章

    3235

    浏览量

    114377
  • 流水灯
    +关注

    关注

    21

    文章

    432

    浏览量

    59616
收藏 人收藏

    评论

    相关推荐

    心形花样流水灯

    心形花样流水灯基于51单片机程序设计电路图等
    发表于 11-26 16:36 212次下载

    51单片机流水灯程序

    51单片机流水灯程序 51单片机流水灯程序
    发表于 12-21 15:52 170次下载

    单片机控制花样流水灯原理图及程序

    本文详细介绍了AT89C51单片机流水灯的编写方法以及介绍了单片机32位LED花样流水灯程序及原
    发表于 04-26 16:15 5.5w次阅读
    <b class='flag-5'>单片机</b>控制<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>原理图及程序

    如何使用51单片机控制32个LED多花样流水灯的程序资料免费下载

    本文档的主要内容详细介绍的是如何使用51单片机控制32个LED多花样流水灯的程序资料免费下载。
    发表于 10-11 08:00 47次下载
    如何使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>控制32个LED多<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>的程序资料免费下载

    51单片机控制32个LED多花样流水灯详细程序资料免费下载

    本文档的主要内容详细介绍的是51单片机控制32个LED多花样流水灯详细程序资料免费下载。
    发表于 10-10 08:00 81次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>控制32个LED多<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>详细程序资料免费下载

    使用C51单片机设计的4按键4种花样流水灯的资料和程序免费下载

    本文档的主要内容详细介绍的是使用C51单片机设计的4按键4种花样流水灯的资料和程序免费下载。
    发表于 11-09 08:00 43次下载
    使用C<b class='flag-5'>51</b><b class='flag-5'>单片机设</b>计的4按键4种<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>的资料和程序免费下载

    使用单片机设计的花样流水灯程序免费下载

    本文档的主要内容详细介绍的是使用单片机设计的花样流水灯程序免费下载。
    发表于 04-01 08:00 1次下载
    使用<b class='flag-5'>单片机设</b>计的<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>程序免费下载

    使用51单片机设计的流水灯程序资料免费下载

    本文档的主要内容详细介绍的是使用51单片机设计的流水灯程序资料免费下载
    发表于 04-08 08:00 11次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机设</b>计的<b class='flag-5'>流水灯</b>程序资料免费下载

    使用51单片机进行四按键五花样流水灯设计的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机进行四按键五花样流水灯设计的程序免费下载。
    发表于 08-23 17:30 19次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行四按键五<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>设计的程序免费下载

    使用51单片机实现简单花样流水灯的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现简单花样流水灯的程序免费下载。
    发表于 07-05 17:41 10次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现简单<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>的程序免费下载

    使用51单片机设流水灯的源代码免费下载

    本文档的主要内容详细介绍的是使用51单片机设流水灯的C语言源代码免费下载。
    发表于 06-28 17:42 5次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机设</b>计<b class='flag-5'>流水灯</b>的源代码免费下载

    使用proteus仿真AVR单片机设计超级花样流水灯的资料合集

    本文档的主要内容详细介绍的是使用proteus仿真AVR单片机设计超级花样流水灯的资料合集。
    发表于 04-30 08:00 3次下载
    使用proteus仿真AVR<b class='flag-5'>单片机设</b>计超级<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>的资料合集

    C51单片机学习笔记(二)——花样流水灯的实现

    C51单片机学习笔记(二)——花样流水灯的实现文章目录C51单片机学习笔记(二)——
    发表于 11-12 13:51 37次下载
    C<b class='flag-5'>51</b><b class='flag-5'>单片机</b>学习笔记(二)——<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>的实现

    基于51单片机花样流水灯设计

    花样流水灯就是让LED灯按照一定规律进行各种变化,流水灯在生活中也随处可见,例如在建筑物的棱角上装上流水灯,可以起到变换闪烁达到美不胜收的效果。此设计使用16个LED灯,有四种
    的头像 发表于 06-28 10:29 3469次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>花样</b><b class='flag-5'>流水灯</b>设计

    51单片机流水灯制作

    流水灯是学习51单片机的一个基本项目,是我们对单片机IO口输出认识的基本项目。当然学会了花样流水灯
    的头像 发表于 02-26 10:06 1461次阅读
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>制作