51单片机快速入门之 PWM 控制 灯的亮度
PWM:
PWM(Pulse Width Modulation)是脉冲宽度调制的缩写,简称脉宽调制。它是一种模拟控制方式,通过改变脉冲序列的脉冲宽度来调节输出量和波形的一种调制方式。
图(来源于网络):

假设当 低电平时 灯 关闭 高电平 灯 打开
编写代码:
这段代码无限循环时 实际效果类似 呼吸灯
unsigned int T,TOFF;
T=500;
TOFF=0;
for(;TOFF<T;TOFF++)
{
灯关闭 LED=0;
delay(TOFF);//根据TOFF的值延时
灯打开 LED=1;
delay(T-TOFF);
}
这段程序将会执行500次
随着TOFF的增大, 灯 关闭 的时间将会越来越 长
而因为TOFF的增大 , 灯 打开 的时间将会越来越 短
实际上实现了一个简单的脉冲宽度调制(PWM)信号,其占空比从100%逐渐减小到0%。
-
占空比:在PWM中,占空比是指在一个周期内,高电平(或开状态)所占的时间比例。公式为:占空比 = (高电平时间 / 周期时间)* 100%。
-
周期时间:在上述代码中,周期时间
T被设定为500毫秒。 -
高电平时间:在每次循环中,灯打开的时间是
T - TOFF,随着TOFF从0逐渐增加到500,高电平时间从500毫秒(即100%占空比)逐渐减少到0毫秒(即0%占空比)。 -
低电平时间:灯关闭的时间是
TOFF,随着TOFF的增加,低电平时间从0毫秒逐渐增加到500毫秒。 -
PWM变化:随着循环的进行,PWM信号的占空比从100%开始,每经过一次循环,占空比减少相同的量,直到最后占空比变为0%。
模拟调试:
电路图

代码
#include <STC89C5xRC.H>
//模拟
sbit LB=P1^0;
void delay(unsigned char t); //简单延时函数
void main()
{
unsigned int T,TOFF;
T=500;
TOFF=0;
for(; TOFF<T; TOFF++)
{
LB=0; //灯关闭
delay(TOFF);//根据TOFF的值延时
LB=1; //灯打开
delay(T-TOFF);
}
while(1);
}
void delay(unsigned char t)
{
while(t--);
}
运行之后 时序分析


3018

被折叠的 条评论
为什么被折叠?



