📄 复件 key.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 + -