标题: 51单片机PWM调制实现模拟呼吸灯(Proteus仿真+程序) [打印本页]

作者: 陈润源home    时间: 2019-3-22 16:28
标题: 51单片机PWM调制实现模拟呼吸灯(Proteus仿真+程序)
利用PWM调制实现呼吸灯效果

废话不多说直接上链接

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. //功能:通过PWM调制模拟呼吸灯
  2. //名称:呼吸灯
  3. #include<reg52.h>                        //调用含有51专用寄存器的头文件
  4. #define uchar unsigned char                 //用uchar代替unsigned char
  5. #define uint unsigned int                 //用uint代替unsigned int

  6. void delayms(int xms)                     //脉宽调制函数
  7. {
  8. while(xms--);
  9. }

  10. void main()                                            //主函数
  11. {
  12.            uint T=400,N=0;                   //定义周期
  13.    while(1)      
  14.   {          
  15.                                      
  16.            for(N=1;N<T;N++)                    //从暗逐渐变亮
  17.         {
  18.           P1=0x00;          
  19.           delayms(N);
  20.           P1=0xff;
  21.           delayms(T-N);       
  22.         }
  23.         P1=0xff;

  24.   for(N=T-1;N>0;N--)                     //从亮逐渐变暗
  25.         {
  26.           P1=0x00;
  27.           delayms(N);
  28.           P1=0xff;
  29.           delayms(T-N);       
  30.         }
  31.         delayms(N+10);                         //增加看到的熄灭效果
  32.    }        
  33.   }
复制代码

所有资料51hei提供下载:
呼吸灯.rar (26.55 KB, 下载次数: 562)



作者: shenyuqiu    时间: 2019-3-23 09:32
代码简单易懂
作者: aking991    时间: 2019-3-25 09:22
这个我也作过,我作的是七彩呼吸灯,效果还是不错的,计划改作灯带呼吸灯试试呢,不过方法值得学习借鉴。
作者: 紫色的云    时间: 2019-3-25 10:03
这方法学习了,有用谢谢分享
作者: hdivy    时间: 2019-3-25 13:00
实现呼吸灯效果,不错的实例。
作者: July1    时间: 2019-3-25 20:28
嗯,可以试试做一下
作者: 陈润源home    时间: 2019-3-26 22:40
shenyuqiu 发表于 2019-3-23 09:32
代码简单易懂


作者: zsf333666    时间: 2019-3-26 23:13
看不懂 我是伸手党。 但我想问一下,怎么把这些代码改成P0-P1-P2-P3端口的32只LED全部亮起(呼吸)
作者: 陈润源home    时间: 2019-3-27 20:22
zsf333666 发表于 2019-3-26 23:13
看不懂 我是伸手党。 但我想问一下,怎么把这些代码改成P0-P1-P2-P3端口的32只LED全部亮起(呼吸)

给P0、P1、P2、P3同时赋值(直接在P0=0x00后面直接给其他端口赋值)
作者: 陈润源home    时间: 2019-3-27 20:27
zsf333666 发表于 2019-3-26 23:13
看不懂 我是伸手党。 但我想问一下,怎么把这些代码改成P0-P1-P2-P3端口的32只LED全部亮起(呼吸)

for(N=1;N<T;N++)                    //从暗逐渐变亮
        {
          P1=0x00;
          P2=0x00;
          P3=0x00;
          P0=0x00;
          delayms(N);
          P1=0xff;
          P2=0xff;
          P3=0xff;
          P0=0xff;
          delayms(T-N);       
        }
        P1=0xff;

  for(N=T-1;N>0;N--)                     //从亮逐渐变暗
        {
          P1=0x00;
          P2=0x00;
          P3=0x00;
          P0=0x00;
          delayms(N);
          P1=0xff;
          P2=0xff;
          P3=0xff;
          P0=0xff;
          delayms(T-N);       
        }
        delayms(N+10);                         //增加看到的熄灭效果
   }
作者: MDZZzzzzz    时间: 2019-4-2 09:13
代码简单 特别容易理解
作者: zhangjin123    时间: 2019-4-2 10:52
感谢分享!!!

作者: life_阳子    时间: 2019-5-15 00:50
资料不准确 误报 在PROTEUS中会闪烁
作者: 897446744    时间: 2019-5-17 09:38
牛逼了,自己试试
作者: 馬小七    时间: 2019-5-17 12:28
很棒的效果
作者: 6.6.6    时间: 2019-5-17 16:23
学习很棒的效果
作者: ww1647346515    时间: 2019-5-17 20:34
简单易懂,,,
作者: 陈润源home    时间: 2019-5-22 11:57
life_阳子 发表于 2019-5-15 00:50
资料不准确 误报 在PROTEUS中会闪烁

