标题: 用51单片机做一个简易呼吸灯 [打印本页]

作者: 953841535    时间: 2017-12-5 16:41
标题: 用51单片机做一个简易呼吸灯
利用占空比的方式来控制灯的变暗和变亮
占空比就是高电平和低电平的比例;
实现呼吸灯效果是利用人眼的分辨率只能看到25帧每秒,甚至还不够,
所以用单片机做呼吸灯是利用频率来控制呼吸灯的呼吸时间,用占空比来控制灯的亮度
代码如下
#include <reg52.h>
sbit LED1=P2^0;         //定义灯的位置
int PWM_Low,Clock=500;
void delay(unsigned int x) //延迟函数
{
   int i;
   for(i=0;i<x;i++);
}          
void main(void)
{
    while(1)
          {
            for(PWM_Low=Clock;PWM_Low>0;PWM_Low--) //逐渐变暗
             {
                   LED1=1;
                   delay(PWM_Low);
                   LED1=0;
                   delay(Clock-PWM_Low);
                 }
            for(PWM_Low=0;PWM_Low<Clock;PWM_Low++)        //逐渐变亮
                  {
                                LED1=1;
                                delay(PWM_Low);
                                LED1=0;
                                delay(Clock-PWM_Low);
                  }          
           }
}
如有错误,还望指正,新手来的


作者: 石墨清风    时间: 2019-8-3 10:33
学习了

作者: cokesu    时间: 2019-8-6 14:01
最好不要用for循环来写,这样的呼吸灯就真的只有呼吸灯了,可以用定时器来做
作者: 想学智能小车    时间: 2019-8-6 17:17
学习了
作者: zhuojiaju    时间: 2019-8-7 15:32
感谢分享
作者: zh68a11    时间: 2019-11-5 17:28
学习了,谢谢。
作者: 丑陋的土拨鼠    时间: 2019-11-6 17:15
cokesu 发表于 2019-8-6 14:01
最好不要用for循环来写,这样的呼吸灯就真的只有呼吸灯了,可以用定时器来做

用定时器该怎么做呢?
作者: xuwenwu890    时间: 2019-12-8 10:58
学习了,谢谢分享。
作者: xuwenwu890    时间: 2019-12-8 10:58
学习了。
作者: nimiaolegemi    时间: 2019-12-8 18:47
太强了呀
作者: 愿你安然    时间: 2019-12-29 19:46
cokesu 发表于 2019-8-6 14:01
最好不要用for循环来写,这样的呼吸灯就真的只有呼吸灯了,可以用定时器来做

学习了
作者: 我爱单片机0    时间: 2020-1-11 12:45
学到了
作者: dzbj    时间: 2020-1-12 19:53
同"板凳"

用for做循环之间就干不了别的事了 作为单片机来说不合算的 小片子还好 要是个大片子就干这么点事太浪费资源 就按你说的25帧/秒 就是每帧占用40ms左右 这40ms能干多少事啊 如果只实现呼吸灯 还不如用555搭一个

还有这么写的呼吸灯是没有曲率变化的 严格说只能叫渐亮渐暗灯 人呼吸 渐亮和渐暗的变化过程不是线性的
作者: BG2UKY    时间: 2020-1-13 15:25
#include <reg52.h>
sbit LED1=P1^0;         //定义灯的位置
int PWM_Low,Clock=420;
void delay(unsigned int x) //延迟函数
{
   int i;
   for(i=0;i<x;i++);
}           
void main(void)
{
    while(1)
          {
            for(PWM_Low=Clock;PWM_Low>0;PWM_Low--) //逐渐变暗
             {
                   LED1=0;
                   delay(PWM_Low);
                   LED1=1;
                   delay(Clock-PWM_Low);
                 }
            for(PWM_Low=0;PWM_Low<Clock;PWM_Low++)        //逐渐变亮
                  {
                                LED1=0;
                                delay(PWM_Low);
                                LED1=1;
                                delay(Clock-PWM_Low);
                  }           
           }
}
作者: 13466628313    时间: 2020-3-16 13:41
学习了。有创意。我找时间用定时器实现试试
作者: 1679079206    时间: 2020-3-16 17:36
不错哦,原理图可以发出来了?
作者: 余梦无秋    时间: 2020-6-2 17:38
谢谢楼主分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1