过往历程
前期准备
1:本文使用的头文件是由stc生成
点击保存文件之后,保存至自己文件目录下方即可
2:本文使用的都是官方提供的底层驱动代码
简单了解
单片机的PWM代表脉冲宽度调制(Pulse Width Modulation)。它是一种用于控制模拟信号的数字技术。通过调节脉冲的宽度,可以控制输出信号的平均功率。在单片机中,PWM通常用于控制电机的转速、LED的亮度以及其他需要调节电压、功率或信号的应用中。通过改变脉冲的宽度和周期,可以调节输出信号的平均电压或电流,从而实现对被控制设备的精确控
原理介绍
PWM(Pulse Width Modulation,脉宽调制)是一种通过改变信号的脉冲宽度来控制电平的技术。它通过调整脉冲信号的占空比(高电平时间与周期的比例)来实现对电压或电流的精确控制。
PWM的原理可以简单描述为以下几个步骤:
-
选择一个固定的周期:PWM信号由一系列周期性的脉冲组成,其中周期是固定的,表示脉冲信号的重复时间。
-
设置一个目标值:根据需要控制的设备或系统,设置一个目标值,例如期望的电压或电流。
-
比较目标值和当前值:将目标值与一个计数器进行比较,该计数器在每个周期内递增。如果目标值大于计数器的当前值,则输出高电平;如果目标值小于计数器的当前值,则输出低电平。
-
调整占空比:通过调整目标值与计数器的比较关系,可以改变脉冲信号的占空比。占空比越大,高电平时间越长,输出电平的平均值也就越高;占空比越小,高电平时间越短,输出电平的平均值也就越低。
-
输出PWM信号:根据比较结果,生成相应的脉冲信号。通常,高电平表示逻辑1或高电平电压,低电平表示逻辑0或低电平电压。
简单应用
PWM(Pulse Width Modulation)即脉冲宽度调制,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量。
何为脉冲宽度调制?比如说,我们线输出1ms的高电平,再输出1ms的低电平以此快速进行输出,那么这段电信号并没有以全程高电平的状态输出,也没有以全程低电平的状态输出,而是以稳定的中间电平状态输出。再比方说周期的时间是10ms,脉宽时间是8ms 那么低电平时间就是2ms 总的占空比 8/(8+2)= 80%,就会以80%总电流的强度输出。根据这个就可以控制电机的速度或LED灯的亮度。
值得一提的是,这种调制方法只适用于惯性系统,例如电机的转动,当从高电平跳变到低电平时,电机不会马上停止转动,而是靠着惯性继续旋转,LED灯则是根据人眼的视觉暂留效果,当它熄灭的一瞬间会留有余晖,连当频率很快的时候,LED灯的亮暗过度就会看上去很自然。
本期代码
#include<reg52.h>
sbit k7=P3^0;
int a=0,i=0;
void aa(int x)
{
while(x--);
}
void fmq()
{
P2=((P2^0x1f)|0xa0);
P0=0x00;
P2&=0x1f;
P2=((P2^0x1f)|0x80);
P0=0xff;
P2&=0x1f;
}
void din()
{
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
EA=1;
}
void din1() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
a++;
if(a==i)
{
P2=((P2^0x1f)|0x80);
P0=0xff;
P2&=0x1f;
}
else if(a==100)
{
a=0;
P2=((P2^0x1f)|0x80);
P0=0x00;
P2&=0x1f;
}
}
int x=0;
void anjian()
{
if(k7==0)
{
aa(1000);
if(k7==0)
{
switch(x)
{
case 0:
P2=((P2^0x1f)|0x80);
P0=0x00;
P2&=0x1f;
TR0=1;
i=10;
x=1;
break;
case 1:
i=50;
x=2;
break;
case 2:
i=90;
x=3;
break;
case 3:
P2=((P2^0x1f)|0x80);
P0=0xff;
P2&=0x1f;
TR0=0;
x=0;
}
while(k7==0);
while(k7==0);
}
}
}
void main()
{
fmq();
din();
while(1)
{
anjian();
}
}
省赛代码传送门
第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
第十一届蓝桥杯单片机省赛