下面代码是实现数码管上显示的简单代码,如果去掉case 7 //1处代码的话,编译通过,如果打开//1处代码的话,就出现严重警告错误,很简单的软件逻辑,不可思议为啥IAR EWSTM8会认为该处非法呢?弹出的错误提示信息如附件中的JPG文件所示
//停止状态下,数码管轮流显示 A->B->C->D->E->F->A
void StopStatus(void)
{
switch(stop_step)
{
case 0: //工作状态下或者是设置参数状态下
iStopStatusDelay = iDelayNow;
break;
case 1: //显示A
stop_step = 2;
SPI->DR = 0x7f;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0x7f;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
break;
case 2: //等待 A 显示0.1秒后显示 B
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 3;
SPI->DR = 0xfe;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0xfe;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
}
break;
case 3: //等待 B 显示0.1秒后显示 C
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 4;
SPI->DR = 0xfd;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0xfd;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
}
break;
case 4: //等待 C 显示0.1秒后显示 D
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 5;
SPI->DR = 0xfb;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0xfb;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
}
break;
case 5: //等待 D 显示0.1秒后显示 E
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 6;
SPI->DR = 0xf7;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0xf7;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
}
break;
case 6: //等待 E 显示0.1秒后显示 F
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 7;
SPI->DR = 0xef;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = 0xef;
while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
GPIO_WriteLow(GPIOE, SCLK595);
GPIO_WriteHigh(GPIOE, SCLK595);
iStopStatusDelay = iDelayNow;
}
break;
case 7: //等待 F 显示0.1秒后显示 A
if(Calculate_10ms_Based_TimerDelay(iStopStatusDelay) >= 10)
{
stop_step = 1; //1处
}
break;
}
}
-
-
IARCUOWU.JPG
(13.05 KB)