一、PWM定义:
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率
二、处理过程:
1、设置提供调制方波的片上定时器/计数器的周期
2、 在PWM控制寄存器中设置接通时间
3、设置PWM输出的方向,这个输出是一个通用I/O管脚
4、启动定时器(信号输出)
5、使能PWM控制器
此过程中,我们只需要控制PWM占控比即可,调整工作状态。
三、功能要求:
(1)PWM脉宽信号的频率为100Hz.
(2)系统上电后L1指示灯处在熄灭状态。
(3)L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、50%的亮度、90%的亮度
(4)按下S7按键,循环切换L1指示灯的四种亮度模式。
代码如下:
#include "reg52.h"
sbit L1 = P0^0;
sbit S7 = P3^0;
void SelectHC573()
{
P2 = (P2 & 0x1f) |0x80;
}
//定时器相关函数
unsigned char count =0;
unsigned char pwm_duty =0;
void InitTmier0()
{
TMOD = 0x01;
TH0 = (65535 - 100)/256 ;
TL0 = (65535 - 100)%256;
ET0 = 1;
EA = 1;
}
void ServiceTimer0 () interrupt 1
{
TH0 = (65535 - 100)/256 ;
TL0 = (65535 - 100)%256;
count++;
if(count == pwm_duty)
{
L1 = 1;
}
else if(count == 100)
{
L1 = 0;
count = 0;
}
}
//=====
//按键相关函数
void Delay(unsigned int t)
{
while(t--);
}
unsigned char stat = 0;
void ScanKeys()
{
if(S7 == 0)
{
Delay(100);
if(S7 == 0)
{
switch(stat)
{
case 0:
L1 = 0;
TR0 = 1;
pwm_duty = 10;
stat = 1;
break;
case 1:
pwm_duty = 50;
stat = 2;
break;
case 2:
pwm_duty = 90;
stat = 3;
break;
case 3:
L1 = 1;
TR0 = 0;
stat = 0;
break;
}
while(S7 == 0);
}
}
}
//=======
void main()
{
SelectHC573();
L1 = 1;
InitTmier0();
while(1)
{
ScanKeys();
}
}