📄 keypress.h
字号:
#define ScanLinIn1 P04
#define ScanLinIn2 P05
#define ScanLinIn3 P06
#define ScanLinIn4 P07
#define ScanLin0 P31
#define ScanLin1 P32
#define ScanLin2 P33
#define ScanLin3 P34
#define LedPin P36
#define HeartMode 4
#define FanMode 3
#define DryMode 2
#define CoolMode 1
#define AutoMode 0
const ShiftClear[]={0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};
const OffMacCode[]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};
//按键示意图
//**********************单键操作**************************
//
//★(44H 模式) ★(42H 风速) ★(41H 查询 ) ★(48H 加) ★(88H 定时开)
//
//★(12H 节电) ★(14H 风门) ★(22H ) ★(82H 减) ★(81H 定时关)
//
//★(18H 传感器切换) ★(28H 机号) ★(21H 定时取消) ★(24H 时间设定)
//
//★(11H Reset)
//**********************单键操作**************************
#define On_Off_Key 0x84 //开关
#define ModiMode_Key 0x44 //模式
#define FanSpeed_Key 0x42 //风速
#define WatchMode_Key 0x41 //查询
#define SetTempAdd_Key 0x48 //加
#define TimerOn_Key 0x88 //定时开
#define SavingElce_Key 0x12 //节电
#define FanDoor_Key 0x14 //风门
#define ForceRun_Key 0x22 //检测
#define SetTempSub_Key 0x82 //减
#define TimerOff_Key 0x81 //定时关
#define TempChange_Key 0x18 //传感器切换
#define ModiAddre_Key 0x28 //机号设定
#define SetTimeCancle_Key 0x21 //时间取消
#define SetTime_Key 0x24 //时间设定
#define Reset_Key 0x11 //复位
#define EnLineContr_Key 0x22 //线控器受控
//*********************多键操作***************************
#define ModiWatchMode_Key 0x62 //数据查询键:时间设定和风门键连续3秒
#define ModiMacNumber_Key 0x32 //机器号允许修改键,连续3秒有效(查询和复位设定)
//********************************************************
#define Min_Freqeuncy 20 //最小运行频率
#define Max_Freqeuncy 110 //最大运行频率
#define Max_OutValve 1000 //最大室外阀开度
#define Max_OutValveH 10
#define Max_OutValveL 0
#define Min_OutValve 0 //最小室外阀开度
#define Min_Temp 0 //最小设定温度-16
#define Max_Temp 14 //最大设定温度-16
#define TimerModeDip 10 //按键修改定时比例数
#define DisNatural 0 //正常显示
#define DisPrimary 0x10 //显示初级用户的数据
#define DisAltitude 0x20 //显示高级用户的数据
#define DisOutFre 0x30 //显示室外频率
#define DisOutValve 0x40 //显示室外阀开度
#define DisInValve 0x50 //显示室内阀开度
#define DisTimerOn 0x60 //显示定时开
#define DisTimerOff 0x70 //显示定时关
#define DisError 0x80 //显示故障
#define DisLineControl 0x90 //线控器显示的数据
#define DisMacNumber 0xa0 //显示机器号
//===================================================================
#define DisOutDataMax 0x50 //查看外机数据最大量 BCD码,
#define DisLSBMax 5 //矩阵时进位时极限值
//===================================================================
void RecognizeOpration();
void AdjustHave_NoKeyOpration(void);
void ScanLineOne(void);
void ScanLineTwo(void);
void ScanLineThree(void);
void ScanLineFour(void);
void ReadScanInputValue(unbyte Line);
void KeyValueDispose(void);
void KeyValueDispose(void)
{
WDTC.byte=0x05;
if (0==KeyReadyFlag) return; //按键没有确认完成退出
if (0==LcdAllLightFlag)return; //液晶复位完成
KeyReadyFlag=0;
LcdClear3sFlag=0;
Time3SecondCounter=0;
SetTempUp=0;
SetTempDown=0;
RemoteOnFlag=1;
//软件复位
if (KeyValueRegister == Reset_Key)
{ResetCode[0]=0;STBC_RST=0;}
//室内机在查询故障时,按任何键推出查询
if (DisplayMode==0x80)
{DisplayMode=0;return;}
if (0==DisModeSavedFlag)
{//寄存显示模式
DisplayModeTemporary=DisplayMode;
DisModeSavedFlag=1;
}
if (KeyValueRegister==On_Off_Key && MacNumEntOkFlag)
{
//开关当前显示的机器
if (RemoteModeFlag)
{
if (IndoorTestOverFlag==0)
{return;}//集控器时,如果没有探测到室内机则退出
}
// MacNumModeOkFlag=1; //开机之后不允许在修改机器编号
if (On_Off)
{On_Off=0;}
else
{On_Off=1;}
TimerCancleProgram(); //定时过程中有开关机操作,关闭当前机器的定时功能
OnOffMacIconDispose();//开关机图标处理程序
}
//开关机处理程序
if (KeyValueRegister==On_Off_Key)
{
if (RemoterOnKeyFlag)
{
if (AllMacOn_Off.word==0xffff)
{RemoterOnKeyFlag=0;LcdClear3sFlag=1;}
}
else
{RemoterOnKeyFlag=1;}
}
//第一次按键(开关、复位键除外)处理程序
if (LcdOffDisposeFlag==0)
{LcdOffDisposeFlag=1;return;}//-----------------------------没有开机,第一次操作按键只显示上一次或者是复位时的数据
// if (MacNumEntOkFlag==0)
// {return;}
//强制运行标志
if (KeyValueRegister==ForceRun_Key && RemoteModeFlag && KeyEnModeWatchModeFlag)
//------------------------------有显示模式切换操作,并且该控制器是集控器
{
if (ForceRunFlag)
{ForceRunFlag=0;}
else
{ForceRunFlag=1;}
InForceRun=ForceRunFlag; //室内机强制运行标志
return;
}
//传感器切换处理程序
if (KeyValueRegister == TempChange_Key)
{
if (RemoteModeFlag) return; //集控器无传感器切换
if (TempChoose)
{TempChoose=0;}
else
{TempChoose=1;}
// LCDErrorIconFlashTimer=0;
// KeyTempChangeFlag=0;return;
}
//查询模式
if (KeyValueRegister==WatchMode_Key)
//------------------------------有显示模式切换操作,并且该控制器是集控器
{/*显示模式=0正常,=1 显示室外常用; =2 显示外部综合参数;=3显示频率;=4室外阀开度;=5室内阀开度*/
if (KeyEnModeWatchModeFlag)
{//允许观察室外数据
if (RemoteModeFlag)
{
if ((DisplayMode & 0xf0) == DisError)
{DisplayMode &= 0x0f;}
else if ((DisplayMode & 0xf0) == DisInValve)
{
DisplayMode &= 0x0f;
DisplayMode |=DisError;
}
else
{DisplayMode+=0x10;}
}
else
{DisplayMode ^= DisLineControl;} //线控器时查看数据
}
else
{//故障查询
if (InError[DisplayMachineOrder]==0 && ErrCode==0 && LimitFre==0)
{DisplayMode=0;return;}
if ((DisplayMode & 0xf0) == DisError)
{DisplayMode &= 0x0f;}
else
{DisplayMode =DisError;}
}
return;
}
//模式处理程序
WDTC.byte=0x05;
if (KeyValueRegister == ModiMode_Key)
{
ModeHaveActionFlag=1;
DelayDisposeKeyTime=0;
AllUserProgram();
// ModeClashProgram();
return;
}
//定时开标志处理程序
if (KeyValueRegister == TimerOn_Key)
{
if (0==On_Off && (0==TimerOffFlag)) return; //如果现在正在开机,并且没有定时关机功能时,不能设置定时开
if (!LcdDisModeSavedFlag)
{LcdDisModeSavedFlag=1;}
HaveDisposeTimerOnKeyFlag=1;
HaveDisposeTimerOffKeyFlag=0;
DisplayMode = DisTimerOn;
TimerOnH=TimerOn[DisplayMachineOrder]/60;
TimerOnL=TimerOn[DisplayMachineOrder]%60;
return;
}
//定时关标志处理程序
if (KeyValueRegister==TimerOff_Key)
{
if (On_Off && (0==TimerOnFlag)) return; //如果现在正在关机,并且没有定时开机功能时,不能设置定时关
if (!LcdDisModeSavedFlag)
{LcdDisModeSavedFlag=1;}
HaveDisposeTimerOnKeyFlag=0;
HaveDisposeTimerOffKeyFlag=1;
DisplayMode = DisTimerOff;
TimerOffH=TimerOff[DisplayMachineOrder]/60;
TimerOffL=TimerOff[DisplayMachineOrder]%60;
return;
}
//时间设定确定处理程序
WDTC.byte=0x05;
if (KeyValueRegister==SetTime_Key)
{
i=DisplayMode & 0xf0;
if ((i != DisTimerOn) && (i != DisTimerOff)) return;
if (DisTimerOff==i)
{//定时关机
HaveDisposeTimerOffKeyFlag=0;
if (TimerOffH || TimerOffL)
{
TimerOff[DisplayMachineOrder]=TimerOffH*60+TimerOffL;
TimerOffH=0;
TimerOffL=0;
if (TimerOn[DisplayMachineOrder])
{}
else
{TimerOffFlag =1;}
}
else
{TimerOff[DisplayMachineOrder]=0;}
}
if (DisTimerOn == i)
{//定时开机
HaveDisposeTimerOnKeyFlag=0;
if (TimerOnH || TimerOnL)
{
TimerOn[DisplayMachineOrder]=TimerOnH*60+TimerOnL;
TimerOnH=0;
TimerOnL=0;
if (TimerOff[DisplayMachineOrder])
{}
else
{TimerOnFlag =1;}
}
else
{TimerOn[DisplayMachineOrder]=0;}
}
DisplayMode=0;
LcdDisModeSavedFlag=0;
tTimer1Minute=0;
}
//定时取消键
if (KeyValueRegister==SetTimeCancle_Key)
{TimerCancleProgram();}
//机号切换处理程序
if (KeyValueRegister==ModiAddre_Key)
{
if (RemoteModeFlag && IndoorTestOverFlag)
{//是集控器时,每切换一次将当前机器的定时设置读入缓冲区
CheckMacNumber();
DisplayMode=DisMacNumber;
HaveDisposeTimerOnKeyFlag=0;
HaveDisposeTimerOffKeyFlag=0;
// DisplayMachineOrder++;
// if (IndoorMacs == DisplayMachineOrder)
// {DisplayMachineOrder=0;}
TimerOnH=TimerOn[DisplayMachineOrder]/60;
TimerOnL=TimerOn[DisplayMachineOrder]%60;
TimerOffH=TimerOff[DisplayMachineOrder]/60;
TimerOffL=TimerOff[DisplayMachineOrder]%60;
ValveOpenH=ValveOpen[DisplayMachineOrder] / 100;
ValveOpenL=ValveOpen[DisplayMachineOrder] % 100;
//AllUserProgram();
// ModeClashProgram();
return;
}
else //是线控器时,该按键是机号设定的确认键
{
if (KeyEnModiInNumberFlag)
{
NewIndoorNumber=IndoorMacNumBuff;
KeyEnModiInNumberFlag=0;//不允许修改机器号
}
}
}
//风门处理程序
if (KeyValueRegister==FanDoor_Key)
{
if (FanDoor==0)
{FanDoor=7;}
else
{FanDoor -=1;}
if (FanDoor==7)
{InductDoor2=1;}
return;
}
//风速处理程序
if (KeyValueRegister==FanSpeed_Key)
{
if (FanSpeed==0x1)
{FanSpeed =8 ;}//--------------->如果是低风,则转换成自动风
else
{FanSpeed >>= 1;}
return;
}
//节电处理程序
if (KeyValueRegister==SavingElce_Key)
{
// SaveElc =~ SaveElc;
// return;
}
//温度减处理程序
if (KeyValueRegister==SetTempSub_Key)
{
SetTempUp=0;
i=DisplayMode & 0xf0;
if (i ==DisMacNumber)
{
DisplayMode=DisNatural;
i=DisNatural;
}
if (KeyEnModiInNumberFlag)
{//允许室内机编号
IndoorMacNumBuff--;
if (IndoorMacNumBuff<1)
{
IndoorMacNumBuff=1;
SetTempDown=1;return;
}
return;
}
if (DisNatural==i)
{
if (Mode== HeartMode)
{//如果是制热
if (SetHeartTemp)
{SetHeartTemp--;}
if (SetHeartTemp==Min_Temp)
{
SetHeartTemp=Min_Temp;
SetTempDown=true;
}
SetTemp=SetHeartTemp;
}
else
{
if (SetCoolTemp)
{SetCoolTemp--;}
if (SetCoolTemp==Min_Temp)
{
SetCoolTemp=Min_Temp;
SetTempDown=1;
}
SetTemp=SetCoolTemp;
}
return;
}
if (DisPrimary==i || DisLineControl==i)
{//修改查看外温度顺序
//DisplayModeTemporary=DisplayMode;
if ((DisplayMode & 0x0f)==0)
{SetTempDown=1;}
else
{DisplayMode--;}
return;
}
if (DisAltitude==i)
{//修改查看室外综合参数顺序
if (DisplayDataOrder == 0x00)
{SetTempDown=1;}
else if (0 == (DisplayDataOrder & 0x0f))
{
DisplayDataOrder &= 0xf0;
DisplayDataOrder += DisLSBMax;
DisplayDataOrder -= 0x10;
}
else
{DisplayDataOrder--;}
return;
}
if (DisTimerOn==i)
{//定时开机时间设定减
if (0<=TimerOnL && TimerOnL<10)
{
if (0==TimerOnH)
{TimerOffL=0;SetTempDown=1;return;}
TimerOnH--;
TimerOnL=50;
return;
}
TimerOnL -= TimerModeDip;
return;
}
if (DisTimerOff==i)
{//定时关机时间设定减
if (0<=TimerOffL && TimerOffL<10)
{
if (0==TimerOffH)
{TimerOffL=0;SetTempDown=1;return;}
TimerOffH--;
TimerOffL=50;
return;
}
TimerOffL -= TimerModeDip;
return;
}
if (0==ForceRunFlag) return;
if (DisOutFre==i)
{//强制运行处理程序
ForceFrequency--;
if (ForceFrequency<=Min_Freqeuncy)
{
ForceFrequency=Min_Freqeuncy;
SetTempDown=true;
}
return;
}
if (DisOutValve==i)
{//室外阀减处理
if (Min_OutValve==OutValve)
{
OutValve=Min_OutValve;
SetTempDown=true;
}
else
{OutValve--;}
return;
}
if (DisInValve==i)
{//强制运行时室内机阀开度处理程序
ValveOpenH=ValveOpen[DisplayMachineOrder] / 100;
ValveOpenL=ValveOpen[DisplayMachineOrder] - ValveOpenH*100;
if (0==ValveOpenL)
{
if (0==ValveOpenH)
{SetTempDown=true;return;}
ValveOpenL=99;
ValveOpenH--;
}
else
{ValveOpenL--;}
ValveOpen[DisplayMachineOrder]=ValveOpenH*100+ValveOpenL;
return;
}
}
//温度加处理程序
WDTC.byte=0x05;
if (KeyValueRegister==SetTempAdd_Key)
{
SetTempDown=false;
if (KeyEnModiInNumberFlag)
{//允许室内机编号
IndoorMacNumBuff++;
if (IndoorMacNumBuff>IndoorMacs)
{
IndoorMacNumBuff=IndoorMacs;
SetTempUp=1;return;
}
return;
}
i=DisplayMode & 0xf0;
if (i ==DisMacNumber)
{
DisplayMode=DisNatural;
i=DisNatural;
}
if (DisNatural==i)
{//修改设定温度
if (Mode== HeartMode)
{
SetHeartTemp++;
if (SetHeartTemp>Max_Temp)
{
SetHeartTemp=Max_Temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -