呼吸灯 裸机 S3C2416

不废话,直接上代码

void led_ctrl(uint8_t chDataH,uint8_t chDataL)
{
    if(chDataH > chDataL){
        LED0_ON();
    }else{
        LED0_OFF();
    }
}

void breath_led(void)
{
    #define     c_wSmooth   8       //平滑度
    #define     c_wSpeed    19      //呼吸速度
    
    static uint32_t s_wData = 0;
    uint8_t chDataL = s_wData&(BITS(c_wSmooth)-1);
    uint8_t chDataH = (s_wData>>(c_wSpeed-c_wSmooth))&(BITS(c_wSmooth)-1);
    
    if(s_wData&(BITS(c_wSpeed))){
        chDataH = ~chDataH;
    }
    
    led_ctrl(chDataH,chDataL);
    s_wData ++;
    
    #undef      c_wSmooth
    #undef      c_wSpeed
}

需要手动实现的部分为:

#define BITS(n)				((uint32_t)(1<<(n)))

#define LED0_ON()   do{led_0_on();}while(0)
#define LED0_OFF()   do{led_0_off();}while(0)
LED0_ON() 可以手动修改


这种方式的呼吸灯适用于较高的调用频率

你可能感兴趣的:(呼吸灯 裸机 S3C2416)