51驱动LED显示呼吸灯 定时器输出PWM

 

51驱动LED显示呼吸灯 定时器输出PWM

 

 

51驱动LED显示呼吸灯 定时器输出PWM

概述

本次用的单片机是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全亮;
在这里插入图片描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

热门文章

收藏
浏览量:0
创建时间:2022-06-10 18:29