概述
本次用的单片机是STC89C52RC,对应的开发板如下图所示
51单片机控制io口输出高低电平就可以实现简单的PWM输出,但是这个要占用主循环,非常的不方便使用,本次实验采用的51单片机的定时器0,用配置定时器的方式来输出PWM。
计数值小于比较值输出1,计数值大于比较值输出0;改变比较值就可以输出不同的PWM
主要程序
主程序:按键触发,LED呼吸灯显示四个挡位,改变Speed值可以改变输出的占空比;
unsigned char Counter,Compare; //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;
void main()
{
Timer0_Init();
while(1)
{
KeyNum=Key();
if(KeyNum==1)
{
Speed++;
Speed%=4;
if(Speed==0){Compare=0;} //设置比较值,改变PWM占空比
if(Speed==1){Compare=5;}
if(Speed==2){Compare=50;}
if(Speed==3){Compare=100;}
}
Nixie(1,Speed);
}
}
定时器程序:计数值小于比较值输出1,计数值大于比较值输出0;
void Timer0_Routine() interrupt 1
{
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
Counter++;
Counter%=100; //计数值变化范围限制在0~99
if(Counter<Compare) //计数值小于比较值
{
LED=0; //输出1
}
else //计数值大于比较值
{
LED=1; //输出0
}
}
实验现象
注意:使用的是板载的P1^0脚接的LED,低电平点亮;按一下K3按键改变输出挡位
1:比较值等于0,计数值一直大于比较值,波形输出高电平,LED灯不亮;
2:比较值等于5,PWM占空比等于95%,LED微亮;
3:比较值等于50,PWM占空比等于50%,LED中等亮度;
4:比较值等于100,计数值一直小于比较值,波形输出低电平,LED全亮;