[求助]希望哪位大神能详细解释下基于结构体的那个菜单。

2020-01-20 19:05发布

如题,看了傻孩子的,网上也找了一些,还是看不明白,原谅我这么菜,我找到的程序都没什么注释,说实话真的看不懂,越看越绕,越迷糊。。在此希望哪位大神能给来一个详细的解答。。。拜谢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
lswhome
2020-01-21 03:16
我现在的菜单感觉很土,会浪费大量的代码空间。。。坑。。。

  1. static void System_Set(void)//环境设置子菜单
  2. {
  3.         UINT8 xdata Select=0;
  4.         UINT8 xdata Last_Select=0;
  5.         bit          RePaint=1;//是否重画整个菜单项


  6.         while(1)
  7.         {
  8.                 if(RePaint==1)
  9.                 {
  10.                         ST7565_Paint_RectangleFill(0,0,64,128,0);//清屏
  11.                         ST7565_Paint_Rectangle(0,10,64,108,1);
  12.                         ST7565_Paint_HLine(13,10,108,1);//横线
  13.                         ST7565_Paint_MixStr(1,40,"环境设定",0);
  14.                 }

  15.                 if(Select==0 || Last_Select==0 || RePaint==1)
  16.                 {
  17.                         ST7565_Paint_MixStr(19,40,"系统时间",(Select==0)?1:0);
  18.                 }               

  19.                 if(Select==1 || Last_Select==1 || RePaint==1)
  20.                 {
  21.                         ST7565_Paint_MixStr(32,40,"屏幕设定",(Select==1)?1:0);
  22.                 }               

  23.                 if(Select==2 || Last_Select==2 || RePaint==1)
  24.                 {
  25.                         ST7565_Paint_MixStr(45,40,"重启模式",(Select==2)?1:0);
  26.                 }               

  27.                 RePaint=0;
  28.                 Last_Select=Select;//保存上次的选择
  29.                 ST7565_Paint_Push_Data();//刷新显示

  30.                 //键盘
  31.                 Key_Scan();//扫描键盘
  32.                 while(Key_Trg==0)//等待按一个键
  33.                 {
  34.                         Key_Scan();//扫描键盘
  35.                 }

  36.                 if(Key_Trg & Key_Cancel)//Key_Cancel
  37.                 {
  38.                         break;
  39.                 }
  40.                 if(Key_Trg & Key_plus)//Key_+
  41.                 {
  42.                         (Select>1)?(Select=0):(Select++);
  43.                 }

  44.                 if(Key_Trg & Key_Minus)//Key_-
  45.                 {
  46.                         (Select<1)?(Select=2):(Select--);
  47.                 }

  48.                
  49.                 if(Key_Trg & Key_Ok)//Key_Ok
  50.                 {
  51.                         if(Select==0)
  52.                         {
  53.                                 Menu_Time_Set();//时间设定
  54.                         }

  55.                         if(Select==1)
  56.                         {
  57.                                 Menu_Screen_Set();//屏幕设定
  58.                         }
  59.                        
  60.                         if(Select==2)
  61.                         {
  62.                                 Menu_Boot_Operating();//重启后操作
  63.                         }                       
  64.                         ST7565_Paint_RectangleFill(0,0,64,128,0);//清屏
  65.                         RePaint=1;
  66.                 }
  67.         }
  68. }
复制代码

一个菜单一个函数,都是类似这样的,这样的好处就是节省内存,什么样的奇葩菜单都能做的出来(包括那种可以编辑的,可以调整数字之类的),缺点就是浪费大量的代码空间。。。感觉不好

一周热门 更多>