我的错淡定
作者: fan19961021    时间: 2019-5-28 14:07
收藏了
作者: 虾兵0蟹将    时间: 2019-5-28 17:35
这个可以好好看看,,谢楼主
作者: qxdqx    时间: 2019-7-7 11:49
很好.谢谢!!!!!!!
作者: 我就凶猛    时间: 2019-7-7 21:03
谢谢分享啦
作者: 我就凶猛    时间: 2019-7-7 21:04
试做了一下,受益颇多
作者: fdgdf    时间: 2019-7-8 11:41
非常棒,好厉害,棒棒的
作者: 懒惰的家伙    时间: 2019-7-8 12:38
谢谢楼主分享
作者: sunwg9986    时间: 2019-7-8 14:53
新手来学习
作者: 单片机牛笔    时间: 2019-7-8 16:16
不错大佬
作者: 哈哈就    时间: 2019-8-5 13:11
代码简单易懂
作者: zhangsl168    时间: 2019-8-5 16:54
注释太详细了,代码也开起来比较方便!
作者: kfg    时间: 2019-10-4 23:24
萌新来学习了,最近准备给高达模型加灯,谢谢楼主共享。
作者: paruny    时间: 2019-10-6 01:39
恩,可以试试
作者: lilin520    时间: 2019-10-9 11:22

这方法学习了,有用谢谢分享
作者: 709521158    时间: 2019-10-11 23:15
方法很不错,谢谢分享
作者: 247015164    时间: 2019-10-13 08:52
这方法学习了,有用谢谢分享
作者: 56558745    时间: 2019-10-14 13:13
我需要
作者: 涛涛啊    时间: 2019-10-14 14:49
楼主真棒
作者: LXB1451930938    时间: 2019-11-5 20:00
代码简单易懂
作者: 李什么林    时间: 2019-11-6 18:31
代码简单,回去试试看,谢谢楼主
作者: hhdsdy    时间: 2019-11-6 18:50
下载一个看看,谢谢了!
作者: bigfishboys    时间: 2019-11-6 19:45
实现呼吸灯效果,不错的实例。
作者: 丑陋的土拨鼠    时间: 2019-11-6 21:24
看懂了呀,谢谢
作者: aasdfa    时间: 2019-11-6 22:57
十分有用,让我们这种小白收益颇多,谢谢分享
作者: shenyuqiu    时间: 2019-11-7 16:29
这个确实简单易懂,但做项目一个单片机只能控制呼吸灯,别的事情就做不了了
作者: 小心gdw    时间: 2019-11-7 17:32
代码简单易懂,刚学不久表示很好
作者: 八月初    时间: 2019-11-23 17:37
很棒,谢谢分享
作者: fuchaoqun392    时间: 2019-11-23 18:55
代码简单,通俗易懂 感谢楼主的分享
作者: 5136546    时间: 2019-12-18 20:09
不错,学到了
作者: qj0200    时间: 2019-12-25 16:36
值得学习,谢谢分享!
作者: 愿你安然    时间: 2019-12-29 19:44
打算32做个七彩呼吸灯 这个存着借鉴一下
作者: 112253    时间: 2019-12-30 22:33
效果不错,值得借鉴
作者: 792790513    时间: 2019-12-31 00:51
感谢分享
作者: jz573079513    时间: 2020-2-7 11:28
写的不错啊
作者: denminshen    时间: 2020-2-7 13:30
谢谢分享下载看看,不错的资料!
作者: 持勤补拙    时间: 2020-2-8 14:18
这代码写得很好让人看懂
作者: yechuan220    时间: 2020-2-8 17:17
这个我也作过,我作的是七彩呼吸灯,效果还是不错的
作者: ysf51hei    时间: 2020-2-9 10:29
简单粗暴,小创意不错
作者: sedisj    时间: 2020-3-5 09:18
如何调整呼吸灯的频率呢
作者: aniol    时间: 2020-3-5 13:48
新手入门学习中,感谢楼主
作者: 13487086265    时间: 2020-3-7 18:50
近期正准备做这个
作者: fy5399    时间: 2020-3-8 19:01
谢谢楼主分享
作者: outing逆旅    时间: 2020-3-11 19:14
拿走了,谢谢啦
作者: sun5304    时间: 2020-3-27 09:21
新手来学习学习,感谢楼主提供!
作者: AudreyQiao    时间: 2020-6-3 19:59
为什么我的有警告,一样的程序
作者: 一条小团团    时间: 2020-6-12 14:59
懂了,感谢分享!!
作者: 1AJ1987402    时间: 2020-6-14 16:11

