除了直接修改PWM的频率或占空比,还有一种简单而有效的方法,特别适用于资源有限或者需要灵活调节PWM频率的情况。
可以理解为这段代码通过一种“障眼法”实现了对LED亮度的调节,虽然并没有直接修改PWM的具体参数。
例如实现PWM(脉宽调制)调节LED的亮度
//其中
//0 LED亮,1 LED灭。即低电平亮,高电平灭。
//P1是GPIO端口输出数据寄存器,LED的负极连接到P1。
P1 = 0xfe;//初始化P1
unsigned int CYCLE=600,PWM_LOW=0;//其中CYCLE是周期,PWM_LOW表示低电平
while(1)
{
//逐渐变亮
for(PWM_LOW = 1;PWM_LOW <CYCLE; PWM_LOW++)
{
P1= 0xfe;//LED亮
Delay(PWM_LOW);//低电平所占时间
P1= 0xff;//LED灭
Delay(CYCLE - PWM_LOW);//高电平所占时间
}
//逐渐变暗
for(PWM_LOW = CYCLE -1;PWM_LOW > 0;PWM_LOW--)
{
P1= 0xfe;//LED亮
Delay(PWM_LOW);//低电平所占时间
P1= 0xff;//LED灭
Delay(CYCLE - PWM_LOW);//高电平所占时间
}
}