请教:各位大侠在C语言switch中要延时一些时间怎样搞?

2019-12-13 18:20发布

看代码,Shop_Process()是在主函数大循环中的,非阻塞,在switch中执行了一些动作后有时候想保持一些时间再进行下一步,各位怎样弄的?
下面的代码用了一个SHOP_DELAY,这个问题很明显,后面的要延时又加SHOP_DELAY1,SHOP_DELAY2,SHOP_DELAY3.....搞得程序很难看
想到用两个变量,一个是延时时间长,一个是要跳转的id,每一次延时之前设置这两个变量,然后进入SHOP_DELAY,完成后再根据id跳转。
感觉这样会好一点。不知道有没有更好的办法?

  1. fsm_rt_t Shop_Process(void)
  2. {
  3.         enum {
  4.                 SHOP_START = 0,
  5.                 SHOP_DELAY,
  6.                 SHOP_NEXT,
  7.     };
  8.         static uint8_t state=SHOP_START;
  9.         static uint16_t tim=0;
  10.         static uint16_t delTim=60;

  11.         uint8_t i;
  12.        
  13.         switch(state)
  14.         {
  15.                 case SHOP_START:
  16.                         LCD_ShowString(0,0,"    显示几秒    ");
  17.                         LCD_ShowString(0,1,"                ");
  18.                         LCD_ShowString(0,2,"                ");
  19.                         state++;
  20.                 case SHOP_DELAY: {
  21.                         if(++tim<100) return fsm_rt_on_going;
  22.                         tim = 0;
  23.                         state = SHOP_NEXT;
  24.                         }break;
  25.                 case SHOP_NEXT: {
  26.                        
  27.                         }break;
  28.                 default:
  29.                         state = SHOP_START;
  30.                         break;
  31.         }
  32.         return fsm_rt_on_going;
  33. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
guolun
1楼-- · 2019-12-13 23:37
我用的方法相似。
# define ms200 200
static u32 ms;
extern u32 system_ms; // 系统上电后在systick中断里面累计。
case n:
    ms = system_ms;
case n+1:
    if(system_ms - ms >= ms200 ) ......

   
   
usnmyrj
2楼-- · 2019-12-14 00:58
定时器 设置 变量,switch 判断
icoyool
3楼-- · 2019-12-14 03:25
给你几个建议,
1, 看楼主是点阵的LCD吧, LCD扫描写到内存去, 不要直接操作IO, 定时刷新一下即可
2,用指针函数替代switch, 具体搜索其他人的提问
bg6agf
4楼-- · 2019-12-14 06:55
 精彩回答 2  元偷偷看……
Jmhh247
5楼-- · 2019-12-14 10:38
看一下我这个帖子:[代码分享]一个简单好用的轮询延时器模块

27楼有讲到switch中配合延时器的使用,你可以参考下,可能会帮到你。
ywlzh
6楼-- · 2019-12-14 12:46
拆开吧  没有必要把全部整合到一起

一周热门 更多>