最近有一款耳机,客户要求为:在开机的时候,呼吸亮,呼吸亮到最大之后,进入蓝牙搜索的灯;关机的时候,长亮3S左右,然后再呼吸灭。
软件版本为S522,具体操作如下:
创建一个全局的变量:
func_bt.c下:
u8 led_breath_flag = 0;//用于控制呼吸灯
func_bt.h下:
extern u8 led_breath_flag;//用于控制呼吸灯
来到开机灯处:
bsp_sys.c下bsp_sys_init()中:
//屏蔽之前的灯控,改为呼吸灯
led_breath_flag = 0;
breathe_led_start(0, 0);
// led_power_up();
呼吸灯的实现需要修改为:
port_breathe_led.c下breathe_led_timer2_isr()中:
if(bre_led_cb.count == bre_led_cb.pwm_level)
{//呼吸灯调节参数
......
if(((bre_led_cb.dir == 0)||(led_breath_flag == 0))&&(led_breath_flag < 2))
{//这里判断等于0就是开机的时候进入到这里,小于2是为了控制关机的时候,不能来到这里,得先维持最亮
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time){
bre_led_cb.time = 0;
bre_led_cb.duty++;
if(bre_led_cb.duty >= (bre_led_cb.pwm_level / 2)){
//达到最亮的时候,就得置1,关掉呼吸灯,恢复系统的灯控
led_breath_flag = 1;
bre_led_cb.dir = 1;
}
}
}
......
}
最亮的时候关掉呼吸灯:
func_bt.c下func_bt()中的while循环中添加:
if(led_breath_flag == 1)//用于控制呼吸灯灭掉
{
led_breath_flag = 0;
breathe_led_stop();
}
到这里就能够时间开机的时候呼吸亮, 到最高亮度的时候恢复系统的灯控。
关机的时候修改如下:
func_lowpwr.c下func_pwroff()中:
//在系统灯控的后面添加呼吸灯的操作,这里需要注意得维持系统运行
led_power_down();
led_breath_flag = 2;
breathe_led_start(0, 0);
......
//下面就是维持系统运行,以及呼吸灭之后关闭系统
while (IS_PWRKEY_PRESS() || IS_TKEY_PRESS()||(led_breath_flag != 152))
{//等待PWRKWY松开
if(led_breath_flag == 152)
breathe_led_stop();
......
}
在呼吸灯的操作中修改如下:
port_breathe_led.c下breathe_led_timer2_isr()中:
if(bre_led_cb.count == bre_led_cb.pwm_level){ //呼吸灯调节参数
if((led_breath_flag >= 2)&&(led_breath_flag <= 150))
{//维持关机的时候长亮,这个得放在最上面,这里就是控制长亮时间
led_breath_flag++;
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time)
{
bre_led_cb.time = 0;
bre_led_cb.duty = bre_led_cb.pwm_level / 2;
}
}
......
if((bre_led_cb.dir == 1)||(led_breath_flag == 151))
{//关机的时候呼吸灭,长亮的时间结束,就得控制来到这里进行呼吸灭
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time){
bre_led_cb.time = 0;
bre_led_cb.duty--;
if(bre_led_cb.duty <= 1){
//呼吸灭到了最小亮度,就得去关闭系统了
if(led_breath_flag == 151)
led_breath_flag = 152;
bre_led_cb.dir = 0;
bre_led_cb.toggle ^= 1;
}
}
}
}
}