想实现一个类似设置模式的设计,求指点思路。

2019-08-14 07:37发布

想实现一个设计模式,实现的功能就是 按set键进入设置模式,按上下键调节值的大小,再按set键完成参数设置,并进入下一个参数的设置。
我的思路是这样的:
主架构分为三部分:
1、管理函数:
     只调用switch(x)    x初始值为0
               case 0: 设置参数1的函数;break;
               case 1: 设置参数2的函数;break ;
               default: x=0 ;
2、设置参数1的函数:
     while(1)循环
          {
            显示要设置的数据;
            等待键值;
            判断键值进行操作;
                  上下键设置值的大小;
                  set键完成设置并调用 管理函数且x的值+1;
           }
2、设置参数2的函数:
     主体和设置参数1的函数一致,不做赘述;

以上是我写的代码的思路,但是发现无法实现,仅仅切换就有问题,具体现象是,切换到设置参数2后,按set键并没有回到设置函数1的函数,而是卡在这,但是x值已经变了,也调用了管理函数,为什么回不去呢?求指点,或者给指引一条其他的思路都可以。。拜托各位!!!已经多次修正测试好几天了,依旧无果。。想看代码的留言,怕大家看不下去,遂暂时不留代码。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
bayga456
1楼-- · 2019-08-15 05:26
void Keys(void)                        //按键
{
        uchar temp;
        temp=KEY_Scan(0);
        switch(YeMian)
        {
                case 0:                                        //主页面
                        if(temp==3)
                        {
                                num_10=num_1;
                                YeMian++;
                        }
                        break;
                case 1:                                        //页面 1  
                        if(temp==3)
                        {
                                if(num_10!=num_1) Num_Change();
                                num_20=num_2;
                                YeMian++;       
                        }
                        else if(temp==2) num_10--;
                        else if(temp==1) num_10++;
                        break;
                case 2:                                        //页面 2
                        if(temp==3)
                        {
                                if(num_20!=num_2) Num_Change();
                                num_30=num_3;
                                YeMian++;       
                        }
                        else if(temp==2) num_20--;
                        else if(temp==1) num_20++;
                        break;
                case 3:                                        //页面 3
                        if(temp==3)
                        {
                                if(num_30!=num_3) Num_Change();
                                num_40=num_4;
                                YeMian++;       
                        }
                        else if(temp==2) num_30--;
                        else if(temp==1) num_30++;
                        break;
                case 4:                                        //页面 4  
                        if(temp==3)
                        {
                                if(num_40!=num_4) Num_Change();
                                num_50=num_5;
                                YeMian++;       
                        }
                        else if(temp==2) num_40--;
                        else if(temp==1) num_40++;
                        break;
                case 5:                                        //页面 5
                        if(temp==3)
                        {
                                if(num_50!=num_5) Num_Change();
                                YeMian=0;       
                        }
                        else if(temp==2&&num_50>2) num_50--;
                        else if(temp==1&&num_50<20) num_50++;
                        break;
                default : YeMian=0;        break;        //返回主页面
        }
}
以上是已经测试过的程序:
每个页面都有各自的显示内容和数据。
q247341184
2楼-- · 2019-08-15 08:17
我是新学stm32的,对中断这块理解不太够,原子哥有一部分中断相关的教程,但是我看不太懂。有没有稍微具体点的思路?
q247341184
3楼-- · 2019-08-15 08:19
 精彩回答 2  元偷偷看……
xlong_06
4楼-- · 2019-08-15 13:25
1、你直接在set按键里面增加一个标志设置参数的变量,每按一次加1,同时保存上一次的值。2、再上键与下键里面分别判断set中的标志变量来改变你需要设置
        switch(key_value)
       {
               case set: flag++;if(flag==x)flag=0;break;
               case up:
                   switch(flag)
                   {
                   case 0: break;
                   case 1: break;
                    ..........
                   }
               break ;
               case down:
                  switch(flag)
                   {
                   case 0: break;
                   case 1: break;
                    ..........
                   }
               break ;
               default: x=0 ;
       }
3、把你的获取按键的函数与这个一起放在大循环就可以了!
q247341184
5楼-- · 2019-08-15 16:40
xlong_06 发表于 2017-8-17 11:21
1、你直接在set按键里面增加一个标志设置参数的变量,每按一次加1,同时保存上一次的值。2、再上键与下键里 ...

好我试着顺着你的思路写一下试试看。
xlong_06
6楼-- · 2019-08-15 17:55
q247341184 发表于 2017-8-17 11:24
好我试着顺着你的思路写一下试试看。

那个flag==x这个x是你有多少个界面切换,后面那个default: x=0 ;我是照你的程序修改,不记得改了,这个没用

一周热门 更多>