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

📄 复件 key.c

📁 此为本人今期一个项目的部分C51源程序
💻 C
字号:

/*此为AD键盘程序部分原码,如有问题请联系ligang048006@163.com*/
#include <STC12C5412.H>
#include <port.h>
#include <wtv.h>
#include <pressure.h>
#include <stc12c5412ad_adc.h>

#define Key1  Key_Start_Stop            //F1  
#define Key2  Key_Temperature_Up
#define Key3  Key_Temperature_Down
#define Key4  Key_Pressure_Up
#define Key5  Key_Pressure_Down
#define Key6  Key_Ozone                 //F2
#define Key7  Key_F1                    //F3
#define Key8  Key_F2                    //F4

//定义在WTV.C中
 enum Task {WTV_Task_Temperature,WTV_Task_Pressure, WTV_Task_Ozone,
            WTV_Task_Music,WTV_Task_Water_Out,WTV_Task_None};       //语音芯片工作状态枚举类型定义
 extern unsigned char Forcast_count;                 //语音芯片播放段数计数
 extern unsigned int  Forcast_content;               //语音芯片播放内容
 extern enum Task WTV_Task;//语音芯片工作状态变量


//定义在pressure.c文件中 
 struct Pressure{
    unsigned int  Jum_Pressure;         //扩大100倍的水压值
    unsigned char Pressure_Mode;        //设定的水压级别
    unsigned int  Pressure_control_time_count;    //压强调整超过一定的次数后
                                                  //仍不行,则报警
    unsigned char xx;                  //当前角度
    unsigned char yy;                  //目标角度
 };
 extern struct Pressure My_Pressure;

//电动阀控制表格
 extern unsigned char code Tab1[8];  //从小开大
 extern unsigned char code Tab2[8];  //从大关小

//在zhymokuai.c中定义 
 extern unsigned char User_Set_Temp_Dis_Count;
 extern bit Flag_UpData_Buffer;
 extern unsigned char Dis_Buffer[9]; //温度调整值存放处

//Temperature.c中定义
  typedef struct Temperature {
              float    SetPoint;           //  设定目标 Desired Value
              float    tt;                 //  测量值     
              unsigned int j;              //扩大100倍整型
              float    LastError;          //  基本偏差 e[t]
              float    PrevError;          //  上次偏差 e[t-1]
              unsigned char  Temperature_Control_Value; //温度控制量
                      	        
 };
 extern struct  Temperature My_Temperature;
 
 extern unsigned char Temperature_Gread(unsigned int temp);
 static unsigned int UserSet_Temperature=370;         //用户设定水温,扩大10倍处理

