找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1653|回复: 4
收起左侧

求助:51单片机PWM调制实现模拟呼吸灯

[复制链接]
ID:578842 发表于 2020-8-7 20:33 | 显示全部楼层 |阅读模式
陈润源home 发表于 2019-3-22 16:28 51单片机PWM调制实现模拟呼吸灯(Proteus仿真+程序
http://www.51hei.com/bbs/dpj-153979-1.html
  • #include<reg52.h>                        //调用含有51专用寄存器的头文件
  • #define uchar unsigned char                 //用uchar代替unsigned char
  • #define uint unsigned int                 //用uint代替unsigned int
  • void delayms(int xms)                     //脉宽调制函数
  • {
  • while(xms--);
  • }
  • void main()                                            //主函数
  • {
  •            uint T=400,N=0;                   //定义周期
  •    while(1)
  •   {
  •            for(N=1;N<T;N++)                    //从暗逐渐变亮
  •         {
  •           P1=0x00;
  •           delayms(N);
  •           P1=0xff;
  •           delayms(T-N);
  •         }
  •         P1=0xff;
  •   for(N=T-1;N>0;N--)                     //从亮逐渐变暗
  •         {
  •           P1=0x00;
  •           delayms(N);
  •           P1=0xff;
  •           delayms(T-N);
  •         }
  •         delayms(N+10);                         //增加看到的熄灭效果
  •    }
  •   }





其中
  • void delayms(int xms)                     //脉宽调制函数
  • {
  • while(xms--);
  • }
感觉用的很巧妙,但细细品味又实在不明白怎么解释,请大神们谁知道给我们这些小白讲讲呗。谢谢各位。


回复

使用道具 举报

ID:382826 发表于 2020-8-8 07:47 | 显示全部楼层
这就是个延时函数嘛,在for循环中不断改变这个延时函数的时间从而改变灯的亮度。
回复

使用道具 举报

ID:86926 发表于 2020-8-8 08:12 | 显示全部楼层
就是总共400ms,由暗变亮,400ms就是周期时间,也就是暗和亮的总时间。亮Nms,灭T-Nms。由于N的慢慢自增,所以N的值是越来越大的,也就是亮的时间越来越长,灭的时间等于T(400ms)-N的时长,由于N在增大,所以,灭的时长就变短了,这样就能实现亮度的调整了。反过来就是由亮变暗了。
回复

使用道具 举报

ID:748788 发表于 2020-8-8 08:14 | 显示全部楼层
delayms(int xms)函数中的xms代表延迟时间,xms--表示减1,每一循环减1一次,减到0不为真了,延迟函数就结束了
回复

使用道具 举报

ID:578842 发表于 2020-8-8 23:57 | 显示全部楼层
谢谢大家的解释。明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表