前言
今天学习了脉宽调制,主要的原理就是控制高电平和低电平的触发时间。
应用到led灯上面,脉冲的高电平的时间决定了灯亮的时间,脉冲低电平的时间决定了灯灭的时间,所以要控制灯的亮度的变化只需要控制脉冲的高电平和低电平持续的时间即可。
例如我想让灯越来越亮,首先给得先让灯灭,那么根据上面所说的高电平和低电平之间的关系,我们主要让高电平的持续时间为零,再给个低电平的值,就能让灯处于灭的状态;灯逐渐变亮就是让高电平的值++,让低电平的值--。
灯逐渐熄灭就反过来。
废话不多说了直接上正文
正文
先放程序
#include<reg51.h>
#define i unsigned int
#define on 0
#define off 1
#define time 1000
sbit k1=P1^1;
sbit k2=P1^7;
sbit led=P2^0;
void delay(i d)
{
i c;
for(c=0;c<d;c++);
}
void main()
{
i a,b;
b=time;
while(1)
{
led=on;
// 灯亮
delay(a);
// 灯亮的时间
led=off;
// 灯灭
delay(b);
// 灯灭的时间
if(k1==0)
{
delay(100);
if(k1==0)
{
a++;
// 亮的时间增加
b--;
// 灭的时间减少
if(b==0)
{
b=time;
a=0;
}
// 完全熄灭之后让灯重新亮
}
}
if(k2==0)
{
delay(100);
if(k2==0)
{
b++;
a--;
if(a==0)
{
a=time;
b=0;
}
}
}
}
}
仿真视频
2022年04月12日 19:54
好棒好棒!!!
2021年11月16日 01:36
好厉害!!!
2023年10月13日 19:58
代码放到keil里导出hex到proteus里灯还是灭的啊
2023年10月13日 20:05
你可以试着换个led灯,或者检查端口和led的正负极有没有颠倒
2021年11月04日 14:54
看看
2021年11月04日 14:45
看看
2021年11月04日 13:57
来看看吧
2021年11月04日 14:13
kankan
2021年11月04日 14:15
kankna吧
2021年11月04日 14:17
看看吧
2021年11月04日 14:21
看看就看看
2021年11月04日 14:35
knaknakna
2021年11月04日 14:23
234253
2021年11月04日 14:27
看看那
2021年11月04日 14:35
7856769
2021年11月04日 14:33
43255476