原理:分时驱动LED_PIN1,LED_PIN2,LED_PIN3为低电平。再来同时置位LED_SEG1,LED_SEG2,LED_SEG3,LED_SEG4,达到分时点亮矩阵LED的效果,
缺点是LED比正常点亮暗一些,其他无差异。
上程序
void swled(void)
{
static uint8_t ledstep;
if(ledstate & 0x0080) //解决未开机亮灯的问题 test0
{
if(ledstep == 0)
{
LED_SEG1 = 1;
LED_SEG2 = 0;
LED_SEG3 = 0;
if(ledstate & 0x0001) //时间4 //8小时
{
LED_PIN1= 0;
}
else
{
LED_PIN1= 1;
}
if(ledstate & 0x0002) //时间3 //5小时
{
LED_PIN2 = 0;
}
else
{
LED_PIN2 = 1;
}
if(ledstate & 0x0004) //时间2 //3小时
{
LED_PIN3 = 0;
}
else
{
LED_PIN3 = 1;
}
if(ledstate & 0x0008) //时间1 //1小时
{
LED_PIN4 = 0;
}
else
{
LED_PIN4 = 1;
}
}
else if(ledstep == 1)
{
LED_SEG1 = 0;
LED_SEG2 = 1;
LED_SEG3 = 0;
if(ledstate & 0x0010) //角度120
{
LED_PIN1= 0;
}
else
{
LED_PIN1= 1;
}
if(ledstate & 0x0020) //角度90
{
LED_PIN2 = 0;
}
else
{
LED_PIN2 = 1;
}
if(ledstate & 0x0040) //角度60
{
LED_PIN3 = 0;
}
else
{
LED_PIN3 = 1;
}
if(ledstate & 0x0080) //开关机
{
LED_PIN4 = 0;
}
else
{
LED_PIN4 = 1;
}
}
else if(ledstep == 2)
{
LED_SEG1 = 0;
LED_SEG2 = 0;
LED_SEG3 = 1;
if(ledstate & 0x0100) //暖风强
{
LED_PIN1= 0;
}
else
{
LED_PIN1= 1;
}
if(ledstate & 0x0200) //暖风弱
{
LED_PIN2 = 0;
}
else
{
LED_PIN2 = 1;
}
if(ledstate & 0x0400) //冷风
{
LED_PIN3 = 0;
}
else
{
LED_PIN3 = 1;
}
}
if(ledstep < 3) //分三段点亮,切换段
{
ledstep++;
}
else
{
ledstep = 0;
}
}
else
{
LED_SEG1 = 0;
LED_SEG2 = 0;
LED_SEG3 = 0;
LED_PIN1 = 0;
LED_PIN2 = 0;
LED_PIN3 = 0;
LED_PIN4 = 0;
}
}
标签:LED,分时,点亮,ledstate,else,PIN3,PIN2,PIN1
From: https://www.cnblogs.com/logicexpression/p/17555714.html