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

📄 keyboard4.c

📁 基于STC12C5410AD单片机的智能冷库控制器的按键操作C语言程序,功能丰富,四级菜单操作.组合键,延时按键操作
💻 C
📖 第 1 页 / 共 4 页
字号:
/*************************************************************
* 文件名称:
*          keyboard4.c
*文件说明:
           四只独立式扫描按键
           系统参数定义
           系统参数设置
           系统参数初始化
**************************************************************/
//#include <msp430x44x.h>
/*******************宏定义************************************/

/*****************外部变量声明*******************************/
extern unsigned char led_show_buf[];
extern unsigned char Dip;
extern unsigned char zhishi_flag;

extern unsigned char YsjRunTime;         //压缩机累计工作时间
extern unsigned char YsjStopTime;        //压缩机停止时间

extern unsigned char YsjForc_Stuts;  //压缩机强制工作状态
extern unsigned char YsjAuto_Stuts;  //压缩机自动工作状态

extern unsigned char FreForc_Stuts;  //化霜设备强制工作状态
extern unsigned char FreAuto_Stuts;  //化霜设备自动工作状态

extern unsigned char YsjJdqStu;          //压缩机继电器的状态(实际的硬件控制寄存器)
extern unsigned char FreJdqStu;          //化霜继电器的状态(实际的硬件控制寄存器)

extern unsigned char FreStopTime;        //化霜停止时间
extern unsigned char FreRunTime;         //化霜运行时间
/***************本程序文件使用的变量定义*********************/
unsigned char Key_Bak;        //记录的前次按键值
unsigned char Key_Temp;       //本次按键值
unsigned char Set_Ok;         //说明键值存在
unsigned char Key_Level;      //按键电平寄存器
unsigned char Key_Value;      //键值寄存器
unsigned int  Key_Old;        //记录某一按键连续按的时间
unsigned char Key_Delay;      //键按下延时标志

unsigned char FCtrl_Delay;    //强制控制延时标志

unsigned char UpDown_Bak;     //
unsigned char UpDown_Temp;    //
unsigned char UpDown_Value;   //
unsigned int  UpDown_Old=0;   //参数设置状态下UP或DOWN键连续按的时间
unsigned char UpDown_Delay=0; //
unsigned char UpDown_Level;

unsigned char ParaCheckCnt=0; //用于第零级菜单下UP或DOWN键的参数显示计数
unsigned char ParaCheckVal=0; //参数查看键值寄存器(UP或DOWN)

unsigned char Key_Ceng=0x00;  //层标志(根据此标志确定使按键功能进入具体某一界面)
unsigned char KC1_Cnt=0x00;   //第一级菜单内计数标志
unsigned char KC2_Cnt=0x00;   //第二级菜单内计数标志

unsigned char NoKey_time=0;   //用于定时器的无按键时间计数
/*******************管理者参数全局变量定义**************************/
unsigned char YsjDelay;      //压缩机延时   F3   0-9分钟
unsigned char FreshCycl;     //化霜周期     F4   0-99小时
unsigned char FreshTime;     //化霜时间     F5   0-99分钟
unsigned char FrStopTemp;    //化霜终止温度 F6   0℃~35℃
unsigned char ExTempWarn;    //超温限报警   F7   0℃~19℃
  signed char TempRevise;    //温度校正     F8  -5℃~+5℃
unsigned char FreshMode;     //化霜模式     F9   0(电热化霜)或1()

/********************用户参数全局变量定义**************************/
  signed char TempSet;        //温度设定    F1  -39℃~+49℃
unsigned char Huicha;         //回差设定     F2     1℃~15℃
/*********************本文件子程序*****************************/

void init_Keyboard(void)
{
  P1DIR|=(KEY_K1+KEY_K2+KEY_K3+KEY_K4);   //按键端口为输出方式
  P1OUT|=(KEY_K1+KEY_K2+KEY_K3+KEY_K4);   //按键端口输出高电平
  P1DIR&=~(KEY_K1+KEY_K2+KEY_K3+KEY_K4);  //按键端口为输入方式
  Key_Old=0;           //计数清零
}

