蓝桥杯单片机之模块代码《PWM呼吸灯》

过往历程

历程1:秒表

历程2:按键显示时钟

历程3:列矩阵按键显示时钟

历程4:行矩阵按键显示时钟

历程5:新DS1302

历程6:小数点精确后两位ds18b20

历程7:35定时器测量频率

历程8:AT24C02

历程9:AT24C02秒表

历程10:AD

历程11:超声波

历程12:多样点灯方式

历程13:AT24C02页写入

历程14:DA

历程15:串口发数据

历程16:逐个点亮LED

历程17:花样霓虹灯

历程18:PWM控制灯亮度



前期准备

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灯的亮暗过度就会看上去很自然。

PWM调节呼吸灯

  在这里我们需要知道这样的小知识,LED灯的亮度是由电压来决定的,给的电压大LED亮度强,给的电压小LED亮度弱。

  从百度上我们可以搜到,人眼对于83Hz的频率以上的刷新率基本不感到闪烁?
在这里插入图片描述
  呼吸灯是一种特殊的 LED 灯效果,模拟人类呼吸的渐变效果。这种效果通常通过改变 LED 的亮度来实现,使得灯光在周期性的增强和减弱之间变化,就像人类呼吸时胸腔的起伏一样。本文使用PWM方法,编写适当的算法来调整 PWM 信号的占空比,从而实现呼吸灯效果的时间变化。当占空比越高时,LED灯越亮。实现原理框图如下所示。
在这里插入图片描述

本期代码

#include<reg52.h>

void fmq()
{
	P2=((P2&0x1f)|0xa0);
	P0=0x00;
	P2&=0x1f;
	
	P2=((P2&0x1f)|0x80);
	P0=0xff;
	P2&=0x1f;	
	
}

void aa(int x)
{
	while(x--);
}

void din()
{
	TMOD=0X01;
		TH0=(65536-100)/256;
		TL0=(65536-100)%256;
		TR0=1;
	ET0=1;
	EA=1;
}
int a,i,b;
void din1() interrupt 1
{
		TH0=(65536-100)/256;
		TL0=(65536-100)%256;
		a++;
	if(a==1000)
	{
		a=0;
		for(i=0;i<800;i++)
{
		b=800-i;
	P2=((P2&0x1f)|0x80);
	P0=0xff;
	P2&=0x1f;	
		aa(b);
			P2=((P2&0x1f)|0x80);
	P0=0x00;
	P2&=0x1f;	
	aa(i);
}

		for(b=0;b<800;b++)
{
		i=800-b;
	P2=((P2&0x1f)|0x80);
	P0=0x00;
	P2&=0x1f;	
		aa(i);
			P2=((P2&0x1f)|0x80);
	P0=0xff;
	P2&=0x1f;	
	aa(b);
}
}
}
void main()
{
	fmq();
	din();
	while(1)
	{
	}
}


	



省赛代码传送门

第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
第十一届蓝桥杯单片机省赛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值