51单片机 PWM基本原理理解(程序举例)

本文介绍了51单片机通过PWM控制LED亮度的基本原理,详细阐述了计数器和比较值如何影响LED的亮暗,并通过程序示例解释了不同编程方式对占空比的影响,帮助理解PWM在单片机控制中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置独立按钮K1,不按下时LED P2_0灯暗,按下时更亮。

#include <REGX52.H>

unsigned char Counter,Compare;			//两个篮子,一个Counter计数器,一个Compare比较值。

void main()
{
	while(1)							//大循环。
	{

		while(P3_1==1)   		//循环:独立按钮K1,没有按下的时候,在这里面循环。
			{
				Counter++;	//计数器自增1.
				Counter%=100;	//当计数器增加到100时,变成0,赋值给计数器。(也可以设定其他值)
				Compare=95;	//自己设定的比较值。(设得高,不亮的时间越长,看起来就越暗。红色线)
				if(Counter<Compare)	//把两者作比较。当计数器值小于比较值时 执行。
					{
							P2_0=1;	//设计:当计数器值小于比较值灯不亮。	
					}
				else				
					{
						P2_0=0;	//反之:灯亮。		
					}
			}
		while(P3_1==0)
			{
				Counter++;
				Counter%=100;
				Compare=5;
				if(Counter<Compare)
					{
						P2_0=1;		
					}
				else				
					{
						P2_0=0;		
					}	
			}
	}
}


注意:

1.        PWM控制灯亮度的方式是:将一个计数器从 0到设定的值(如:10,100等) 作为一个周期,计数器值在此周期内 从0自增到最大又变为0。

        设定一个 比较值, 计数器值自增一次就和比较值 比较一次,从而设定,是大于亮灯还是小于时亮灯,等。        快速的循环这个过程,肉眼看起来就好像灯变亮或者变暗了。

2.        如果编写程序为:        if (计数器值Counter < 比较值Compare) —— {执行P2_0不亮} —— else否则——{ P2_0亮 }。      才满足 红线 与 绿线交点 右边部分 灯亮,左边部分 灯熄灭(如上图图)。得到的结果是:比较值Compare越大 P2_0灯越暗,反之越亮。

        如果编写程序为:if (计数器值Counter > 比较值Compare) —— 执行P2_0不亮 —— else否则—— P2_0亮。        或者为: if (计数器值Counter < 比较值Compare) —— 执行P2_0亮 —— else否则—— P2_0不亮。         那么 交点 左边部分 灯亮,右边部分 灯熄灭。

3.        如上图熄灭表示的部分就是所谓的 占空比

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值