标题:
求助:51单片机PWM调制实现模拟呼吸灯
[打印本页]
作者:
wps10025
时间:
2020-8-7 20:33
标题:
求助:51单片机PWM调制实现模拟呼吸灯
陈润源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--);
}
感觉用的很巧妙,但细细品味又实在不明白怎么解释,请大神们谁知道给我们这些小白讲讲呗。谢谢各位。
作者:
zhanghoub
时间:
2020-8-8 07:47
这就是个延时函数嘛,在for循环中不断改变这个延时函数的时间从而改变灯的亮度。
作者:
蓝魄
时间:
2020-8-8 08:12
就是总共400ms,由暗变亮,400ms就是周期时间,也就是暗和亮的总时间。亮Nms,灭T-Nms。由于N的慢慢自增,所以N的值是越来越大的,也就是亮的时间越来越长,灭的时间等于T(400ms)-N的时长,由于N在增大,所以,灭的时长就变短了,这样就能实现亮度的调整了。反过来就是由亮变暗了。
作者:
wwh2382
时间:
2020-8-8 08:14
delayms(int xms)函数中的xms代表延迟时间,xms--表示减1,每一循环减1一次,减到0不为真了,延迟函数就结束了
作者:
wps10025
时间:
2020-8-8 23:57
谢谢大家的解释。明白了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1