用5msTime扫8个LED,视觉上不能常量
平台STC8H1K08,效果上8个在亮,为了降低功耗,用5ms 去轮流点亮每个LED,闪烁的厉害,视觉上感觉不到全部同时在亮,能否有其它中断扫描可以做到不闪烁?代码如下:
void TM0_Isr(void) interrupt 1
{//T = 5ms
WDT_Clean();
if(AllFlag.Flag.ADC_Change_Stop_Flag)
{
if(ADCChargeTime < 250)
ADCChargeTime++;
}
CloseAllLED();
++ LED_i;
if(LED_i >= 8)
{
LED_i = 0;
}
switch(LED_i)
{
case 0:if(LED_light_Flag & Light_LED1){ LED1 = 0;}break;
case 1:if(LED_light_Flag & Light_LED2){ LED2 = 0;}break;
case 2:if(LED_light_Flag & Light_LED3){ LED3 = 0;} break;
case 3:if(LED_light_Flag & Light_LED4){ LED4 = 0;} break;
case 4:if(LED_light_Flag & Light_LED5){ LED5 = 0;} break;
case 5:if(LED_light_Flag & Light_LED6){ LED6 = 0;} break;
case 6:if(LED_light_Flag & Light_LED7){ LED7 = 0;} break;
case 7:if(LED_light_Flag & Light_LED8){ LED8 = 0;} break;
}
}
在保持视觉效果同时降低功耗方面,可以考虑以下方法:
1. 分批次点亮LED
在中断扫描完成后,将LEDi的值分组,按顺序点亮每个LED。例如,按顺序点亮LED1、LED2、LED3等,每次点亮一个LED,避免所有LED同时亮起。这样可以减少闪烁次数,同时保持视觉效果。
2. 调整中断时机
在中断发生时,根据LEDi的值,每隔一定时间点亮一个LED,而不是同时点亮所有。例如,每隔5ms点亮一个LED,这样可以减少闪烁频率,同时保持视觉效果。
3. 使用中断扫描的分批次处理
将中断的处理逻辑重新设计,分批次点亮LED。例如,按顺序点亮LED1、LED2、LED3等,每次点亮一个LED,避免所有LED同时亮起。这样可以减少闪烁次数,同时保持视觉效果。
4. 利用灯的物理特性
调整灯的电源和控制电路,减少同时点亮的可能性。例如,使用不同的控制信号,或通过一些其他的中断方式,来分批点亮LED。
通过以上方法,可以实现视觉效果同时降低功耗。具体实现需要根据灯的物理特性进行调整,或者根据应用需求重新设计中断处理逻辑。
[本文内容由国芯人工智能辅助生成,仅供参考] 频率25Hz,不够,提高到50Hz或以上
页:
[1]