void LED_Scan(void) // { ((LEDBrightTemp++)>=LEDBright)?(LEDStatus =0):(LEDStatus =1); LEDBrightTemp &=0X0F; switch(LEDStatus) { case 0://灭 GPIOC->BRR=0x0007; break; case 1://显示 DISP_LED(LEDBuffer); break; default:break; } } void LED_ShowProcess(void) { INT8U i, j; for(i=0;i<1;i++) { for(j=0; j<4; j++) { switch(falsebitLEDGroup[i][j]) { case 0x00: //灭 LEDBuffer[i/2] &=~(1<<(j+(i%2)*4));//第一,二,三,四个灯灭的状态 0xfe =1<<i break; case 0x01: //亮 LEDBuffer[i/2] |=1<<(j+(i%2)*4);//第一,二,三,四个灯亮的状态 break; case 0x02: //闪烁 if(LEDflash_Cnt<LEDFLASHTIME)//闪烁周期1000MS { LEDBuffer[i/2] &=~(1<<(j+(i%2)*4)); } else//如果此时灭状态则亮 { LEDBuffer[i/2] |=1<<(j+(i%2)*4); } break; default: break; } } } }
时间: 2024-04-27 16:24:42 浏览: 34
这是一个控制LED灯闪烁的函数。具体实现如下:
void LED_Scan(void)
该函数用于控制LED灯的扫描和显示状态。
((LEDBrightTemp++)>=LEDBright)?(LEDStatus =0):(LEDStatus =1);
该语句用于控制LED的亮度,当亮度达到最大值时,LED状态设置为0(灭),否则设置为1(显示)。
LEDBrightTemp &=0X0F;
该语句用于控制LED的亮度,将LEDBrightTemp与0X0F进行与操作,得到的结果为LED亮度的范围。
switch(LEDStatus)
该语句用于对LED的状态进行判断,根据不同的状态,执行不同的操作。
case 0://灭
当LED状态为0(灭)时,关闭GPIOC的前三个引脚,即灯不亮。
case 1://显示
当LED状态为1(显示)时,调用DISP_LED函数,根据LEDBuffer数组中存储的数据,控制LED的亮灭。
void LED_ShowProcess(void)
该函数用于显示LED灯的状态。
for(i=0;i<1;i++)
{
for(j=0; j<4; j++)
{
switch(falsebitLEDGroup[i][j])
{
case 0x00: //灭
LEDBuffer[i/2] &=~(1<<(j+(i%2)*4));//第一,二,三,四个灯灭的状态 0xfe =1<<i
break;
case 0x01: //亮
LEDBuffer[i/2] |=1<<(j+(i%2)*4);//第一,二,三,四个灯亮的状态
break;
case 0x02: //闪烁
if(LEDflash_Cnt<LEDFLASHTIME)//闪烁周期1000MS
{
LEDBuffer[i/2] &=~(1<<(j+(i%2)*4));
}
else//如果此时灭状态则亮
{
LEDBuffer[i/2] |=1<<(j+(i%2)*4);
}
break;
default:
break;
}
}
}
该函数使用嵌套循环,遍历falsebitLEDGroup数组,根据数组中存储的数据,控制LED的亮灭。当灯需要闪烁时,根据LEDFLASHTIME和LEDflash_Cnt的值进行判断,如果在闪烁周期内,则灯灭,否则灯亮。
阅读全文