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

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

3天内不再提示

基于51单片机设计的呼吸灯

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

一、项目介绍

呼吸灯是一种常见的LED灯光效果,它可以模拟人类呼吸的变化,使灯光看起来更加柔和和自然。51单片机是一种广泛使用的微控制器,具有体积小、功耗低、成本低等优点,非常适合用于控制LED呼吸灯。本项目的呼吸灯将使用PWM(脉冲宽度调制)技术控制LED亮度,从而实现呼吸灯的效果。

在本项目中,将使用51单片机作为主控制器,通过编程实现呼吸灯的控制。将使用C语言编写代码,并使用Keil C51集成开发环境进行编译和调试。使用Proteus仿真软件进行电路设计和仿真,确保电路的正确性和稳定性。

image-20230606214353670

二、设计原理

2.1 PWM技术

PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种通过改变脉冲宽度来控制电路的技术。在数字电路中,PWM是一种非常常见的技术,它可以用来控制电机、LED灯等电子设备的亮度、速度等参数

PWM技术的基本原理是通过控制脉冲的宽度和周期来控制电路的输出。在一个PWM周期内,电路会以一定的频率(也就是PWM频率)产生一系列脉冲,每个脉冲的宽度和高电平时间占整个周期的比例是由控制器根据需要设定的。通过这种方式,可以实现对电路输出的精确控制。

在LED呼吸灯项目中,使用定时器模拟PWM技术可以实现呼吸灯效果。具体来说,就是通过定时器产生一定频率的脉冲信号,然后通过改变脉冲的占空比来控制LED灯的亮度。当脉冲的占空比逐渐增大时,LED灯的亮度也会逐渐增强,直到达到最大亮度;当脉冲的占空比逐渐减小时,LED灯的亮度也会逐渐减弱,直到最终熄灭。这样就可以实现类似于人类呼吸的渐变效果。

2.2 呼吸灯原理

呼吸灯是一种将 LED 灯光做成渐变效果的技术,可以让 LED 的亮度在一定时间内慢慢地增加和减小,使得 LED 的亮度变化更加自然和柔和,适合用于需要渐变效果的场景,如灯光调节、音响节拍等。

呼吸灯的原理是通过改变 LED 的 PWM 信号的占空比来控制 LED 的亮度。PWM(Pulse Width Modulation,脉宽调制)是一种调节模拟信号幅度的常用技术,它通过改变信号的脉冲宽度来实现对信号幅度的调节。在呼吸灯中,PWM 信号的频率较高,而占空比则会随着时间的推移而逐渐变化,从而实现 LED 亮度的渐变效果。

呼吸灯的实现通常需要使用一个定时器和一个 PWM 模块。定时器用来定时触发中断事件,在中断处理函数中改变 PWM 信号的占空比,从而控制 LED 的亮度。在定时器中断处理函数中,可以通过数学函数(如正弦、余弦等)或者简单的数值计算来得到不同的 PWM 占空比,实现不同的呼吸灯效果。

2.3 51单片机

51单片机是一种广泛使用的微控制器,具有体积小、功耗低、成本低等优点,非常适合用于控制LED呼吸灯。

STC89C52是一种基于MCS-51内核的8位单片机,由中国的STC公司生产。具有高性价比、易于编程、广泛应用等特点,在工业控制通信、家电控制等领域得到了广泛应用。

STC89C52单片机的主要特点如下:

  1. 采用MCS-51内核,具有8位数据总线和16位地址总线,可以访问64KB的程序存储器和64KB的数据存储器。
  2. 内置12MHz的晶振,可以通过软件设置分频系数来获得不同的系统时钟频率。
  3. 具有多种外设接口,包括UART、SPI、I2C、定时器、中断等,可以方便地实现各种应用。
  4. 支持ISP(In-System Programming)编程方式,可以通过串口或并口进行在线编程,方便快捷。
  5. 具有低功耗模式,可以通过软件设置进入不同的睡眠模式,以节省系统能耗。

STC89C52单片机可以使用C语言或汇编语言进行编程,编写的程序可以通过编译器生成HEX文件,然后通过编程器烧录到芯片中。由于STC89C52单片机的广泛应用和丰富的资料,因此学习和使用它相对来说比较容易。

三、代码实现

3.1 自动呼吸灯

因为STC89C52单片机没有PWM输出功能,只能使用延时函数实现,以下是基于STC89C52单片机实现呼吸灯效果的完整代码:

#include < reg52.h >#define LED P1void delay(unsigned int xms)
 {
     unsigned int i, j;
     for (i = xms; i > 0; i--)
         for (j = 110; j > 0; j--);
 }
 ​
 void main()
 {
     unsigned char i;
     while (1)
     {
         for (i = 0; i < 255; i++)
         {
             LED = i;
             delay(10);
         }
         for (i = 255; i > 0; i--)
         {
             LED = i;
             delay(10);
         }
     }
 }

在这个代码中,使用了STC89C52单片机的P1口来控制LED灯的亮度。通过一个循环,让LED灯的亮度从0到255逐渐增加,再从255到0逐渐减小,这样就实现了呼吸灯的效果。

在代码中,使用了一个delay函数来控制循环的速度。这个函数可以让程序延时一定的时间,从而控制LED灯的亮度变化速度。在这个代码中,设置了每次延时10毫秒,可以根据需要调整这个值来改变呼吸灯的效果。

3.2 按键控制灯光亮度

