一、实验原理
我们在做呼吸灯的时候,我们首先得了解呼吸灯的原理,我们得知道我们电压做的功,我们首先看张图
这张图是自己手工画的,有点不够规范,就像第一个信号一样,间隔大概一样,有点高数知识的师兄都知道连续的,那么他的积分就是他所做的功,也可以这样理解,我们做得功就等于(W=UIt),所以我们还是积分比较好理解,当我们LED的引脚是高电平时,我们观察的亮度是最亮的,这是因为做的功是全部,这时候我们可以比较这两条线,上面的线比较平均,大概就是50%左右的样子,我们行容这种东西叫做占空比用q表示,q=高电平时间/周期时间(高电平时间指的是一个周期里面的)相对于下面这条,一开始我们我们看到高电平时间比较短,占空比比较小,(在这里说明一下,我用的单片机是3.3v——0v就是说单片机低电平“0”是点亮)所以这个实验现象是慢慢的变暗,因为做的功多,占空比比较大,如果占空比达到了100%,单片机的LED则会熄灭/。
二、代码思路
我们在了解PWM的工作原理,我们可以简单的做一个呼吸灯,我们首先得定义一个周期,然后调节占空比就能达到我们想要的结果,我们可以用延时函数(delay)和for循环来达目的。
三、实验源码
四、我们但可以用延时函数,还可以用定时器来设置占空比,时间控制的更合理,难度高的PWM还是用定时器比较好。。写的不太好,如果有错误,请批评,大家多交流。
单片机源程序如下:- /***************************************************************************************************
- 笔者自己用的是普中的单片机,因为LED引脚在P2上面,个人需要根据自己说的单片机自己设定,经自己测试,当周期是400时候
- 亮度刚好,单片机的晶振用的12MHz
- ***************************************************************************************************/
- #include "reg52.h"
- sbit LED=P2^2;
- /****************************************
- 函数名称:void delay(unsigned int n)
- 函数功能:延时函数
- 输入参数:n
- 输出参数:无
- ****************************************/
- void delay(unsigned int n)
- {
- while(n--);
- }
- void main()
- {
- unsigned int CYCLE=400,LOW=0;
- while(1)
- {
- delay(5000);//延时一下
- for(LOW=1;LOW<CYCLE;LOW++)//从灭到亮
- { LED=0;
- delay(LOW);
- LED=1;
- delay(CYCLE-LOW);
- }
- //从亮到灭
- for(LOW=CYCLE-1;LOW>0;LOW--)
- { LED=0;
- delay(LOW);
- LED=1;
- delay(CYCLE-LOW);
- }
- }
- }
复制代码
附上源码hex:
LED.zip
(22.52 KB, 下载次数: 30)
|