/******************************************************
名称:KSC1U
描述:按键第一级菜单(用户菜单)UP键所执行(菜单项选择)
*******************************************************/
void KSC1U(void)
{
  led_show_buf[0]=0x0c;     //不显示
  led_show_buf[2]=0x0b;     //F
  KC1_Cnt++;
  KC1_Cnt++;
  Dip=0x05;                 //不显示小数点
  Key_Value=0x00;
  if(KC1_Cnt==0x05)
    KC1_Cnt=0x01;
}
/******************************************************
名称:KSC1U0
描述:按键第一级菜单UP键KC1_Cnt=0所执行(菜单F2的参数设置)
*******************************************************/
void KSC1U0(void)
{
  Huicha++;
  if(Huicha==16)    //1-15℃
    {Huicha=1;}
  dec_showbuf((int)(Huicha*10));   //处理后放入显存
  led_show_buf[0]=0x0c;            //清除显存最后一位
  Dip=0x05;                        //不显示小数点
  Key_Value=0x00;
}
/******************************************************
名称:KSC1U2
描述:按键第一级菜单UP键KC1_Cnt=2所执行(菜单F1的参数设置)
*******************************************************/
void KSC1U2(void)
{
  TempSet++;
  if(TempSet==50)    //-39~+49℃
    {TempSet=-39;}
  dec_showbuf((int)(TempSet*10));   //处理后放入显存
  led_show_buf[0]=0x0c;             //清除显存最后一位
  Dip=0x05;                         //不显示小数点
  Key_Value=0x00;
}
/******************************************************
名称:KSC1D
描述:按键第一级菜单(用户菜单)DOWN键所执行(菜单项选择)
*******************************************************/
void KSC1D(void)
{
  led_show_buf[0]=0x0c;     //不显示
  led_show_buf[2]=0x0b;     //F
  Dip=0x05;                 //不显示小数点
  Key_Value=0x00;
  if(KC1_Cnt==0x01)
    KC1_Cnt=0x05;
  KC1_Cnt--;
  KC1_Cnt--;
}
/******************************************************
名称:KSC1D0
描述:按键第一级菜单DOWN键KC1_Cnt=0所执行(菜单F2的参数设置)
*******************************************************/
void KSC1D0(void)
{
  if(Huicha==0)    //1-15℃
    {Huicha=16;}
  Huicha--;
  dec_showbuf((int)(Huicha*10));   //处理后放入显存
  led_show_buf[0]=0x0c;            //清除显存最后一位
  Dip=0x05;                        //不显示小数点
}
/******************************************************
名称:KSC1D2
描述:按键第一级菜单DOWN键KC1_Cnt=2所执行(菜单F1的参数设置)
*******************************************************/
void KSC1D2(void)
{
  if(TempSet==-39)    //-39~+49℃
    {TempSet=50;}
  TempSet--;
  dec_showbuf((int)(TempSet*10));   //处理后放入显存
  led_show_buf[0]=0x0c;             //清除显存最后一位
  Dip=0x05;                         //不显示小数点
}
/******************************************************
名称:KSC2Set
描述:按键第二级菜单(管理者菜单)SET键所执行(参数查看)
*******************************************************/
void KSC2Set(void)
{
  led_show_buf[0]=0x0c;              //清除显存最后一位
   Dip=0x05;                          //不显示小数点
   Key_Value=0x00;    //抬起按键后清零键值同时进入下一项**(关键)                      //
   KC2_Cnt++;         //(KC1_Cnt=2)
   if(KC2_Cnt==0x0b)
      KC2_Cnt=0;
}
/******************************************************
名称:KSC2U
描述:按键第二级菜单(管理者菜单)UP键所执行(菜单项选择)
*******************************************************/
void KSC2U(void)
{
  led_show_buf[0]=0x0c;     //不显示
  led_show_buf[2]=0x0b;     //F
  KC2_Cnt++;
  KC2_Cnt++;
  Dip=0x05;                 //不显示小数点
  Key_Value=0x00;
  if(KC2_Cnt==0x0d)
    KC2_Cnt=0x01;
}

/******************************************************
名称:KSC2U0
描述:按键第二级菜单UP键内KC2_Cnt=0所执行(菜单F8的参数设置)
*******************************************************/
void KSC2U0(void)
{
  TempRevise++;
  if(TempRevise==6)    //-5--+5℃
    {TempRevise=-5;}
  dec_showbuf((int)(TempRevise*10));   //处理后放入显存
  led_show_buf[0]=0x0c;                //清除显存最后一位
  Dip=0x05;                            //不显示小数点
}
/******************************************************
名称:KSC2U2
描述:按键第二级菜单UP键KC2_Cnt=2所执行(菜单F3的参数设置)
*******************************************************/
void KSC2U2(void)
{
  YsjDelay++;
  if(YsjDelay>=10)    //0-9分钟
    {YsjDelay=0;}
  dec_showbuf((int)(YsjDelay*10));   //处理后放入显存
  led_show_buf[0]=0x0c;             //清除显存最后一位
  Dip=0x05;                         //不显示小数点
}
/******************************************************
名称:KSC2U4
描述:按键第二级菜单UP键KC2_Cnt=4所执行(菜单F4的参数设置)
*******************************************************/
void KSC2U4(void)
{
  FreshCycl++;
  if(FreshCycl==100)    //0-99小时
    {FreshCycl=0;}
  dec_showbuf((int)(FreshCycl*10));   //处理后放入显存
  led_show_buf[0]=0x0c;               //清除显存最后一位
  Dip=0x05;                        //不显示小数点
}
/******************************************************
名称:KSC2U6
描述:按键第二级菜单UP键KC2_Cnt=6所执行(菜单F5的参数设置)
*******************************************************/
void KSC2U6(void)
{
  FreshTime++;
  if(FreshTime==100)    //0-99分钟
    {FreshTime=0;}
  dec_showbuf((int)(FreshTime*10));   //处理后放入显存
  led_show_buf[0]=0x0c;               //清除显存最后一位
  Dip=0x05;                        //不显示小数点
}
/******************************************************
名称:KSC2U8
描述:按键第二级菜单UP键KC2_Cnt=8所执行(菜单F6的参数设置)
*******************************************************/
void KSC2U8(void)
{
  FrStopTemp++;
  if(FrStopTemp==36)    //0-35℃
    {FrStopTemp=0;}
  dec_showbuf((int)(FrStopTemp*10));   //处理后放入显存
  led_show_buf[0]=0x0c;               //清除显存最后一位
  Dip=0x05;                        //不显示小数点
}
/******************************************************
名称:KSC2Ua
描述:按键第二级菜单UP键KC2_Cnt=0x0a所执行(菜单F7的参数设置)
*******************************************************/
void KSC2Ua(void)
{
  ExTempWarn++;
  if(ExTempWarn==21)    //0-21℃(20℃取消超温限报警功能)
    {ExTempWarn=0;}
  dec_showbuf((int)(ExTempWarn*10));   //处理后放入显存
  led_show_buf[0]=0x0c;               //清除显存最后一位
  Dip=0x05;                        //不显示小数点
}
/******************************************************
名称:KSC2D
描述:按键第二级菜单DOWN键所执行(菜单项选择)
*******************************************************/
void KSC2D(void)
{
  led_show_buf[0]=0x0c;     //不显示
  led_show_buf[2]=0x0b;     //F
  Dip=0x05;                 //不显示小数点
  Key_Value=0x00;
  if(KC2_Cnt==0x01)
    KC2_Cnt=0x0D;
  KC2_Cnt--;
  KC2_Cnt--;
}
/******************************************************
名称:KSC2D0
描述:按键第二级菜单DOWN键内KC2_Cnt=0所执行(菜单F8的参数设置)
*******************************************************/
void KSC2D0(void)
{
  if(TempRevise==-5)    //-5--+5℃
    {TempRevise=6;}
  TempRevise--;
  dec_showbuf((int)(TempRevise*10));   //处理后放入显存
  led_show_buf[0]=0x0c;                //清除显存最后一位
  Dip=0x05;                            //不显示小数点
}

⌨️ 快捷键说明

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