谢谢分享啦
作者: 小新1080    时间: 2020-6-15 11:59
试一试 谢谢啦
作者: 15130498112    时间: 2020-6-15 18:43
谢谢大佬
作者: Gaa    时间: 2020-6-15 23:36
挺好的,下载学习下。
作者: zyl998    时间: 2020-6-16 15:27
楼主厉害了

作者: nimeishi8    时间: 2020-6-18 21:29
谢谢分享
作者: glmatch    时间: 2020-7-1 23:25
life_阳子 发表于 2019-5-15 00:50
资料不准确 误报 在PROTEUS中会闪烁

模拟不行的,要用开发板
作者: 1024153202    时间: 2020-7-4 09:16
刚好在做呼吸灯,感谢楼主分享!
作者: shenyuqiu    时间: 2020-7-4 11:26
新手或是只控制灯的一个程序就可以这样写着玩玩,如果是真要做产品,程序就在处理灯的地方一直延时,没效律,程序卡
作者: 116956018    时间: 2020-7-4 16:12
谢谢楼主,无私奉献
作者: wps10025    时间: 2020-8-7 16:02
void delayms(int xms)                     //脉宽调制函数
{
while(xms--);
}
这一个不太明白,哪位师傅给讲一下?
作者: 陈润源home    时间: 2020-9-13 16:01
sedisj 发表于 2020-3-5 09:18
如何调整呼吸灯的频率呢

改变T的值
作者: 陈润源home    时间: 2020-9-13 16:02
wps10025 发表于 2020-8-7 16:02
void delayms(int xms)                     //脉宽调制函数
{
while(xms--);

普通延时函数,初学者可以用,后期建议使用定时器
作者: blai    时间: 2020-9-13 20:25
可以呀 让人可以思考
作者: micle.zhou    时间: 2020-9-13 20:27
这个只能做实验了,实际中不能只做这个功能,可以用中断方式来实现呼吸灯,62.5uS一次中断,呼吸效果就很不错了
作者: 陈润源home    时间: 2020-9-13 20:31
micle.zhou 发表于 2020-9-13 20:27
这个只能做实验了,实际中不能只做这个功能,可以用中断方式来实现呼吸灯,62.5uS一次中断,呼吸效果就很不 ...

是的,当初发帖的初衷就是想让刚入门的朋友们理解呼吸灯的工作原理,后期项目中都必须采用定时器,而不是傻傻等待
作者: 请叫我张三哥    时间: 2020-9-22 13:04
谢谢楼主,刚刚好想做一个呼吸灯的实验。
作者: vincetan9    时间: 2021-12-6 11:22

这方法学习了,有用谢谢分享
作者: vincetan9    时间: 2021-12-6 11:23

这方法学习了,有用谢谢分享,,感谢感谢!
作者: zjhjx    时间: 2021-12-6 13:16
有用谢谢分享
作者: Tuier    时间: 2022-6-11 10:35
很多呼吸灯使用定时器,这个不用定时器,对初学者有益,理解起来容易
作者: lyb42151    时间: 2022-6-11 16:54
实现呼吸灯效果,不错的实例。

作者: lyb42151    时间: 2022-6-11 16:54
用定时器一样的。
作者: herui2128    时间: 2022-6-12 09:32
谢谢分享,PWM值得学习
作者: sonique0371    时间: 2022-6-13 12:45
效果不错,学习了。

pwm1.jpg (561.39 KB, 下载次数: 332)

pwm1.jpg

作者: 867910038    时间: 2022-6-14 09:41
我之前做pwm还是电机的时候
作者: ad1301491    时间: 2022-6-16 11:55
虽然是初级的IO口控制程序,但能够解释更高级方法来实现的实际的底层逻辑
作者: 周工58    时间: 2022-6-19 15:27
陈润源home 发表于 2020-9-13 16:02
普通延时函数,初学者可以用,后期建议使用定时器

普通延时函数,时间单位是多少.
作者: 陈润源home    时间: 2023-2-24 10:57
周工58 发表于 2022-6-19 15:27
普通延时函数,时间单位是多少.

根据你的板子晶振来决定哦  一般一条指令是一个机器周期时间  这个大概在1us左右
作者: weijoyer    时间: 2023-3-21 19:00
你这写法,很强,哈哈




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