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

2020-01-20 19:05发布

如题,看了傻孩子的,网上也找了一些,还是看不明白,原谅我这么菜,我找到的程序都没什么注释,说实话真的看不懂,越看越绕,越迷糊。。在此希望哪位大神能给来一个详细的解答。。。拜谢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
lswhome
2020-01-21 06:26
比如这个也算是个菜单,可以调整一些参数,界面也不难看。


  1. static void Menu_Screen_Set(void)//屏幕设定
  2. {

  3.         UINT8 xdata Select=0;
  4.         UINT8 xdata Last_Select=0;
  5.         bit RePaint_Menu=1;
  6.        
  7.         UINT8  xdata str[4];
  8.         UINT8 xdata tmp1=Roms[0];
  9.         UINT8 xdata tmp2=Roms[1];
  10.         UINT8 xdata tmp3=Roms[31];
  11.         bit          RePaint=1;//是否重画整个菜单项

  12.         while(1)
  13.         {
  14.                 if(RePaint==1)
  15.                 {
  16.                         ST7565_Paint_RectangleFill(0,0,64,128,0);//清屏
  17.                         ST7565_Paint_Rectangle(0,8,64,112,1);//边框
  18.                         ST7565_Paint_HLine(13,8,112,1);//横线
  19.                         ST7565_Paint_MixStr(1,40,"屏幕设定",0);

  20.                         ST7565_Paint_MixStr(18,28,"屏幕对比度",0);
  21.                     ST7565_Paint_MixStr(32,19,"关闭时间 时  分",0);
  22.                         ST7565_Paint_MixStr(46,22,"数码管对比度",0);

  23.                         ST7565_Paint_HLine(30,88,12,1);//
  24.                         ST7565_Paint_HLine(44,67,6,1);//
  25.                         ST7565_Paint_HLine(44,85,12,1);//                       
  26.                         ST7565_Paint_HLine(58,94,12,1);//

  27.                 }
  28.                 if(Select==0 || Last_Select==0 || RePaint_Menu==1)//选择了第1项
  29.                 {
  30.                         sprintf(str,"%02d", (UINT16)tmp1);//对比度
  31.                         ST7565_Paint_MixStr(18,88,str,(Select==0)?1:0);
  32.                 }
  33.                
  34.                 if(Select==1 || Last_Select==1 || RePaint_Menu==1)//选择了第1项
  35.                 {       
  36.                         sprintf(str,"%01d", (UINT16)(tmp2/60));//
  37.                         ST7565_Paint_MixStr(32,67,str,(Select==1)?1:0);//时
  38.                         sprintf(str,"%02d", (UINT16)(tmp2%60));//
  39.                         ST7565_Paint_MixStr(32,85,str,(Select==1)?1:0);//分
  40.                 }
  41.        
  42.                 if(Select==2 || Last_Select==2 || RePaint_Menu==1)//选择了第1项
  43.                 {
  44.                         sprintf(str,"%02d", (UINT16)(tmp3));//
  45.                         ST7565_Paint_MixStr(46,94,str,(Select==2)?1:0);//数码管对比度
  46.                 }

  47.                
  48.                 RePaint=0;
  49.                 Last_Select=Select;//保存上次的选择
  50.                 ST7565_Paint_Push_Data();//刷新显示

  51.                 //键盘
  52.                 Key_Scan();//扫描键盘
  53.                 while(Key_Trg==0)//等待按一个键
  54.                 {
  55.                         Key_Scan();//扫描键盘
  56.                 }

  57.                 if(Key_Trg & Key_Cancel) break;

  58.                 if(Key_Trg & Key_Select)
  59.                 {
  60.                         Select>1?Select=0:Select++;
  61.                 }

  62.                 if(Key_Trg & Key_plus)
  63.                 {
  64.                         if(Select==0) (tmp1>51)?(tmp1=25):(tmp1++);//对比度
  65.                         if(Select==1) (tmp2>254)?(tmp2=1):(tmp2++);//关屏时间
  66.                         if(Select==2)  (tmp3>6)?(tmp3=0):(tmp3++);
  67.                 }

  68.                 if(Key_Trg & Key_Minus)
  69.                 {
  70.                         if(Select==0) (tmp1<26)?(tmp1=52):(tmp1--);//对比度
  71.                         if(Select==1) (tmp2<2)?(tmp2=255):(tmp2--);//关屏时间
  72.                         if(Select==2) (tmp3<1)?(tmp3=7):(tmp3--);
  73.                 }

  74.                 if(Key_Trg & Key_Ok)
  75.                 {
  76.                         Roms[0]=tmp1;//对比度的值
  77.                         Roms[1]=tmp2;//关屏时间的值                       
  78.                         Roms[31]=tmp3;
  79.                         SaveOfSetting();//保存设置
  80.                         break;
  81.                 }
  82.                 ST7565_Set_Contrast(tmp1);//即时做出对比度的设定
  83.                 TM1638_SetContrast(tmp3);//立即更改TM1638的对比度
  84.         }

  85. }

复制代码

一周热门 更多>