⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard4.c

📁 基于STC12C5410AD单片机的智能冷库控制器的按键操作C语言程序,功能丰富,四级菜单操作.组合键,延时按键操作
💻 C
📖 第 1 页 / 共 4 页
字号:
                              else  //化霜时间-化霜运行时间
                                 {  if(FreJdqStu==FREJDQ_OFF)  //非化霜状态,显示距下次开始化霜时间
                                      { dec_showbuf((int)((FreshCycl-FreStopTime)*10));
                                        led_show_buf[0]=0x0c;            //清除显存最后一位
                                        Dip=0x05;                        //不显示小数点
                                      }
                                         //化霜周期-压缩机累计工作时间
                                    else if(FreJdqStu==FREJDQ_ON)  //化霜状态(强制或自动),显示剩余化霜时间
                                           {  dec_showbuf((int)((FreshTime-FreRunTime)*10));
                                             led_show_buf[0]=0x0c;            //清除显存最后一位
                                             Dip=0x05;                        //不显示小数点
                                           }
                                 }
                            }//2-4秒
                          else if(ParaCheckCnt>=128)
                                  { ParaCheckVal=0;
                                    UpDown_Value=0;
                                  }
             }//*************************参数查看DOWN键被按下******************************
          }//条件:(非查看状态并且SET键被按下)在此条件下不执行参数查看操作
    break;                   //#########################第零层状态,(属于非设置状态)#######################

    case 0x01:               //#########################第一层设置状态,(用户菜单操作)#######################
         if(Key_Value==KEY_K4)
         {//************************如果键SET被按下*************************
            if((Key_Delay==1)&&(Key_Level==0x00))
              {//**************按下时间在0-3秒内**************
                switch(KC1_Cnt)
                 {
                   case 0x00:
                   case 0x01:      //保存F2的参数,显示F1的菜单
                        eep_sndbuf[0]=Huicha;
                        write_EEPROM1(0xa0,0x07,1,eep_sndbuf);     //保存F2的参数
                        led_show_buf[1]=0x01;
                        led_show_buf[2]=0x0b;    //F1
                   break;
                   case 0x02:
                   case 0x03:      //保存F1的参数,显示F2的菜单
                        eep_sndbuf[0]=TempSet;
                        write_EEPROM1(0xa0,0x06,1,eep_sndbuf);     //保存F1的参数
                        Dip=0x05;                //不显示小数点
                        led_show_buf[1]=0x02;
                        led_show_buf[2]=0x0b;    //F2
                        zhishi_flag|=MINUS_FLAG;                     //取消'-'负号标志
                   break;
                   default:
                   break;
                 }
              }//**************按下时间在0-3秒内**************
            else if((Key_Delay==3)&&(Key_Level==0x00))
                   {//**********按下大于3秒退出用户菜单*************
                     Key_Old=0;
                     Key_Ceng=0;
                     Set_Ok=0;
                     zhishi_flag|=SET_FLAG; //取消设置标志
                   }//**********按下大于3秒退出用户菜单*************
                 else if(Key_Level==0x01)
                        {//****************按键抬起**********************
                          Key_Old=0;              //某一按键连续的按键时间清零
                          Key_Delay=0x00;         //按键延时积存器清零
                          switch(KC1_Cnt)
                           {
                             case 0x00:
                                  Key_Value=0x00;  //抬起按键后清零键值(不执行按键处理)**(关键)
                                  KC1_Cnt++;
                             break;
                             case 0x01:
                                  dec_showbuf((int)(TempSet*10));   //处理后放入显存
                                  led_show_buf[0]=0x0c;             //清除显存最后一位
                                  Dip=0x05;                         //不显示小数点
                                  Key_Value=0x00;    //抬起按键后清零键值同时进入下一项**(关键)                      //
                                  KC1_Cnt++;         //指向下一个参数F2(KC1_Cnt=2)
                             break;
                             case 0x02:
                                  Key_Value=0x00;    //抬起按键后清零键值(不执行按键处理)**(关键)
                                  KC1_Cnt++;         //进入下一项
                             break;
                             case 0x03:
                                  dec_showbuf((int)(Huicha*10));   //处理后放入显存
                                  led_show_buf[0]=0x0c;            //清除显存最后一位
                                  Dip=0x05;
                                  Key_Value=0x00;    //抬起按键后清零键值同时进入下一项**(关键)
                                  KC1_Cnt=0;         //指向下一个参数
                                  //Key_Old=0;
                             break;
                             default:
                             break;
                           }
                        }//****************按键抬起**********************
         }//************************如果键SET被按下*************************

         else
         if(UpDown_Value==KEY_K2)
         {//**********************如果UP键被按下**************************
            if((UpDown_Delay==1)&&(UpDown_Level==0x00))
              {//************按下时间在0-2秒内************
                switch(KC1_Cnt)    //*****执行某项*****
                {
                   case 0x00:        //菜单项F2的参数(回差设定)
                        KSC1U0();
                   break;
                   case 0x01:        //菜单项F1(温度设定)(在此状态下有UP键显示F2)
                        led_show_buf[1]=0x02;
                        KSC1U();
                   break;
                   case 0x02:        //菜单项F1的参数(温度设定)
                        KSC1U2();
                   break;
                   case 0x03:        //菜单项F2(回差设定)(在此状态下有UP键显示F1)
                        led_show_buf[1]=0x01;
                        KSC1U();
                   break;
                   default:
                   break;
                }
              }//************按下时间在0-2秒内************
            else if((UpDown_Delay==2)&&(UpDown_Level==0x00))
                   {//************按下时间大于2秒**************
                      switch(KC1_Cnt)    //*****执行某项*****
                      {
                        case 0x00:        //菜单项F2的参数(回差设定)
                             KSC1U0();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                        break;
                        case 0x01:        //菜单项F1(温度设定)(在此状态下有UP键显示F2)
                             led_show_buf[1]=0x02;
                             KSC1U();
                             UpDown_Old=KEYLOOP;              //连加由此值开始计数至400
                        break;
                        case 0x02:        //菜单项F1的参数(温度设定)
                             KSC1U2();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                        break;
                        case 0x03:        //菜单项F2(回差设定)(在此状态下有UP键显示F1)
                             led_show_buf[1]=0x01;
                             KSC1U();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                      }                  //*****执行某项*****
                   }//************按下时间大于2秒**************
                 else if(UpDown_Level==0x01)
                        { UpDown_Old=0x00;                  //以Key_Old位按键周期
                          UpDown_Value=0x00;
                        }
         }                             //**********************如果UP键被按下****************************

         else
         if(UpDown_Value==KEY_K1)
         {                             //**********************如果DOWN键被按下**************************
           if((UpDown_Delay==1)&&(UpDown_Level==0x00))
             {                         //***********按下时间在0-2秒内**************
                switch(KC1_Cnt)
                {                      //*****执行某项*****
                   case 0x00:          //菜单项F2的参数(回差设定)
                        KSC1D0();
                   break;
                   case 0x01:          //菜单项F1(温度设定)(在此状态下有DOWN键显示F2)
                        led_show_buf[1]=0x02;
                        KSC1D();
                   break;
                   case 0x02:         //菜单项F1的参数(温度设定)
                        KSC1D2();
                   break;
                   case 0x03:          //菜单项F2(回差设定)(在此状态下有DOWN键显示F1)
                        led_show_buf[1]=0x01;
                        KSC1D();
                   break;
                   default:
                   break;
                }                      //*****执行某项*****
             }                         //**********按下时间在0-2秒内***************
             else if((UpDown_Delay==2)&&(UpDown_Level==0x00))
                   {                   //************按下时间大于2秒***************
                     switch(KC1_Cnt)   //*****执行某项*****
                      {
                        case 0x00:        //菜单项F2的参数(回差设定)
                             KSC1D0();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                        break;
                        case 0x01:        //菜单项F1(温度设定)(在此状态下有DOWN键显示F2)
                             led_show_buf[1]=0x02;
                             KSC1D();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                        break;
                        case 0x02:        //菜单项F1的参数(温度设定)
                             KSC1D2();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                        break;
                        case 0x03:        //菜单项F2(回差设定)(在此状态下有DOWN键显示F1)
                             led_show_buf[1]=0x01;
                             KSC1D();
                             UpDown_Old=KEYLOOP;                     //连加由此值开始计数至400
                      }                  //*****执行某项*****
                   }                   //************按下时间大于2秒***************
                   else if(UpDown_Level==0x01)
                          { UpDown_Old=0x00;  //************以Key_Old位按键周期***********
                            UpDown_Value=0x00;
                          }
         }                             //**********************如果DOWN键被按下**************************
    break;                   //#########################第一层设置状态,(用户菜单操作)##########################

    case 0x02:              //#########################第二层设置状态,(管理者菜单操作)#########################
         if(Key_Value==KEY_K4)
          {                 //************************如果键SET被按下*************************
             if((Key_Delay==1)&&(Key_Level==0x00))
               {           //**************按下时间在0-3秒内****************
                  switch(KC2_Cnt)
                  {                 //****确定级内显示*****
                     case 0x00:
                     case 0x01:      //F3参数的选择和设置
                          eep_sndbuf[0]=TempRevise;
                          write_EEPROM1(0xa0,0x05,1,eep_sndbuf);     //保存F8的参数
                          led_show_buf[1]=0x03;
                          led_show_buf[2]=0x0b;     //F3
                          zhishi_flag|=MINUS_FLAG;  //取消'-'负号标志
                     break;
                     case 0x02:
                     case 0x03:      //F4参数的选择和设置
                          eep_sndbuf[0]=YsjDelay;
                          write_EEPROM1(0xa0,0x00,1,eep_sndbuf);  //保存F3的参数
                          led_show_buf[1]=0x04;
                          led_show_buf[2]=0x0b;           //F4
                    break;
                    case 0x04:
                    case 0x05:      //F5参数的选择和设置
                         eep_sndbuf[0]=FreshCycl;
                         write_EEPROM1(0xa0,0x01,1,eep_sndbuf);   //保存F4的参数
                         led_show_buf[1]=0x05;
                         led_show_buf[2]=0x0b;           //F5
                    break;
                    case 0x06:
                    case 0x07:      //F6参数的选择和设置
                         eep_sndbuf[0]=FreshTime;
                         write_EEPROM1(0xa0,0x02,1,eep_sndbuf);   //保存F5的参数
                         led_show_buf[1]=0x06;
                         led_show_buf[2]=0x0b;           //F6
                    break;
                    case 0x08:
                    case 0x09:
                         eep_sndbuf[0]=FrStopTemp;
                         write_EEPROM1(0xa0,0x03,1,eep_sndbuf);    //保存F6的参数
                         led_show_buf[1]=0x07;
                         led_show_buf[2]=0x0b;           //F7
                    break;
                    case 0x0a:
                    case 0x0b:
                         eep_sndbuf[0]=ExTempWarn;
                         write_EEPROM1(0xa0,0x04,1,eep_sndbuf);   //保存F7的参数
                         led_show_buf[1]=0x08;
                         led_show_buf[2]=0x0b;           //F8
                    break;
                    default:
                    break;
                  }                 //****确定级内显示*****
               }                           //**************按下时间在0-3秒内****************
               else if((Key_Delay==3)&&(Key_Level==0x00))
                      {                    //*********按下大于3秒退出用户菜单**************
                        Key_Old=0;
                        Key_Ceng=0;
                        Set_Ok=0;
                        zhishi_flag|=SET_FLAG; //取消设置标志
                      }                    //*********按下大于三秒退出用户菜单**************
                    else if(Key_Level==0x01)
                           {               //****************按键抬起***********************
                             Key_Old=0;
                             Key_Delay=0x00;      //按键延时积存器清零
                             switch(KC2_Cnt)
                              {
                                case 0x00:
                                     Key_Value=0x00;  //抬起按键后清零键值(不执行按键处理)**(关键)
                                     KC2_Cnt++;
                                break;
                                case 0x01:
                                     dec_showbuf((int)(YsjDelay*10));   //F3的参数处理后放入显存(压缩机延时)
                                     KSC2Set();
                                break;
                                case 0x02:
                                     Key_Value=0x00;  //抬起按键后清零键值(不执行按键处理)**(关键)
                                     KC2_Cnt++;
                                break;
                                case 0x03:
                                     dec_showbuf((int)(FreshCycl*10));   //F4的参数处理后放入显存(化霜周期)
                                     KSC2Set();
                                break;
                                case 0x04:
                                     Key_Value=0x00;   //抬起按键后清零键值(不执行按键处理)**(关键)
                                     KC2_Cnt++;
                                break;
                                case 0x05:
                                     dec_showbuf((int)(FreshTime*10));   //F5的参数处理后放入显存(化霜时间)
                                     KSC2Set();
                                break;
                                case 0x06:
                                     Key_Value=0x00;   //抬起按键后清零键值(不执行按键处理)**(关键)
                                     KC2_Cnt++;
                                break;
                                case 0x07:
                                     dec_showbuf((int)(FrStopTemp*10));   //F6的参数处理后放入显存(化霜终止温度)
                                     KSC2Set();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -