参考写前面
学习视频来自
【基础技能11】PWM脉宽调制信号的发生与控制
基本原理
PWM脉宽调制 主要是看占空比
什么是占空比呢
就是高电平占整个周期的比例就是占空比
我们通过调整占空比来实现PWM脉宽调制
我们要做的就是利用定时器 一会输出高电平一会输出低电平 生成一个矩形波 根据高低电平的持续时间 完成对占空比的设置
任务
首先这个100hz就是对应着0.01s的周期就是10ms的周期
一开始L1需要关闭 然后是1档-10%的占空比 2档-50%占空比 3档-90%占空比
代码
#include "reg52.h"
#include <intrins.h>
sbit l1=P0^0;
sbit s7=P3^0;
unsigned char count=0;
unsigned char duty=0;
unsigned char stat=0;
void selecthc573(){
P2=(P2&0x1f)|0x80;
}
void delay(unsigned int n)
{
unsigned int i,j;
for(j=n;j>0;j--)
for(i=112;i>0;i--);
}
//======timer function
void init_t(){
TMOD=0X01;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
ET0=1;
EA=1;
}
void ser_timer() interrupt 1{
TH0=(65535-100)/256;
TL0=(65535-100)%256;
count++;
if(count==duty){
l1=1;
}
else if(count==100){
l1=0;
count=0;
}
}
void key_scan(){
if(s7==0){
delay(100);
if(s7==0){
switch(stat){
case 0:
l1=0;
TR0=1;
duty=10;
stat=1;
break;
case 1:
duty=50;
stat=2;
break;
case 2:
duty=90;
stat=3;
break;
case 3:
TR0=0;
stat=0;
l1=1;
break;
}
while(s7==0);
}
}
}
void main(){
selecthc573();
l1=1;
init_t();
while(1){
key_scan();
}
}
结果展示
单片机PWM调光效果演示