找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8410|回复: 21
打印 上一主题 下一主题
收起左侧

单片机+LCD19264液晶屏三级菜单程序 大数字电子钟

  [复制链接]
跳转到指定楼层
楼主
ID:114701 发表于 2020-6-30 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写的LCD液晶屏菜单程序,实现时钟的年月日时分秒的调节,实现闹钟的设置,实现温度的上下限设置并按照设置值驱动继电器,温度和闹钟的设置参数都写入EEPROM中,掉电开机设置参数不丢失,大个数字显示时分秒。菜单为三级,三级留空白,可自行添加内容,自己写的,水平有限,发给坛里师兄吐槽,共同进步,下一步写一个结构体加指针的菜单程序。望坛里师傅有的奉献出来一下,谢谢。

制作出来的实物图如下:


单片机源程序如下:
  1. #include "LCD19264.h"
  2. #include "1302.H"
  3. #include "18B20.h"
  4. #include "tm1650.h"
  5. #include "24C16.h"
  6. #include "UART.h"
  7. #include "Fonts.h"
  8. #include "delay.h"
  9. #include "FengMingQiJiDianQi.h"
  10. bit MenuFlag1,MenuFlag2,MenuFlag3;   // 各级菜单标志位,如果为1代表已进入该机菜单,为0代表退出该级菜单
  11. char NaoZhongShi=8,NaoZhongFen=0,NaoZhongMiao=0;  //这里用char而不是unsigned char 的原因是操作此变量时减到0就停止,如果定义unsigned char,变量减到小于0就自动变为65535
  12. uchar kjcs;      //开机次数
  13. uchar key,num;       //键值
  14. uint wenduszd,wenduszg;//温度设置上下限值,wenduszd温度设置低,wenduszg温度设置高,wdszgzjz温度设置高未保存的值,wdszdzjz温度设置高未保存的值
  15. #define SHORT_JIAO 80
  16. #define LONG_JIAO 150
  17. /************************************待机页面函数**********************************/
  18. void DeskWall() //待机桌面
  19. {                  
  20.     Read_temp();   //读取温度值
  21.     Read_time();         //读取时间值
  22. //  Disp_chinese_16x16(176,0,0,leijijd[8]);//在右上角显示电池电量图案
  23. //        Disp_chinese_16x16(0,0,0,leijijd[9]);//在右上角显示WIFI信号图案
  24.           if(shi==NaoZhongShi&&fen==NaoZhongFen&&miao==NaoZhongMiao)
  25.                 {
  26.                         ClearDisplay(); //清理一次屏幕
  27.                 }
  28.                 if(shi==NaoZhongShi&&fen==NaoZhongFen&&miao<NaoZhongMiao+30)
  29.                 {
  30.                         Beep(50,5,5); //闹钟响起
  31.                         Beep(50,8,4);
  32.                         Disp_chinese_N_16x16(48,2,2,1,NZSZ);  //显示“闹钟”设置2个字       
  33.                         Disp_chinese_N_16x16(80,2,2,1,SJSZ);  //显示“时间”设置2个字
  34.                         Disp_chinese_16x16(112,2,1,leijijd[4]);//显示“到”字
  35.                 }       
  36.                 else
  37.                 {
  38. /******************显示年 月 日 时 分 秒 星期  ************************/      
  39.     Disp_Char_16x32(32,4,0,DSZ[shi/10%10]);  
  40.     Disp_Char_16x32(48,4,0,DSZ[shi%10]);
  41.     Disp_Char_16x32(64,4,0,DSZ[10]);   //冒号
  42.     Disp_Char_16x32(80,4,0,DSZ[fen/10%10]);
  43.     Disp_Char_16x32(96,4,0,DSZ[fen%10]);
  44.     Disp_Char_16x32(112,4,0,DSZ[10]);   //冒号
  45.     Disp_Char_16x32(128,4,0,DSZ[miao/10%10]);
  46.     Disp_Char_16x32(144,4,0,DSZ[miao%10]);
  47.     Disp_Char(0,6,0,SZ[nian/10%10]);
  48.     Disp_Char(8,6,0,SZ[nian%10]);
  49.     Disp_chinese_16x16(16,6,0,NYRSFMZ[0]); //年字
  50.     Disp_Char(32,6,0,SZ[yue/10%10]);  
  51.     Disp_Char(40,6,0,SZ[yue%10]);
  52.     Disp_chinese_16x16(48,6,0,NYRSFMZ[1]); //月字
  53.     Disp_Char(64,6,0,SZ[ri/10%10]);
  54.     Disp_Char(72,6,0,SZ[ri%10]);       
  55.     Disp_chinese_16x16(80,6,0,NYRSFMZ[2]); //日字
  56.     switch(xingqi) //将星期1-7转换成中文显示
  57.     {
  58.         case 1: {
  59.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  60.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[1]);
  61.                  };break;
  62.         case 2: {
  63.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  64.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[2]);
  65.                 };break;
  66.         case 3: {
  67.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  68.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[3]);
  69.                 };break;
  70.         case 4: {
  71.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  72.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[4]);
  73.                 };break;
  74.         case 5: {
  75.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  76.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[5]);
  77.                 };break;
  78.         case 6: {
  79.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  80.                     Disp_chinese_16x16(112,6,0,DaXieShuZi[6]);
  81.                 };break;
  82.         case 7: {
  83.                     Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
  84.                     Disp_chinese_16x16(112,6,0,NYRSFMZ[2]);
  85.                 };break;
  86.     }
  87.                 /*************************************显示温度值*********************************************/       
  88. //////////////////////////////////如果温度为零下时////////////////////////////////////////
  89. if(tflag==1)  
  90. {
  91.    
  92.     if(tvalue==0)
  93.     {
  94.         Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  95.         Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  96.         Disp_Char(152,6,0,F8X16[0]);//用空白字模擦除不需要显示的内容
  97.         Disp_Char(160,6,0,F8X16[0]);  //用空白字模擦除不需要显示的内容
  98.         Disp_Char(168,6,0,SZ[0]);
  99.         Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  100.         Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"         
  101.     }
  102.     else
  103.     {
  104.         if(tvalue<10)
  105.         {
  106.             Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  107.             Disp_Char(144,6,0,F8X16[13]); //用空白字模擦除不需要显示的内容
  108.             Disp_Char(152,6,0,SZ[0]);
  109.             Disp_Char(160,6,0,F8X16[14]);  //小数点
  110.             Disp_Char(168,6,0,SZ[tvalue%10]);
  111.             Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  112.             Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"         
  113.         }
  114.         else
  115.         {
  116.             if(tvalue<100)
  117.             {
  118.                 Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  119.                 Disp_Char(144,6,0,F8X16[13]); //用空白字模擦除不需要显示的内容
  120.                 Disp_Char(152,6,0,SZ[tvalue/10%10]);
  121.                 Disp_Char(160,6,0,F8X16[14]);  //小数点
  122.                 Disp_Char(168,6,0,SZ[tvalue%10]);
  123.                 Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  124.                 Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"
  125.             }
  126.             else
  127.             {
  128.                 if(tvalue<1000)
  129.                 {
  130.                     Disp_Char(136,6,0,F8X16[13]); //用空白字模擦除不需要显示的内容
  131.                     Disp_Char(144,6,0,SZ[tvalue/100%10]); //显示温度十位
  132.                     Disp_Char(152,6,0,SZ[tvalue/10%10]);
  133.                     Disp_Char(160,6,0,F8X16[14]);  //小数点
  134.                     Disp_Char(168,6,0,SZ[tvalue%10]);
  135.                     Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  136.                     Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"                  
  137.                 }
  138.              /*   else  //一般不会达到零下100度的低温,不做无意义的事情,在这里屏蔽掉此段,
  139.                 {
  140.                     Disp_Char(136,6,0,SZ[tvalue/1000%10]);//温度的负数和超过100度温度时的显示待处理
  141.                     Disp_Char(144,6,0,SZ[tvalue/100%10]); //显示温度十位
  142.                     Disp_Char(152,6,0,SZ[tvalue/10%10]);
  143.                     Disp_Char(160,6,0,F8X16[14]);  //小数点
  144.                     Disp_Char(168,6,0,SZ[tvalue%10]);
  145.                     Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  146.                     Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"
  147.                 }  */
  148.             }
  149.         }
  150.     }  
  151. }
  152. else
  153. ////////////////////如果温度为正时/////////////////////////////////////////////
  154. {
  155.     if(tvalue==0)
  156.     {
  157.         Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  158.         Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  159.         Disp_Char(152,6,0,F8X16[0]);//用空白字模擦除不需要显示的内容
  160.         Disp_Char(160,6,0,F8X16[0]);  //用空白字模擦除不需要显示的内容
  161.         Disp_Char(168,6,0,SZ[0]);
  162.         Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  163.         Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"   
  164.     }
  165.     else
  166.     {
  167.     if(tvalue<10)
  168.     {
  169.         Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  170.         Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  171.         Disp_Char(152,6,0,SZ[0]);
  172.         Disp_Char(160,6,0,F8X16[14]);  //小数点
  173.         Disp_Char(168,6,0,SZ[tvalue%10]);
  174.         Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  175.         Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"
  176.     }
  177.     else
  178.     {
  179.     if(tvalue<100)
  180.     {
  181.         Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  182.         Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  183.         Disp_Char(152,6,0,SZ[tvalue/10%10]);
  184.         Disp_Char(160,6,0,F8X16[14]);  //小数点
  185.         Disp_Char(168,6,0,SZ[tvalue%10]);
  186.         Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  187.         Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"
  188.     }
  189.     else
  190.     {
  191.         if(tvalue<1000)
  192.         {
  193.             Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要显示的内容
  194.             Disp_Char(144,6,0,SZ[tvalue/100%10]); //显示温度十位
  195.             Disp_Char(152,6,0,SZ[tvalue/10%10]);
  196.             Disp_Char(160,6,0,F8X16[14]);  //小数点
  197.             Disp_Char(168,6,0,SZ[tvalue%10]);
  198.             Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  199.             Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"        
  200.         }
  201.         else
  202.         {
  203.             Disp_Char(136,6,0,SZ[tvalue/1000%10]);//温度的负数和超过100度温度时的显示待处理
  204.             Disp_Char(144,6,0,SZ[tvalue/100%10]); //显示温度十位
  205.             Disp_Char(152,6,0,SZ[tvalue/10%10]);
  206.             Disp_Char(160,6,0,F8X16[14]);  //小数点
  207.             Disp_Char(168,6,0,SZ[tvalue%10]);
  208.             Disp_Char(176,6,0,F8X16[97]); //温度符号摄氏度的点
  209.             Disp_Char(184,6,0,F8X16[35]); //温度符号摄氏度的"C"
  210.         }
  211.       }
  212.     }
  213.    }
  214. }
  215.                 }
  216. }       
  217. /**********************************************************************************/

  218. /*******************************主函数************************************/
  219. void main()
  220. {
  221.         char i=0; //将i的数据类型定义为char型,而不是unsigned char 型,在通过按键调节减这个变量时不会出现小于0时自动到255,而是停留在0不变
  222.         uchar col,lie,cachu,kong;
  223.         char flash=0; //反白显示温度调节的上下限值,在902行温度设置部分使用此变量
  224.         uchar j=0,k=0;//将j默认定位在6是让调节选定用箭头放在分钟值上。k是闹钟时间值调节的位置
  225.         bit Set_OK_Flag = 0;  //设定OK标志位
  226.         P4M1=0x0C;  //将P4端口设为普通IO口
  227.         P4M0=0x7E;
  228.   P4SW=0x70;
  229.         LcdInit();    //LCD初始化
  230.         InitUART();   //串口初始化
  231.         Init_time(30,59,10,02,14,01,20); //系统时间初始化
  232.         x24C02_init(); //24c02初始化函数
  233.         kjcs = x24C02_read(2);//把24c02的地址2读出来的数据赋给kjcs
  234.         delay_xms(50);         
  235.         wenduszg = x24C02_read(3);   //把24c16的地址3读出来的数据赋给wenduszg
  236.         delay_xms(50);
  237.         wenduszd = x24C02_read(4);   //把24c16的地址4读出来的数据赋给wenduszd
  238.         delay_xms(50);
  239.         NaoZhongShi = x24C02_read(5);   //把24c16的地址4读出来的数据赋给NaoZhongShi
  240.         delay_xms(10);
  241.         NaoZhongFen = x24C02_read(6);   //把24c16的地址4读出来的数据赋给NaoZhongFen
  242.         delay_xms(10);
  243.         NaoZhongMiao = x24C02_read(7);   //把24c16的地址4读出来的数据赋给NaoZhongMiao
  244.         delay_xms(10);
  245.         if(kjcs>9999) //限制开机次数计到9999后就归零
  246.                 kjcs = 0;
  247.                 kjcs++;   //每次开机就加1
  248.         delay_xms(20); //延时20毫秒
  249.         x24C02_write(2,kjcs);  //在24c02中的地址2写入数据开机次数
  250.         ClearDisplay(); //清理一次屏幕
  251.   DeskWall();//待机页面 */       
  252.         while(1)
  253.         {       
  254.           key=Scan_Key();  //获取键值
  255. //                num = Key_Get_Num();
  256. //                Disp_Char(0,0,0,SZ[num%10]);//在右上角显示按键值,用于调试
  257. //                Disp_Char(168,0,0,SZ[key/100%10]);//在右上角显示按键值,用于调试
  258. //                Disp_Char(176,0,0,SZ[key/10%10]); //K
  259. //                Disp_Char(184,0,0,SZ[key%10]);//在右上角显示按键值,用于调试
  260. /**************************制冷模式的温控*************************************************/
  261.                 if(((tvalue/10)>wenduszg)) //如果温度高于上限值,并且在温度设置界面时,继电器吸合制冷,显示“开启”
  262.                 {
  263.                         JDQ = 0;
  264.                 }
  265.                 else
  266.                 if(((tvalue/10)<wenduszd))   //如果温度低于下限值,并且在温度设置界面时,继电器释放制冷,显示“关闭”
  267.                 {
  268.                         JDQ = 1;
  269.                 }               
  270. /***************************************************************************************/
  271.                
  272. /**************************制热模式的温控************************************************/
  273. //                if((tvalue/10)<wenduszd) //如果温度低于下限值,继电器吸合制热升温
  274. //                {
  275. //                        JDQ = 0;
  276. //                }
  277. //                else
  278. //                if((tvalue/10)>wenduszg)
  279. //                {
  280. //                        JDQ = 1;
  281. //                }               
  282. /***************************************************************************************/               
  283.                 if(MenuFlag1==0) //如果1级菜单退出,
  284.                    DeskWall();        //则显示桌面
  285.                 //////////////////////////////////////////////菜单框架
  286.                 if(key==ENT)//如果待机时不断地按ENT键,一级一级深入各级菜单
  287.                 {
  288.                                
  289.                          if(key==ENT&&MenuFlag1==0&&MenuFlag2==0&&MenuFlag3==0)
  290.                          {
  291.                                         ClearDisplay(); //清理一次屏幕
  292.                                         Beep(SHORT_JIAO,8,4);
  293.                                         MenuFlag1=1;
  294.                                   Set_OK_Flag = 0;
  295.                                 Disp_chinese_16x16(48,i,0,leijijd[5]);//显示“箭头”在几行之间移动动
  296.                                 Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示"时间设置"4个字       
  297.                           Disp_chinese_N_16x16(64,2,4,0,NZSZ);  //在第二行显示"闹钟设置"4个字
  298.                           Disp_chinese_N_16x16(64,4,4,0,WDSZ);  //在第三行显示"温度设置"4个字
  299.                                 Disp_Char(64,6,0,ZM[6]);
  300.                                 Disp_Char(72,6,0,ZM[15]);
  301.                                 Disp_Char(80,6,0,ZM[18]);
  302.                                 Disp_chinese_N_16x16(88,6,2,0,XX);           //在第四行显示"GPS信息"5个字       
  303.                          }
  304.                          else
  305.                          {
  306.                                         if(key==ENT&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0)
  307.                                         {
  308.                                                  ClearDisplay(); //清理一次屏幕
  309.                                                  Beep(SHORT_JIAO,8,4);
  310.                                                  MenuFlag2=1;
  311.                                                  Set_OK_Flag = 0;
  312.                                                   j = 1;
  313.                                                    k = 1;
  314.                                                   switch(k)  //通过调整k的值,对应赋lie的值,lie就是向上箭头位置,就是调节值的位置
  315.                                                         {
  316.                                                                 case 1: { lie = 64;  };break;
  317.                                                                 case 2: { lie = 88; };break;
  318.                                                                 case 3: { lie = 112; };break;
  319.                                                                
  320.                                                         }
  321.                                                   switch(j)  //通过调整j的值,对应赋col的值,col就是向上箭头位置,就是调节值的位置
  322.                                                         {
  323.                                                                 case 1: { col = 0;  };break;
  324.                                                                 case 2: { col = 32; };break;
  325.                                                                 case 3: { col = 64; };break;
  326.                                                                 case 4: { col = 112; };break;
  327.                                                                 case 5: { col = 128; };break;
  328.                                                                 case 6: { col = 152; };break;
  329.                                                                 case 7: { col = 176; };break;
  330.                                                         }
  331.                                                  switch(i)  //2级菜单要显示的内容决定于i的值,i值刚好在1级菜单时通过DOWM和UP键设定好了
  332.                                                         {
  333.                                                                 case 0: { //i等于0时显示时间设置的具体界面
  334.                                                                                     Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示"时间设置"4个字       
  335.                                                                                                                         Disp_chinese_16x16(col,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  336.                                                                                                                         Disp_Char(0,2,0,SZ[nian/10%10]);
  337.                                                                                                                         Disp_Char(8,2,0,SZ[nian%10]);
  338.                                                                                                                         Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
  339.                                                                                                                         Disp_Char(32,2,0,SZ[yue/10%10]);  
  340.                                                                                                                         Disp_Char(40,2,0,SZ[yue%10]);
  341.                                                                                                                         Disp_chinese_16x16(48,2,0,NYRSFMZ[1]);  //月
  342.                                                                                                                         Disp_Char(64,2,0,SZ[ri/10%10]);
  343.                                                                                                                         Disp_Char(72,2,0,SZ[ri%10]);
  344.                                                                                                                         Disp_chinese_16x16(80,2,0,NYRSFMZ[2]);  //日
  345.                                                                                                                         Disp_chinese_16x16(96,2,0,NYRSFMZ[6]);  //周
  346.                                                                                                                         Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
  347.                                                                                                                         Disp_Char(128,2,0,SZ[shi/10%10]);
  348.                                                                                                                         Disp_Char(136,2,0,SZ[shi%10]);
  349.                                                                                                                         Disp_Char(144,2,0,FH[0]);   //冒号
  350.                                                                                                                         Disp_Char(152,2,0,SZ[fen/10%10]);
  351.                                                                                                                         Disp_Char(160,2,0,SZ[fen%10]);
  352.                                                                                                                         Disp_Char(168,2,0,FH[0]);   //冒号
  353.                                                                                                                         Disp_Char(176,2,0,SZ[miao/10%10]);
  354.                                                                                                                         Disp_Char(184,2,0,SZ[miao%10]);
  355.                                                                                                                 };  break;
  356.                                                                 case 2: {   //i等于2时显示闹钟设置的具体界面
  357.                                                                                     Disp_chinese_N_16x16(64,0,4,0,NZSZ);  //在第1行显示"闹钟设置"4个字
  358.                                                                                     Disp_chinese_16x16(lie,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  359.                                                                                                                         Disp_Char(64,2,0,SZ[NaoZhongShi/10%10]);
  360.                                                                                                                         Disp_Char(72,2,0,SZ[NaoZhongShi%10]);
  361.                                                                                                                         Disp_Char(80,2,0,FH[0]);   //冒号
  362.                                                                                                                         Disp_Char(88,2,0,SZ[NaoZhongFen/10%10]);
  363.                                                                                                                         Disp_Char(96,2,0,SZ[NaoZhongFen%10]);
  364.                                                                                                                         Disp_Char(104,2,0,FH[0]);   //冒号
  365.                                                                                                                         Disp_Char(112,2,0,SZ[NaoZhongMiao/10%10]);
  366.                                                                                                                         Disp_Char(120,2,0,SZ[NaoZhongMiao%10]);
  367.                                                                                                                 };  break;
  368.                                                                 case 4: {   //i等于4时显示温度设置的具体界面
  369.                                                                                                                         Disp_chinese_N_16x16(64,0,4,0,WDSZ);//正中1行显示"温度设置"四个字
  370.                                                                        
  371.                                                                                                                         Disp_chinese_16x16(0,2,0,gao);//"高"
  372.                                                                                                                         Disp_chinese_16x16(16,2,0,yu);//"于"
  373.                                                                                     Disp_Char(32,2,0,FH[0]);//":"
  374.                                                                                                                         if(wenduszg<100)  //低于100时百位显示空白
  375.                                                                                                                         {
  376.                                                                                                                                         Disp_Char(40,2,0,F8X16[0]);//"wenduszg"百位位置显示空白
  377.                                                                                                                                         Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"温度设置高
  378.                                                                                                                                         Disp_Char(56,2,0,SZ[wenduszg%10]);
  379.                                                                                                                         }
  380.                                                                                                                         else
  381.                                                                                                                         {
  382.                                                                                                                                         Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"温度设置高
  383.                                                                                                                                         Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"温度设置高
  384.                                                                                                                                         Disp_Char(56,2,0,SZ[wenduszg%10]);
  385.                                                                                                                         }
  386. //                                                                                    Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"温度设置高
  387. //                                                                                                                        Disp_Char(48,2,0,SZ[wenduszg/10%10]);
  388. //                                                                                                                        Disp_Char(56,2,0,SZ[wenduszg%10]);
  389.                                                                                     Disp_Char(64,2,0,F8X16[97]); //温度符号摄氏度的点
  390.                                                                                                                         Disp_Char(72,2,0,F8X16[35]); //温度符号摄氏度的"C"                                                                                    
  391.                                                                                                                         Disp_chinese_16x16(80,2,0,kai);//"开"
  392.                                                                                                                         Disp_chinese_16x16(96,2,0,qi);//"启"
  393.                                                                        
  394.                                                                                                                         Disp_chinese_16x16(0,6,0,di);//"低"
  395.                                                                                                                         Disp_chinese_16x16(16,6,0,yu);//"于"
  396.                                                                                                                         Disp_Char(32,6,0,FH[0]);//":"
  397.                                                                                                                         if(wenduszd<100)
  398.                                                                                                                         {
  399.                                                                                                                                         Disp_Char(40,6,0,F8X16[0]);//"wenduszd"百位位置显示空白
  400.                                                                                                                                         Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"温度设置低
  401.                                                                                                                                         Disp_Char(56,6,0,SZ[wenduszd%10]);
  402.                                                                                                                         }
  403.                                                                                                                         else
  404.                                                                                                                         {
  405.                                                                                                                                         Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"温度设置低
  406.                                                                                                                                         Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"温度设置低
  407.                                                                                                                                         Disp_Char(56,6,0,SZ[wenduszd%10]);
  408.                                                                                                                         }
  409. //                                                                                    Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"温度设置低
  410. //                                                                                    Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"温度设置低
  411. //                                                                                                                        Disp_Char(56,6,0,SZ[wenduszd%10]);                               
  412.                                                                                                                         Disp_Char(64,6,0,F8X16[97]); //温度符号摄氏度的点
  413.                                                                                                                         Disp_Char(72,6,0,F8X16[35]); //温度符号摄氏度的"C"                                                                                                                
  414.                                                                                                                         Disp_chinese_16x16(80,6,0,guan);//"关"
  415.                                                                                                                         Disp_chinese_16x16(96,6,0,bi);//"闭"
  416.                                                                                                                         if(JDQ==0)
  417.                                                                                                                         {
  418.                                                                                                                                 Disp_chinese_16x16(160,4,1,kai);//"开"
  419.                                                                                                                                 Disp_chinese_16x16(176,4,1,qi);//"启"
  420.                                                                                                                         }
  421.                                                                                                                         else       
  422.                                                                                                                         {
  423.                                                                                                                                 Disp_chinese_16x16(160,4,1,guan);//"关"
  424.                                                                                                                                 Disp_chinese_16x16(176,4,1,bi);//"闭"
  425.                                                                                                                         }
  426.                                                                                                 };  break;
  427.                                                                 case 6: {   //i等于6时显示GPS信息的具体界面
  428.                                                                                                                         Disp_Char(64,0,0,ZM[6]);
  429.                                                                                                                         Disp_Char(72,0,0,ZM[15]);
  430.                                                                                                                         Disp_Char(80,0,0,ZM[18]);
  431.                                                                                                                         Disp_chinese_N_16x16(88,0,2,0,XX);
  432.                                                                                                                 };  break;
  433.                                                                 default:{;};break;
  434.                                                         }
  435.                                         }
  436.                                         else
  437.                                         {
  438.                                                  if(key==ENT&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果进入了2级菜单还在按ENT键,就进入第三级菜单
  439.                                                  {
  440.                                                                 ClearDisplay(); //清理一次屏幕
  441.                                                                 Beep(SHORT_JIAO,8,4);
  442.                                                                 MenuFlag3=1;
  443.                                                           Set_OK_Flag = 0;
  444.                                                  }
  445.                                                  else
  446.                                                  {
  447.                                                                 if(key==ENT&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==1)
  448.                                                                 {
  449.                                                                         Beep(LONG_JIAO,2,1);//如果打开到第三级到底了,还按ENT键的话就长叫提示到底不能再按
  450.                                                                 }
  451.                                                  }
  452.                                         }                         
  453.                          }       
  454.                 }
  455.                
  456.                  if(key==DOWN&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0) //如果进入1级菜单时按DOWN键
  457.                                 {
  458.                                                 i+=2;
  459.                                                 if(i>6)
  460.                                                         i=0;
  461.                                                 if((i-2)<0)
  462.                                                         Disp_chinese_16x16(48,6,0,leijijd[7]);//当i-2小于0时,不能负数,此处完美解决
  463.                                         //        ClearDisplay(); //清理一次屏幕
  464.                                                 Beep(SHORT_JIAO,5,5);
  465.                                                 Disp_chinese_16x16(48,i-2,0,leijijd[7]);//把上次的箭头擦除
  466.                                                 Disp_chinese_16x16(48,i,0,leijijd[5]);//显示“箭头”在几行之间移动动
  467.                                                 Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示时间设置4个字       
  468.                                                 Disp_chinese_N_16x16(64,2,4,0,NZSZ);  //在第二行显示"闹钟设置"4个字
  469.                                                 Disp_chinese_N_16x16(64,4,4,0,WDSZ);  //在第三行显示"温度设置"4个字
  470.                                                 Disp_Char(64,6,0,ZM[6]);
  471.                                                 Disp_Char(72,6,0,ZM[15]);
  472.                                                 Disp_Char(80,6,0,ZM[18]);
  473.                                                 Disp_chinese_N_16x16(88,6,2,0,XX);           //在第四行显示"GPS信息"5个字       
  474.                                 }       
  475.                                
  476.                                 if(key==UP&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0)//如果进入1级菜单时按UP键
  477.                                 {
  478.                                         i-=2;
  479.                                         if((i-2)<0)
  480.                                                 Disp_chinese_16x16(48,0,0,leijijd[7]);//当i-2小于0时,不能负数,此处完美解决
  481.                                         if(i<0)
  482.                                                 i=6;                               
  483.                                 //        ClearDisplay(); //清理一次屏幕
  484.                                         Beep(SHORT_JIAO,5,5);
  485.                                         Disp_chinese_16x16(48,i+2,0,leijijd[7]);//把上次的箭头擦除
  486.                                         Disp_chinese_16x16(48,i,0,leijijd[5]);//显示“箭头”在几行之间移动动
  487.                                         Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示时间设置4个字       
  488.                                         Disp_chinese_N_16x16(64,2,4,0,NZSZ);  //在第二行显示"闹钟设置"4个字
  489.                                         Disp_chinese_N_16x16(64,4,4,0,WDSZ);  //在第三行显示"温度设置"4个字
  490.                                         Disp_Char(64,6,0,ZM[6]);
  491.                                         Disp_Char(72,6,0,ZM[15]);
  492.                                         Disp_Char(80,6,0,ZM[18]);
  493.                                         Disp_chinese_N_16x16(88,6,2,0,XX);           //在第四行显示"GPS信息"5个字       
  494.                                 }       
  495.     if(key==ESC)  //如果待机时不断地按ESC键,一级一级退出各级菜单,直到桌面
  496.                 {
  497.                          
  498.                         if(key==ESC&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==1) //如果第3级菜单打开时按ESC键,则退出3级菜单
  499.                         {
  500.                                  ClearDisplay(); //清理一次屏幕
  501.                                  Beep(SHORT_JIAO,8,4);
  502.                                  MenuFlag3=0;
  503.                                  Set_OK_Flag = 0;
  504.                                  switch(k)  //通过调整k的值,对应赋lie的值,lie就是向上箭头位置,就是调节值的位置
  505.                                         {
  506.                                                 case 1: { lie = 64;  };break;
  507.                                                 case 2: { lie = 88; };break;
  508.                                                 case 3: { lie = 112; };break;
  509.                                                
  510.                                         }
  511.                                  switch(j)  //通过调整j的值,对应赋col的值,col就是向上箭头位置,就是调节值的位置
  512.                                         {
  513.                                                 case 1: { col = 0;  };break;
  514.                                                 case 2: { col = 32; };break;
  515.                                                 case 3: { col = 64; };break;
  516.                                                 case 4: { col = 112; };break;
  517.                                                 case 5: { col = 128; };break;
  518.                                                 case 6: { col = 152; };break;
  519.                                                 case 7: { col = 176; };break;
  520.                                         }
  521.                                  switch(i)   //2级菜单要显示的内容决定于i的值,i值刚好在1级菜单时通过DOWM和UP键设定好了
  522.                                                         {
  523.                                                                 case 0: {   //i等于0时显示时间设置的具体界面
  524.                                                                                   Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示"时间设置"4个字       
  525.                                                                                                                 Disp_chinese_16x16(col,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  526.                                                                                                                 Disp_Char(0,2,0,SZ[nian/10%10]);
  527.                                                                                                                 Disp_Char(8,2,0,SZ[nian%10]);
  528.                                                                                                                 Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
  529.                                                                                                                 Disp_Char(32,2,0,SZ[yue/10%10]);  
  530.                                                                                                                 Disp_Char(40,2,0,SZ[yue%10]);
  531.                                                                                                                 Disp_chinese_16x16(48,2,0,NYRSFMZ[1]);  //月
  532.                                                                                                                 Disp_Char(64,2,0,SZ[ri/10%10]);
  533.                                                                                                                 Disp_Char(72,2,0,SZ[ri%10]);
  534.                                                                                                                 Disp_chinese_16x16(80,2,0,NYRSFMZ[2]);  //日
  535.                                                                                                                 Disp_chinese_16x16(96,2,0,NYRSFMZ[6]);  //周
  536.                                                                                                                 Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
  537.                                                                                                                 Disp_Char(128,2,0,SZ[shi/10%10]);
  538.                                                                                                                 Disp_Char(136,2,0,SZ[shi%10]);
  539.                                                                                                                 Disp_Char(144,2,0,FH[0]);   //冒号
  540.                                                                                                                 Disp_Char(152,2,0,SZ[fen/10%10]);
  541.                                                                                                                 Disp_Char(160,2,0,SZ[fen%10]);
  542.                                                                                                                 Disp_Char(168,2,0,FH[0]);   //冒号
  543.                                                                                                                 Disp_Char(176,2,0,SZ[miao/10%10]);
  544.                                                                                                                 Disp_Char(184,2,0,SZ[miao%10]);
  545.                                                                                                         };  break;
  546.                                                                 case 2: {   //i等于2时显示闹钟设置的具体界面
  547.                                                                                   Disp_chinese_N_16x16(64,0,4,0,NZSZ);  //在第1行显示"闹钟设置"4个字
  548.                                                                                   Disp_chinese_16x16(lie,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  549.                                                                                                                 Disp_Char(64,2,0,SZ[NaoZhongShi/10%10]);
  550.                                                                                                                 Disp_Char(72,2,0,SZ[NaoZhongShi%10]);
  551.                                                                                                                 Disp_Char(80,2,0,FH[0]);   //冒号
  552.                                                                                                                 Disp_Char(88,2,0,SZ[NaoZhongFen/10%10]);
  553.                                                                                                                 Disp_Char(96,2,0,SZ[NaoZhongFen%10]);
  554.                                                                                                                 Disp_Char(104,2,0,FH[0]);   //冒号
  555.                                                                                                                 Disp_Char(112,2,0,SZ[NaoZhongMiao/10%10]);
  556.                                                                                                                 Disp_Char(120,2,0,SZ[NaoZhongMiao%10]);
  557.                                                                                                 };  break;
  558.                                                                 case 4: {   //i等于4时显示温度设置的具体界面
  559.                                                                                                                 Disp_chinese_N_16x16(64,0,4,0,WDSZ);//正中1行显示"温度设置"四个字
  560.                                                                        
  561.                                                                                                                         Disp_chinese_16x16(0,2,0,gao);//"高"
  562.                                                                                                                         Disp_chinese_16x16(16,2,0,yu);//"于"
  563.                                                                                     Disp_Char(32,2,0,FH[0]);//":"
  564.                                                                                                                         if(wenduszg<100)  //低于100时百位显示空白
  565.                                                                                                                         {
  566.                                                                                                                                         Disp_Char(40,2,0,F8X16[0]);//"wenduszg"百位位置显示空白
  567.                                                                                                                                         Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"温度设置高
  568.                                                                                                                                         Disp_Char(56,2,0,SZ[wenduszg%10]);
  569.                                                                                                                         }
  570.                                                                                                                         else
  571.                                                                                                                         {
  572.                                                                                                                                         Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"温度设置高
  573.                                                                                                                                         Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"温度设置高
  574.                                                                                                                                         Disp_Char(56,2,0,SZ[wenduszg%10]);
  575.                                                                                                                         }
  576. //                                                                                    Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"温度设置高
  577. //                                                                                                                        Disp_Char(48,2,0,SZ[wenduszg/10%10]);
  578. //                                                                                                                        Disp_Char(56,2,0,SZ[wenduszg%10]);
  579.                                                                                     Disp_Char(64,2,0,F8X16[97]); //温度符号摄氏度的点
  580.                                                                                                                         Disp_Char(72,2,0,F8X16[35]); //温度符号摄氏度的"C"                                                                                    
  581.                                                                                                                         Disp_chinese_16x16(80,2,0,kai);//"开"
  582.                                                                                                                         Disp_chinese_16x16(96,2,0,qi);//"启"
  583.                                                                        
  584.                                                                                                                         Disp_chinese_16x16(0,6,0,di);//"低"
  585.                                                                                                                         Disp_chinese_16x16(16,6,0,yu);//"于"
  586.                                                                                                                         Disp_Char(32,6,0,FH[0]);//":"
  587.                                                                                                                         if(wenduszd<100)
  588.                                                                                                                         {
  589.                                                                                                                                         Disp_Char(40,6,0,F8X16[0]);//"wenduszd"百位位置显示空白
  590.                                                                                                                                         Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"温度设置低
  591.                                                                                                                                         Disp_Char(56,6,0,SZ[wenduszd%10]);
  592.                                                                                                                         }
  593.                                                                                                                         else
  594.                                                                                                                         {
  595.                                                                                                                                         Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"温度设置低
  596.                                                                                                                                         Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"温度设置低
  597.                                                                                                                                         Disp_Char(56,6,0,SZ[wenduszd%10]);
  598.                                                                                                                         }
  599. //                                                                                    Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"温度设置低
  600. //                                                                                    Disp_Char(48,6,0,SZ[wenduszd/10%10]);
  601. //                                                                                                                        Disp_Char(56,6,0,SZ[wenduszd%10]);                               
  602.                                                                                                                         Disp_Char(64,6,0,F8X16[97]); //温度符号摄氏度的点
  603.                                                                                                                         Disp_Char(72,6,0,F8X16[35]); //温度符号摄氏度的"C"                                                                                                                
  604.                                                                                                                         Disp_chinese_16x16(80,6,0,guan);//"关"
  605.                                                                                                                         Disp_chinese_16x16(96,6,0,bi);//"闭"
  606.                                                                                                                         if(JDQ==0)
  607.                                                                                                                         {
  608.                                                                                                                                 Disp_chinese_16x16(160,4,1,kai);//"开"
  609.                                                                                                                                 Disp_chinese_16x16(176,4,1,qi);//"启"
  610.                                                                                                                         }
  611.                                                                                                                         else       
  612.                                                                                                                         {
  613.                                                                                                                                 Disp_chinese_16x16(160,4,1,guan);//"关"
  614.                                                                                                                                 Disp_chinese_16x16(176,4,1,bi);//"闭"
  615.                                                                                                                         }
  616.                                                                         };  break;
  617.                                                                 case 6: {   //i等于6时显示GPS信息的具体界面
  618.                                                                                                                 Disp_Char(64,0,0,ZM[6]);
  619.                                                                                                                 Disp_Char(72,0,0,ZM[15]);
  620.                                                                                                                 Disp_Char(80,0,0,ZM[18]);
  621.                                                                                                                 Disp_chinese_N_16x16(88,0,2,0,XX);
  622.                                                                                                 };  break;
  623.                                                                 default:{;};break;
  624.                                                         }
  625.                         }
  626.                         else
  627.                         {
  628.                                 if(key==ESC&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0)  //如果退出到2级菜单还按ESC键,则进入1级菜单
  629.                                 {
  630.                                          ClearDisplay(); //清理一次屏幕
  631.                                          Beep(SHORT_JIAO,8,4);
  632.                                          MenuFlag2=0;
  633.                                          Set_OK_Flag = 0;
  634.                                          Disp_chinese_16x16(48,i,0,leijijd[5]);//显示“箭头”在几行之间移动动
  635.                                          Disp_chinese_N_16x16(64,0,4,0,SJSZ);  //在第一行显示时间设置4个字       
  636.                                          Disp_chinese_N_16x16(64,2,4,0,NZSZ);  //在第二行显示"闹钟设置"4个字
  637.                                          Disp_chinese_N_16x16(64,4,4,0,WDSZ);  //在第三行显示"温度设置"4个字
  638.                                          Disp_Char(64,6,0,ZM[6]);
  639.                                          Disp_Char(72,6,0,ZM[15]);
  640.                                          Disp_Char(80,6,0,ZM[18]);
  641.                                          Disp_chinese_N_16x16(88,6,2,0,XX);           //在第四行显示"GPS信息"5个字       
  642.                                 }
  643.                                 else
  644.                                 {
  645.                                         if(key==ESC&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0) //如果退出到1级菜单还按ESC键,则进入桌面待机页面
  646.                                         {
  647.                                                  ClearDisplay(); //清理一次屏幕
  648.                                                  Beep(SHORT_JIAO,8,4);
  649.                                                  MenuFlag1=0;
  650.                                                  Set_OK_Flag = 0;
  651.                                                  DeskWall();//最后回到待机页面 */
  652.                                         }
  653.                                         else
  654.                                         {
  655.                                                 if(key==ESC&&MenuFlag1==0&&MenuFlag2==0&&MenuFlag3==0) //如果退出到桌面还按ESC键,告警音提示
  656.                                                 {
  657.                                                         Beep(LONG_JIAO,2,1);//如果关闭桌面到底了,还按ESC键的话就长叫提示到底不能再按
  658.                                                 }
  659.                                         }
  660.                                 }
  661.                         }
  662.                 }
  663.                
  664.                
  665.                 if(key==RIGHT&&i==0&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果第3级菜单打开时并且是在时间设置界面时按RIGHT键,
  666.                 {
  667.                         // ClearDisplay(); //清理一次屏幕
  668.                          Set_OK_Flag = 0;    //
  669.                          Beep(SHORT_JIAO,8,4);
  670.                          j+=1;
  671.                          if(j>7)
  672.                          {
  673.                                  j=1;
  674.                          }
  675.        
  676.                                    switch(j)  //通过调整j的值,对应赋col的值,col就是向上箭头位置,就是调节值的位置
  677.                                         {
  678.                                                 case 1: { col = 0;  };break;
  679.                                                 case 2: { col = 32; };break;
  680.                                                 case 3: { col = 64; };break;
  681.                                                 case 4: { col = 112; };break;
  682.                                                 case 5: { col = 128; };break;
  683.                                                 case 6: { col = 152; };break;
  684.                                                 case 7: { col = 176; };break;
  685.                                         }
  686.                                                 switch(j-1)  //不同的J-1让不同的擦除空格换位置
  687.                                         {
  688.                                                 case 1: { cachu = 0;  };break;
  689.                                                 case 2: { cachu = 32; };break;
  690.                                                 case 3: { cachu = 64; };break;
  691.                                                 case 4: { cachu = 112; };break;
  692.                                                 case 5: { cachu = 128; };break;
  693.                                                 case 6: { cachu = 152; };break;
  694.                                                 case 7: { cachu = 176; };break;
  695.                                                 default:{ Disp_chinese_16x16(176,4,0,leijijd[7]);};break; //此处就是j-1=0时就让空白格停在秒值下
  696.                                         }
  697.                           //i等于0时显示时间设置的具体界面
  698.                                 Disp_chinese_16x16(cachu,4,0,leijijd[7]);//把上次显示的向上箭头通过空白替换,起到擦除的效果,目的是避免每按键一次要清全屏的闪烁缺点
  699.                                  Disp_chinese_16x16(col,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  700.                                 Disp_Char(0,2,0,SZ[nian/10%10]);
  701.                                 Disp_Char(8,2,0,SZ[nian%10]);
  702.                                 Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
  703.                                 Disp_Char(32,2,0,SZ[yue/10%10]);  
  704.                                 Disp_Char(40,2,0,SZ[yue%10]);
  705.                                 Disp_chinese_16x16(48,2,0,NYRSFMZ[1]);  //月
  706.                                 Disp_Char(64,2,0,SZ[ri/10%10]);
  707.                                 Disp_Char(72,2,0,SZ[ri%10]);
  708.                                 Disp_chinese_16x16(80,2,0,NYRSFMZ[2]);  //日
  709.                                 Disp_chinese_16x16(96,2,0,NYRSFMZ[6]);  //周
  710.                                 Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
  711.                                 Disp_Char(128,2,0,SZ[shi/10%10]);
  712.                                 Disp_Char(136,2,0,SZ[shi%10]);
  713.                                 Disp_Char(144,2,0,FH[0]);   //冒号
  714.                                 Disp_Char(152,2,0,SZ[fen/10%10]);
  715.                                 Disp_Char(160,2,0,SZ[fen%10]);
  716.                                 Disp_Char(168,2,0,FH[0]);   //冒号
  717.                                 Disp_Char(176,2,0,SZ[miao/10%10]);
  718.                                 Disp_Char(184,2,0,SZ[miao%10]);
  719.                 }
  720.                
  721.                 if(key==LEFT&&i==0&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果第3级菜单打开时并且是在时间设置界面时按LEFT键,
  722.                 {
  723.                 //         ClearDisplay(); //清理一次屏幕
  724.                          Set_OK_Flag = 0;  
  725.                          Beep(SHORT_JIAO,8,4);
  726.                          j-=1;
  727.                           if(j<1)
  728.                                  j=7;
  729.                                         switch(j)  //通过调整j的值,对应赋col的值,col就是向上箭头位置,就是调节值的位置
  730.                                         {
  731.                                                 case 1: { col = 0;  };break;
  732.                                                 case 2: { col = 32; };break;
  733.                                                 case 3: { col = 64; };break;
  734.                                                 case 4: { col = 112; };break;
  735.                                                 case 5: { col = 128; };break;
  736.                                                 case 6: { col = 152; };break;
  737.                                                 case 7: { col = 176; };break;
  738.                                         }
  739.                                                         switch(j+1)  //不同的J+1让不同的擦除空格换位置,模拟擦除效果
  740.                                         {
  741.                                                 case 1: { cachu = 0;  };break;
  742.                                                 case 2: { cachu = 32; };break;
  743.                                                 case 3: { cachu = 64; };break;
  744.                                                 case 4: { cachu = 112; };break;
  745.                                                 case 5: { cachu = 128; };break;
  746.                                                 case 6: { cachu = 152; };break;
  747.                                                 case 7: { cachu = 176; };break;
  748.                                                 default:{ Disp_chinese_16x16(0,4,0,leijijd[7]);};break; //此处就是j+1=8时就让空白格停在年值下
  749.                                         }
  750.                           //i等于0时显示时间设置的具体界面
  751.                                 Disp_chinese_16x16(cachu,4,0,leijijd[7]);//把上次显示的向上箭头通过空白替换起到擦除的效果
  752.                                  Disp_chinese_16x16(col,4,0,leijijd[6]);//显示“向上箭头”在调节值之间切换移动
  753.                                 Disp_Char(0,2,0,SZ[nian/10%10]);
  754.                                 Disp_Char(8,2,0,SZ[nian%10]);
  755.                                 Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
  756.                                 Disp_Char(32,2,0,SZ[yue/10%10]);  
  757.                                 Disp_Char(40,2,0,SZ[yue%10]);
  758.                                 Disp_chinese_16x16(48,2,0,NYRSFMZ[1]);  //月
  759.                                 Disp_Char(64,2,0,SZ[ri/10%10]);
  760.                                 Disp_Char(72,2,0,SZ[ri%10]);
  761.                                 Disp_chinese_16x16(80,2,0,NYRSFMZ[2]);  //日
  762.                                 Disp_chinese_16x16(96,2,0,NYRSFMZ[6]);  //周
  763.                                 Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
  764.                                 Disp_Char(128,2,0,SZ[shi/10%10]);
  765.                                 Disp_Char(136,2,0,SZ[shi%10]);
  766.                                 Disp_Char(144,2,0,FH[0]);   //冒号
  767.                                 Disp_Char(152,2,0,SZ[fen/10%10]);
  768.                                 Disp_Char(160,2,0,SZ[fen%10]);
  769.                                 Disp_Char(168,2,0,FH[0]);   //冒号
  770.                                 Disp_Char(176,2,0,SZ[miao/10%10]);
  771.                                 Disp_Char(184,2,0,SZ[miao%10]);

  772.                 }
  773.        

  774. /*******************************时间设置之调整年值*****************************************/
  775.                  if(key==UP&&i==0&&j==1&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0)//调整年+
  776.                 { //i=0,限定是在时间设置模式,j=1限定在时间设置模式的年值设置,MenuFlag1、2、3 分别=1、1、0锁定在二级菜单
  777.                         nian+=1;
  778.                         if(nian>99)
  779.                                 nian=20;
  780.                         Beep(SHORT_JIAO,8,4);
  781.                         Disp_Char(0,2,0,SZ[nian/10%10]);
  782.                         Disp_Char(8,2,0,SZ[nian%10]);
  783.                         Set_OK_Flag = 0;
  784. ……………………

  785. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
LCD菜单程序大数字电子钟(三级菜单,参数设置保存、温度控制器,).zip (312.96 KB, 下载次数: 323)


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏19 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:44037 发表于 2020-7-1 15:44 | 只看该作者
谢谢分享  学习一下!
回复

使用道具 举报

板凳
ID:517951 发表于 2020-11-15 17:27 | 只看该作者
不错,值得学习。51hei有你更精彩!!
回复

使用道具 举报

地板
ID:77840 发表于 2021-4-7 17:18 | 只看该作者
谢谢楼主分享,初学者请教一下i+=2这样的语句是什么意思,和i++这种自加一有什么区别?
回复

使用道具 举报

5#
ID:230752 发表于 2021-4-11 23:08 | 只看该作者
非常好的代码,思路清晰,注释明确。
回复

使用道具 举报

6#
ID:600695 发表于 2021-4-14 21:35 | 只看该作者
为什么我的万年历就显示不正常呢
回复

使用道具 举报

7#
ID:266164 发表于 2021-4-16 16:40 | 只看该作者
好东西。我也正想做一个呢
回复

使用道具 举报

8#
ID:907139 发表于 2021-4-16 22:53 | 只看该作者
谢谢楼主分享,初学者请教一下i+=2这样的语句是什么意思,和i++这种自加一有什么区别?
回复

使用道具 举报

9#
ID:328014 发表于 2021-4-17 03:25 | 只看该作者
18634937090 发表于 2021-4-16 22:53
谢谢楼主分享,初学者请教一下i+=2这样的语句是什么意思,和i++这种自加一有什么区别?

i=i+2的简写
回复

使用道具 举报

10#
ID:778645 发表于 2021-4-17 21:24 | 只看该作者
面具下的狼性 发表于 2021-4-7 17:18
谢谢楼主分享,初学者请教一下i+=2这样的语句是什么意思,和i++这种自加一有什么区别?

这就是i=i+2;
回复

使用道具 举报

11#
ID:69536 发表于 2021-4-29 09:47 | 只看该作者
强烈  建议时钟芯片改为DS3231,大家可以仿制一个来学习一下。
回复

使用道具 举报

12#
ID:334781 发表于 2021-5-4 11:32 | 只看该作者
有电路图吗,想下载看下,这个不错,学习单片机的好帮手!
回复

使用道具 举报

13#
ID:39866 发表于 2021-5-16 21:18 | 只看该作者
厉害了大佬,大师级别的
回复

使用道具 举报

14#
ID:242298 发表于 2021-7-6 11:08 | 只看该作者
这电路图都没有,谁知道怎么制作的啊。。。。再说这个程序也太大了点吧! 90多K。。。。
回复

使用道具 举报

15#
ID:884042 发表于 2021-7-19 09:26 | 只看该作者
能提供一下使用方法吗?
回复

使用道具 举报

16#
ID:200118 发表于 2021-12-21 20:44 | 只看该作者
正好我有一块这种屏试试看
回复

使用道具 举报

17#
ID:977861 发表于 2021-12-21 21:48 | 只看该作者
这个不错,学习单片机的好帮手
回复

使用道具 举报

18#
ID:173831 发表于 2021-12-22 11:10 | 只看该作者
最近研究液晶屏学习一下
回复

使用道具 举报

19#
ID:993294 发表于 2021-12-23 11:27 | 只看该作者
单片机+LCD19264液晶屏三级菜单程序 大数字电子钟   
屏幕+主板+操作板哪买的!
回复

使用道具 举报

20#
ID:156220 发表于 2021-12-24 21:51 | 只看该作者
谢谢资料分享,楼主辛苦了
回复

使用道具 举报

21#
ID:1064915 发表于 2023-10-12 21:23 | 只看该作者
GPS怎么用?
回复

使用道具 举报

22#
ID:305511 发表于 2023-11-30 23:02 | 只看该作者
多谢分享,注解很清晰
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表