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

📄 keypress.h

📁 Fujitsu MB89P475的应用实例
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -