一.呼吸灯概念
有问题发送邮件至468078841@qq.com
呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用,在各个单片机均是使用定时器产生PWM信号来达到呼吸灯的效果。
二.呼吸灯原理
想要了解呼吸灯的原理,就必须要理解占空比的概念,占空比,是指在一个周期内,灯亮或者灭占一个周期的时间。
当灯在亮灭交替的时候,如果一亮一灭的时间周期较长,那我我们会看见灯在闪烁,如果灯亮灭的周长变化在人眼不可辨识的状态下并且亮灭占比一样都为百分之五十,那么我们会觉得LED灯光变暗我们叫这个为light0,如果还是同样的周期,灯亮的时间为百分之七十五比灭的时间为百分之二十五位light1,那么我们可以看到light1的亮度明显大于light0,如果我们将灭的光占比位百分之七十五,亮的占比为百分之二十,亮度为light2,那么依次亮度为 light1>light0>light2.
三.delay函数实现呼吸灯
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
#define D4 P1_0 //宏 定义引脚为端口 方便记忆
#define D2 P1_1
#define D3 P1_2
void Delay(unsigned int t);
void LED_INIT(void); //LED初始化函数
void Delay(unsigned int ms)
{
while(ms--);
}
void LED_INIT(void) //LED初始化函数
{
P1SEL &= ~0x07; // P1SEL &= ~(0000 0111)P1SEL &= (1111 1000)
P1DIR |= 0x07;
P1 = 0x07;
}
void main (void)
{
uint pwm_CYCLE=600,pwm_LOW=0;//定义周期
LED_INIT();
while (1)
{
//1 是灭
for(pwm_LOW=1;pwm_LOW<pwm_CYCLE;pwm_LOW++)
{
//PWM_LOW表示低
//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
D2=0;
D3=0;
D4=0;
Delay(pwm_LOW);//亮的时间逐渐增加
D2=1;
D3=1;
D4=1;
Delay(pwm_CYCLE-pwm_LOW);//灭的时间逐渐减小
}
//整体 由灭到亮
for(pwm_LOW=pwm_CYCLE-1;pwm_LOW>0;pwm_LOW--)
{
D2=0;
D3=0;
D4=0;
Delay(pwm_LOW);//逐渐变小 这个是亮的时间
D2=1;
D3=1;
D4=1;
Delay(pwm_CYCLE-pwm_LOW); //逐渐变大这个是暗的过程
//由亮到灭
}
}
}
以前写过定时器的PWM因为代码给删了 现在手里没有设备,等开学再补上