/*-------------------------------------------------------------------------------------------------------
                                     8个独立按键检测程序
返回参数:被按下的按键编号,有优先级,自上而下
说明:下降沿按键有效
---------------------------------------------------------------------------------------------------------*/
unsigned char Scan_Key(float huafen,float lasthuafen)
{
  
  if(huafen<2.2)return(0);                //无按键按下
  else if((huafen <= 2.80)&&(lasthuafen>=5.0)) return(2);      //温度上加键按下
  else if((huafen <= 3.46)&&(lasthuafen>=5.0)) return(4);      //压力上加键按下
  else if((huafen <= 3.80)&&(lasthuafen>=5.0)) return(1);      //F1键按下
  else if((huafen <= 4.05)&&(lasthuafen>=5.0)) return(6);      //F2键按下
  else if((huafen <= 4.20)&&(lasthuafen>=5.0)) return(8);      //F4键按下
  else if((huafen <= 4.32)&&(lasthuafen>=5.0)) return(7);      //F3键按下
  else if((huafen <= 4.41)&&(lasthuafen>=5.0)) return(5);      //压力下减键按下
  else if((huafen <= 4.50)&&(lasthuafen>=5.0)) return(3);      //温度下减键按下 
                                 
  return(0);                              //无按键按下
} 
/*------------------------------------------------------------------------------------------------
                                    开始/结束按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key1_Process(void)     
{
  if(magnet_valve3==0){       //如果当前处于出水状态
      magnet_valve3=1;        //电磁阀3关 出水阀
      Forcast_content=0x00;   //0表示关闭
  }
  else{
      magnet_valve3=0;        //电磁阀3开,出水
      Forcast_content=0x01;   //1表示开启
  }
  
  WTV_Task=WTV_Task_Water_Out;
 
  fun1(0);                             //播放按键声,此声音结束后经中断开始相应的语音提示
  //Beep=0;
}
/*------------------------------------------------------------------------------------------------
                                    温度加按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key2_Process(void)     
{
  UserSet_Temperature+=5;            //温度设定值已扩大10倍        
  
  if(UserSet_Temperature>380)        //对设定的温度检测调整
      UserSet_Temperature=380;          
  
  My_Temperature.SetPoint+=0.5;         //设定新温度后更新温度控制参数
  if(My_Temperature.SetPoint>=38.0)
      My_Temperature.SetPoint=38.0;        
  Dis_Buffer[0]=Temperature_Gread((unsigned int)(My_Temperature.SetPoint*10));   //LED温度辅助级别显示
  Dis_Buffer[2]=UserSet_Temperature/100;     //分别对应第3,4,5位数码管   
  Dis_Buffer[3]=UserSet_Temperature/10%10;
  Dis_Buffer[4]=UserSet_Temperature%10;                        
  User_Set_Temp_Dis_Count=0;   //用户设定温度延时显示控制
  Flag_UpData_Buffer=0;
  
  Forcast_content=UserSet_Temperature;
  WTV_Task=WTV_Task_Temperature;
  Forcast_count=1;
  
  fun1(0);                             //播放按键声,此声音结束后经中断开始相应的语音提示
      
  //Beep=0;                             //蜂鸣器响
}
/*------------------------------------------------------------------------------------------------
                                    温度减按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key3_Process(void)     
{
  UserSet_Temperature-=5;            //温度设定值已扩大10倍         
  if(UserSet_Temperature<355)        //对设定的温度检测调整
      UserSet_Temperature=355;               
  
  My_Temperature.SetPoint-=0.5;         //设定新温度后更新PID的参数
  if(My_Temperature.SetPoint<=35.5)
      My_Temperature.SetPoint=35.5;  
  Dis_Buffer[0]=Temperature_Gread((unsigned int)(My_Temperature.SetPoint*10));   //LED温度辅助级别显示
  Dis_Buffer[2]=UserSet_Temperature/100;          
  Dis_Buffer[3]=UserSet_Temperature/10%10;
  Dis_Buffer[4]=UserSet_Temperature%10;                            
  User_Set_Temp_Dis_Count=0;
  Flag_UpData_Buffer=0;  
  
  Forcast_content=UserSet_Temperature;
  WTV_Task=WTV_Task_Temperature;
  Forcast_count=1;

  fun1(0);                             //播放按键声,此声音结束后经中断开始相应的语音提示
  
  //Beep=0;                           //蜂鸣器响
}
/*------------------------------------------------------------------------------------------------
                                    水压加按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key4_Process(void)     
{
  My_Pressure.Pressure_Mode++;
  
  if(My_Pressure.Pressure_Mode>6)
      My_Pressure.Pressure_Mode=6;
  Dis_Buffer[1]= My_Pressure.Pressure_Mode;     //水压级别显示数据
  
  My_Pressure.yy=Tab2[My_Pressure.Pressure_Mode]; 

  Forcast_content=My_Pressure.Pressure_Mode;
  WTV_Task=WTV_Task_Pressure;
  Forcast_count=1;   
  
  fun1(0);                              //播放按键声,此声音结束后经中断开始相应的语音提示
  
  //Beep=0;//打开按键蜂鸣
}
/*------------------------------------------------------------------------------------------------
                                    水压减按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key5_Process(void)     
{
  My_Pressure.Pressure_Mode--;
  if(My_Pressure.Pressure_Mode<1)
      My_Pressure.Pressure_Mode=1;
  Dis_Buffer[1]= My_Pressure.Pressure_Mode;     //水压级别显示数据

  My_Pressure.yy=Tab1[My_Pressure.Pressure_Mode];  

  Forcast_content=My_Pressure.Pressure_Mode;        
  WTV_Task=WTV_Task_Pressure;
  Forcast_count=1;    
  
  fun1(0);                             //播放按键声,此声音结束后经中断开始相应的语音提示
  
  //Beep=0;
}
/*------------------------------------------------------------------------------------------------
                                    臭氧消毒按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key6_Process(void)     
{      
  static unsigned char  count1=0;
  count1++;
  if(count1>3)
      count1=1;
 
  if(count1==2)
      Ozone_Control=0;               //打开臭氧消毒
  else if(count1==3)
      Ozone_Control=1;               //关闭臭氧消毒
      
  
  Forcast_content=count1;
  WTV_Task=WTV_Task_Ozone;
  
  fun1(0);                             //播放按键声,此声音结束后经中断开始相应的语音提示
  
}
/*------------------------------------------------------------------------------------------------
                                    功能键1按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key7_Process(void)     
{
    
}
/*------------------------------------------------------------------------------------------------
                                    功能键2按键处理程序
-------------------------------------------------------------------------------------------------*/
void Key8_Process(void)     
{
    
}

/*------------------------------------------------------------------------------------------------
                                            按键处理主程序
---------------------------------------------------------------------------------------------------*/
void Key_Process(void) 
{
  float Key_valatage;
  static float lastKey_valatage=0; 
  unsigned int ad_Key_valatage;
  unsigned char Pressed_Key_Num=0;
  ad_Key_valatage=stc12c512ad(0);
  Key_valatage=(5.02/1024)*ad_Key_valatage;             //调用键盘检测,获取按键编号
  Pressed_Key_Num=Scan_Key(Key_valatage,lastKey_valatage);
  lastKey_valatage=Key_valatage;
  switch(Pressed_Key_Num){
      
      case 0:{                     //无有效键按下
      break;
      }
      
      case 1:{                     // 开始/结束按键
          Key1_Process();       
          break;
      }
      
      case 2:{                     //温度加0.5度键处理  
          Key2_Process();      
      break;
      }
  
      case 3:{                     //温度减0.5键处理 
          Key3_Process();  
      break;
      }
      
      case 4:{                     //压强加键处理 
          Key4_Process();  
      break;
      }
      
      case 5:{                     //压强减键处理
          Key5_Process();  
      break;
      }
      
      case 6:{                     //臭氧消毒按键处理 
          Key6_Process();  
      break;
      }
      
      case 7:{                     //功能键3处理程序
          Key7_Process();  
      break;
      }
      
      case 8:{                      //功能键4处理程序
          Key8_Process();  
      break;
      }
      default:
      break;
  }//end switch
}//end function



⌨️ 快捷键说明

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