以下是基于STC89C52单片机的LED灯亮度控制完整代码,其中使用了两个按键分别控制LED的亮度和灭度。

#include < reg52.h >#define LED P1
 ​
 sbit KEY_UP = P3 ^ 2;
 sbit KEY_DOWN = P3 ^ 3;
 ​
 unsigned char pwm = 0;
 ​
 void delay(unsigned int i) {
     while (i--);
 }
 ​
 void key_scan() {
     if (KEY_UP == 0) {
         delay(1000);
         if (KEY_UP == 0) {
             pwm += 10;
             if (pwm >= 100) {
                 pwm = 100;
             }
         }
     }
     if (KEY_DOWN == 0) {
         delay(1000);
         if (KEY_DOWN == 0) {
             pwm -= 10;
             if (pwm <= 0) {
                 pwm = 0;
             }
         }
     }
 }
 ​
 void main() {
     TMOD = 0x01; // 设置定时器0为模式1
     TH0 = 0xFC; // 定时器初值,用于产生PWM信号的频率为50Hz
     TL0 = 0x67;
     TR0 = 1; // 启动定时器0
     ET0 = 1; // 允许定时器0中断
     EA = 1; // 开启总中断
     while (1) {
         key_scan();
     }
 }
 ​
 void timer0() interrupt 1 {
     static unsigned char cnt = 0;
     if (cnt >= 100) {
         cnt = 0;
     }
     if (cnt < pwm) {
         LED = 0;
     } else {
         LED = 1;
     }
     cnt++;
 }

以上代码中,使用了定时器0来产生PWM信号,控制LED的亮度。使用了两个按键来调整LED的亮度和灭度。其中,KEY_UP按键用于增加LED的亮度,KEY_DOWN按键用于减小LED的亮度。在每次定时器中断时,根据pwm的值来控制LED的亮度。当cnt小于pwm时,LED为低电平,LED亮度较高;当cnt大于等于pwm时,LED为高电平,LED亮度较低。

审核编辑:汤梓红

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

    关注

    237

    文章

    22462

    浏览量

    645910
  • 单片机
    +关注

    关注

    6002

    文章

    43990

    浏览量

    620953
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4905

    浏览量

    209971
  • 51单片机
    +关注

    关注

    269

    文章

    5649

    浏览量

    120834
  • 呼吸灯
    +关注

    关注

    9

    文章

    107

    浏览量

    42485
收藏 人收藏

    评论

    相关推荐

    51单片机制作呼吸电路图

    51单片机制作呼吸电路图
    发表于 07-21 16:49

    怎样去设计一种基于51单片机呼吸

    51单片机(呼吸)c语言湖北民族学院信息工程学院课程设计报告书题目:基于51单片机
    发表于 07-14 06:57

    51单片机呼吸程序设计

    51单片机呼吸程序设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LE
    发表于 07-14 07:54

    基于51单片机呼吸怎样设计

    课程设计报告书题目:基于51单片机呼吸设计信息工程学院课程设计任务书学 号1学生姓名专业(班级)设计题目基于51
    发表于 07-15 08:01

    怎么样去设计基于单片机与PWM的呼吸

    51单片机(呼吸)C语言版基于单片机与PWM的呼吸
    发表于 07-15 06:02

    51单片机如何利用PWM定时器实现呼吸

    51单片机如何利用PWM定时器实现呼吸
    发表于 10-15 09:24

    怎样去设计一种基于51单片机的简易呼吸

    基于51单片机的简易呼吸的设计原理是什么?怎样去设计一种基于51单片机的简易
    发表于 10-18 08:37

    如何利用51单片机实现呼吸的设计?

    如何利用51单片机实现呼吸的设计?
    发表于 10-19 06:24

    如何利用51单片机设计简易交通

    如何利用51单片机设计简易交通
    发表于 10-21 08:27

    基于51单片机的七彩呼吸设计资料分享

    ”。(4)按键3按下时,恢复起始亮法。1 先做一个呼吸由易到难,先做一个呼吸呼吸是让小
    发表于 11-19 07:11

    51单片机呼吸灯的实现源程序

    51单片机呼吸灯的实现,源程序,hex文件都有,用到的led灯是共阴极的
    发表于 12-10 16:35 166次下载

    使用单片机设计的呼吸灯程序免费下载

    本文档的主要内容详细介绍的是使用单片机设计的呼吸灯程序免费下载。
    发表于 08-02 17:34 2次下载
    使用<b class='flag-5'>单片机设</b>计的<b class='flag-5'>呼吸</b>灯程序免费下载

    使用51单片机设计LED点阵呼吸灯效果程序免费下载

    本文档的主要内容详细介绍的是使用51单片机设计LED点阵呼吸灯效果程序免费下载。
    发表于 07-04 17:41 20次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机设</b>计LED点阵<b class='flag-5'>呼吸</b>灯效果程序免费下载

    51单片机 呼吸灯 七彩呼吸

    由暗到亮“呼吸”。(4) 按键3按下时,恢复起始亮法。1 先做一个呼吸灯由易到难,先做一个呼吸灯。呼吸灯是让小灯从暗到亮变化,然后从亮回到暗。并一直循环。
    发表于 11-12 11:51 57次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b> <b class='flag-5'>呼吸</b>灯 七彩<b class='flag-5'>呼吸</b>灯

    基于51单片机呼吸灯程序编写

    利用51单片机编写的呼吸灯小程序,实验程序内容截图分享~
    发表于 11-23 16:36 33次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>呼吸</b>灯程序编写