QCC3020呼吸灯设计

    下面来说下高通平台3020的呼吸灯的设计,这也是我之前做项目的时候写好的并且已经量产了的。下面就说下代码吧

        不多说了,贴代码:

// 呼吸灯进行处理函数
void handleBreathLamp(Task task, MessageId id, Message message);
// 对灯的IO口初始化时需要使用到
#define LED_0_BANK      (appConfigLed0Pio() >> 5)
#define LED_0_PIO_MASK  (1UL << (appConfigLed0Pio() & 31))
#define LED_1_BANK      (appConfigLed1Pio() >> 5)
#define LED_1_PIO_MASK  (1UL << (appConfigLed1Pio() & 31))
#define LED_2_BANK      (appConfigLed2Pio() >> 5)
#define LED_2_PIO_MASK  (1UL << (appConfigLed2Pio() & 31))

// 将呼吸灯处理函数初始成一个task
Led_breath_t Led_breath={{handleBreathLamp}};

// 呼吸灯的开启和关闭   
// 开启的有定义是那个灯开始呼吸,还有呼吸的快慢  对应的是 id -> IO delay -> speed
void breathLamp(MessageId id, uint8 delay);
void breathLampOff(void);

// 下面的结构体就定义了调用的task(对应着上面的呼吸灯函数)
typedef struct Led_breath_Struct {
    TaskData task;
    uint8 id;
    uint8 flag;
    uint16 dim;             /*! user led breath PWD */
    uint16 time_delay;      /*! user counte times */
    uint16 delay_dim_time;  /*! user off led time */
    bool num_flag;          /*! user judge led breath open or off */  
}Led_breath_t;

extern Led_breath_t Led_breath;


// 呼吸灯的开启函数
void breathLamp(MessageId id, uint8 delay)
{
    // 呼吸灯IO进行初始化  放在普通灯IO口的初始化后面防止被重新初始化
/*	LedConfigure(id,LED_ENABLE,1);
	LedConfigure(id,LED_FLASH_ENABLE,1);
    LedConfigure(id,LED_PERIOD,3); */
	Led_breath.id = id;
	Led_breath.flag = 1;
    Led_breath.time_delay = delay;
	Led_breath.dim = 0;
    Led_breath.delay_dim_time = 0;
    Led_breath.num_flag = TRUE;
//进行呼吸灯task
    MessageCancelAll(&Led_breath.task,id);
    MessageSendLater(&Led_breath.task, id, 0,10);
}
// 呼吸灯的关闭
void breathLampOff(void)
{
    Led_breath.num_flag = FALSE;
    
    MessageCancelAll(&Led_breath.task,0);  //取消所有呼吸灯的task 任务
    LedConfigure(Led_breath.id,LED_FLASH_ENABLE,0);
    LedConfigure(Led_breath.id,0,0);
// 初始化成普通的LED
    PioSetMapPins32Bank(LED_1_BANK, LED_1_PIO_MASK, LED_1_PIO_MASK);
    PioSetDir32Bank(LED_1_BANK, LED_1_PIO_MASK, LED_1_PIO_MASK);
    PioSetMapPins32Bank(LED_0_BANK, LED_0_PIO_MASK, LED_0_PIO_MASK);
    PioSetDir32Bank(LED_0_BANK, LED_0_PIO_MASK, LED_0_PIO_MASK); 
	
}

// 对呼吸灯的处理
void handleBreathLamp(Task task, MessageId id, Message message)
{
    UNUSED(message);
    UNUSED(id);
    UNUSED(task);
    	if (Led_breath.flag == 1) {
            if (Led_breath.delay_dim_time != 0) Led_breath.delay_dim_time = 0;
            Led_breath.dim += 30;
	        if(Led_breath.dim > 3000)//3500/2
	        {
	            Led_breath.flag = 2;
	        }
		}
	    else if (Led_breath.flag == 2){
            Led_breath.dim -= 30;
            if (Led_breath.dim <=30) {
                Led_breath.flag = 3;
                Led_breath.dim = 0;
            }
	    }
		else if (Led_breath.flag == 3) {
			Led_breath.delay_dim_time +=10;
			if (Led_breath.delay_dim_time > ((Led_breath.time_delay*1000)-3500)) {
                Led_breath.delay_dim_time = 0;
                Led_breath.flag = 1;
            }
		}
	LedConfigure(Led_breath.id,1,Led_breath.dim);
    LedConfigure(Led_breath.id,2,2);
    LedConfigure(Led_breath.id,0,1);
    MessageSendLater(&Led_breath.task,0, 0,20);
}

  呼吸灯的说明就这些了,可以直接拿过去使用。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值