看代码,Shop_Process()是在主函数大循环中的,非阻塞,在switch中执行了一些动作后有时候想保持一些时间再进行下一步,各位怎样弄的?
下面的代码用了一个SHOP_DELAY,这个问题很明显,后面的要延时又加SHOP_DELAY1,SHOP_DELAY2,SHOP_DELAY3.....搞得程序很难看
想到用两个变量,一个是延时时间长,一个是要跳转的id,每一次延时之前设置这两个变量,然后进入SHOP_DELAY,完成后再根据id跳转。
感觉这样会好一点。不知道有没有更好的办法?
- fsm_rt_t Shop_Process(void)
- {
- enum {
- SHOP_START = 0,
- SHOP_DELAY,
- SHOP_NEXT,
- };
- static uint8_t state=SHOP_START;
- static uint16_t tim=0;
- static uint16_t delTim=60;
- uint8_t i;
-
- switch(state)
- {
- case SHOP_START:
- LCD_ShowString(0,0," 显示几秒 ");
- LCD_ShowString(0,1," ");
- LCD_ShowString(0,2," ");
- state++;
- case SHOP_DELAY: {
- if(++tim<100) return fsm_rt_on_going;
- tim = 0;
- state = SHOP_NEXT;
- }break;
- case SHOP_NEXT: {
-
- }break;
- default:
- state = SHOP_START;
- break;
- }
- return fsm_rt_on_going;
- }
复制代码
# define ms200 200
static u32 ms;
extern u32 system_ms; // 系统上电后在systick中断里面累计。
case n:
ms = system_ms;
case n+1:
if(system_ms - ms >= ms200 ) ......
1, 看楼主是点阵的LCD吧, LCD扫描写到内存去, 不要直接操作IO, 定时刷新一下即可
2,用指针函数替代switch, 具体搜索其他人的提问
27楼有讲到switch中配合延时器的使用,你可以参考下,可能会帮到你。
一周热门 更多>