将充电红灯长亮修改为红灯闪烁

这是一个客户的要求:将耳机的充电红灯长亮修改为充电红灯闪烁,充满灭灯。具体实现如下:

首先就是创建变量:
bsp_sys.h中sys_cb1_t结构体下:

u8 charge_rled_change;//控制充电红灯闪烁

由于充电灯控是在芯片底层实现,代码中没有充电灯控处理,通过配置及修改IO口的方法是无法实现将长亮修改为闪烁,只能通过中断直接控制IO口来处理:

开中断:
在bsp_sys.c下bsp_sys_init()中:

if(CHARGE_DC_IN())//控制充电红灯闪烁,中断要在按键处理前面
{   
	/// enable user timer for display & dac
	user_tmr_set_enable(1, 1);//中断控制函数,由于直接对IO口进行操作,可以写在灯初始化前面
	led_init();
	key_init();
	plugin_init();
}
else//正常情况下开机之后,再开中断
{
	led_init();
	key_init();
	plugin_init();
	/// enable user timer for display & dac
	user_tmr_set_enable(1, 1);
}

中断中的处理:
在bsp_sys.c下usr_tmr5ms_isr中:

u8 chbox_sta;
if(CHARGE_DC_IN())	//充电插入
{
	chbox_sta = bsp_charge_box_sta();//判断是否充满电,充满灭灯
	if(chbox_sta == 2) //耳机充满,红灯灭
	{
		GPIOADE |= BIT(7);	
		GPIOADRV |=BIT(7);
		GPIOADIR &= ~BIT(7);
		GPIOACLR = BIT(7);
	}
	else //耳机还在充电,闪烁频率在这里控制,250ms亮,250ms灭
	{
		sys_cb1.charge_rled_change++;
		if((sys_cb1.charge_rled_change >=0)&&(sys_cb1.charge_rled_change <50))
		{//亮灯
			GPIOADE |= BIT(7);	
			GPIOADRV |=BIT(7);
			GPIOADIR &= ~BIT(7);
			GPIOASET = BIT(7);
		}
		else if((sys_cb1.charge_rled_change >=50)&&(sys_cb1.charge_rled_change < 100))
		{//灭灯
			GPIOADE |= BIT(7);	
			GPIOADRV |=BIT(7);
			GPIOADIR &= ~BIT(7);
			GPIOACLR = BIT(7);
		}
		else if(sys_cb1.charge_rled_change >= 100)//控制计时的循环
		{
			sys_cb1.charge_rled_change = 0;
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值