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

📄 keypress.h

📁 Fujitsu MB89P475的应用实例
💻 H
📖 第 1 页 / 共 2 页
字号:
									SetTempUp=true;
								}
							SetTemp=SetHeartTemp;	
						}
					else
						{
							SetCoolTemp++;
							if (SetCoolTemp>Max_Temp)
								{
									SetCoolTemp=Max_Temp;
									SetTempUp=true;
								}
							SetTemp=SetCoolTemp;	
						}
					return;	
				}
			if (DisPrimary==i)	
				{//修改查看外温度顺序
					//DisplayModeTemporary=DisplayMode;	
					if ((DisplayMode & 0x0f)== 10)
						{SetTempUp=1;}
					else
						{DisplayMode++;}
					return;	
				}
			if (DisLineControl==i)	
				{//线控器查看数据
					if ((DisplayMode & 0x0f)== 12)
						{SetTempUp=1;}
					else
						{DisplayMode++;}
					return;	
				}
			if (DisAltitude==i)	
				{//修改查看外温度顺序
					if (DisplayDataOrder == DisOutDataMax)
						{SetTempUp=1;}
					else if (DisLSBMax == (DisplayDataOrder & 0x0f))
						{
							DisplayDataOrder &= 0xf0;
							DisplayDataOrder += 0x10;	
						}
					else	
						{DisplayDataOrder++;}
					return;	
				}
			if (DisTimerOn==i)	
				{//定时开机时间设定加
					if (50<=TimerOnL && TimerOnL<60)
						{
							if (23 <=TimerOnH)
								{TimerOnH=23;SetTempUp=1;return;}
							TimerOnH++;
							TimerOnL = 0;	
							return;
						}	
					TimerOnL += TimerModeDip;	//定时修改比例
					return;
				}
			if (DisTimerOff==i)	
				{//定时关机时间设定加
					if (50<=TimerOffL && TimerOffL<60)
						{
							if (23 <=TimerOffH)
								{TimerOffH=23;SetTempUp=1;return;}
							TimerOffH++;
							TimerOffL = 0;	
							return;
						}	
					TimerOffL += TimerModeDip;
					return;
				}
			if 	(0==ForceRunFlag) return;
			if (DisOutFre==i)
				{//强制运行频率设置
					ForceFrequency++;
					if (ForceFrequency>=Max_Freqeuncy)
						{
							ForceFrequency=Max_Freqeuncy;
							SetTempUp=true;
						}
					return;	
				}
			if (DisOutValve==i)
				{//室外阀开度
					OutValve++;
					if (OutValve>=Max_OutValve)
						{
							OutValve=Max_OutValve;
							SetTempUp=true;
						}
					return;	
				}
			if  (DisInValve == i)
				{//强制运行时室内机阀开度处理程序			
					ValveOpenH=ValveOpen[DisplayMachineOrder] / 100;
					Dobule=ValveOpenH*100;
					ValveOpenL=ValveOpen[DisplayMachineOrder] -Dobule;
					if (5<=ValveOpenH)
						{
							SetTempUp=true;
							ValveOpenL=0;
							ValveOpenH=5;
							return;
						}
					if (99==ValveOpenL)
						{
							ValveOpenH++;
							ValveOpenL=0;
						}	
					else
						{ValveOpenL++;}
					ValveOpen[DisplayMachineOrder]=Dobule+ValveOpenL;	
					return;	
				}
		}	
}

//======================================
CheckMacNumber()
{
	k=DisplayMachineOrder;
	if (k==IndoorMacs-1) {k=0;}
//	Dobule=0x0001;
//	Dobule=Dobule<<k;
	Dobule=OffMacCode[k];

	for (i=0;i<IndoorMacs;i++)
		{
			Dobule=Dobule*2;
			WDTC.byte=0x05;
			if (Dobule==0) {Dobule=1;i=0;k=0xff;}
			if (HaveMacFlag.word & Dobule)
				{DisplayMachineOrder=k+1;break;}
			else
				{
					k++;
					if (k==(IndoorMacs))
						{k=0;}
				}	
		}
}









TimerCancleProgram()
{//定时取消程序
	HaveDisposeTimerOnKeyFlag=0;	
	HaveDisposeTimerOffKeyFlag=0;		
	TimerOnFlag=0;
	TimerOffFlag=0;
	TimerOnH=0;
	TimerOnL=0;
	TimerOffH=0;
	TimerOffL=0;
	DisModeSavedFlag=0;
	TimerOn[DisplayMachineOrder]=0;
	TimerOff[DisplayMachineOrder]=0;
	DisplayMode=DisplayModeTemporary;
}


OnOffMacIconDispose()
{//开关机时的图标处
	OnOffMacIconDispose_0();	
	if	(AllMacOn_Off.word==0xffff)
		{
			RemoteOnFlag=0;
			LedPin=1;								//Led灯灭
			LcdOffDisposeFlag=0;
		}
	else
		{LedPin=0;LcdOffDisposeFlag=1;}
}


OnOffMacIconDispose_0()
{
	AllMacOn_Off.word=0;//开关机标志清零
	for (i=0;i<IndoorMacs;i++)
		{
			WDTC.byte=0x5;
			if (ModeRegister[i].bit_.On_Off_)
				{AllMacOn_Off.word |= OffMacCode[i];}		//将所有机器开关机标志转移到 AllMacOn_Off.word 中
			else
				{AllMacOn_Off.word &= ShiftClear[i];}
		}
}







ModeClashProgram()
{//模式冲突处理程序
	WDTC.byte=0x05;
//	OutOn_Off=0;
//	if (OutOn_Off)
//		{//室外机已经开机
//			if (OutMode)
//				{OnlyHearProgram();}//室外机已经开机制热,则所有室内机只能制热
//			else
//				{NotUserHeartProgram();}//室外机开机不是制热,则所有室内机不能制热	
//		}
//	else
//		{//室外机没开机
			j=0;Flag0=0;Flag1=0;			//Flag0	有室内机在制热标志
			for (i=0;i<IndoorMacs;i++)			
				{//计算开机总数
					if (!ModeRegister[i].bit_.On_Off_)
						{
							j++;l=i;		//j 为开机总数;l 为已经开机编号的最后一个
							if (FuctionRegister[i].bit_.Mode_ == HeartMode)	
								{Flag0=1;}//有机器在开制热
							if (FuctionRegister[i].bit_.Mode_ != HeartMode)	
								{Flag1=1;}//有机器在没有开制热
						}
				}
				
			if (KeyValueRegister ==ModiAddre_Key)
				{//如果当前是机器切换键
					if (Flag0)//如果已经有机器在开机制热
					   {Mode=HeartMode;}//当前机器只能制热
					else
					   {
					   	 if (Flag1 && (Mode==HeartMode))//如果有机器在开机制冷,且当前机器是制热未开机,
					   	 	{Mode=AutoMode;InMacModeRegister[DisplayMachineOrder]=Mode;}//当前机器换成自动模式
					   	 else
					   	 	{Mode=InMacModeRegister[DisplayMachineOrder];}	   
					   	 }	
					return;   					
				}
				
			if (0==j)
				{AllUserProgram();}//所有有室内机均没有开,则可以选择所有模式
			else if (1==j)			//开一台室内机
				{
					if (l==DisplayMachineOrder)//只有当前机器开机
						{AllUserProgram();}							
					else if (Flag0)				//另外的一台机器开制热
						{OnlyHearProgram();}	
					else 						//另外的一台机器不制热
						{NotUserHeartProgram();}														
				}
			else
				{
					if (Flag0)				//另外的一台机器开制热
						{OnlyHearProgram();}	
					else 						//另外的一台机器不制热
						{NotUserHeartProgram();}														
				}		
			InMacModeRegister[DisplayMachineOrder]=Mode;
//		}	
}

OnlyHearProgram()
	{Mode=HeartMode;}

NotUserHeartProgram()
{
	if (Mode >= FanMode)    
		{Mode = AutoMode;}	
	else
		{Mode++;DisCoolFlag=0;}
}
AllUserProgram()
{
	if (Mode >= HeartMode)    
		{Mode = AutoMode;DisCoolFlag=0;}	
	else
		{
			Mode++;
			if (Mode==HeartMode)
				{DisCoolFlag=1;}
		}
}
//======================================
//======================================
//======================================
void	keypress(void)
{
	WDTC.byte=0x05;
//------------------------------------------------------------------------------------
	if (DelayDisposeKeyTime>488)	
		{//--------------------------------------------------------->需要延时处理的按键
			if (ModeHaveActionFlag)
				{//------------------------------------->模式键延时发送
					ModeHaveActionFlag=0;
					
				}
		}
//------------------------------------------------------------------------------------
	if (KeyOpenFlag)
		{//KeyOpenFlag=1---------------------------->允许判断按键是否松开标志
			if (KeyDelayTime>2)
				{
					KeyDelayTime=0;
					KeyManMadeFlagClearTime=0;
					if (MacNumEntOkFlag)
						{KeyManMadeFlagClearTime=0;KeyManMadeRuned=1;}//---------------------有人工按键操作				
					RecognizeOpration();
//*********************************************************************************************					
//********************************加减键连续处理程序*******************************************
					if (KeyReadyFlag==0)
						{
							if  (KeyContinuumTime>=300)
								{
									if ((KeyValueRegister==SetTempAdd_Key || KeyValueRegister==SetTempSub_Key) && (KeyMulKeyDelayTime>40))
										{
											KeyMulKeyDelayTime=0;
											if (DisOutValve==DisplayMode)
												{j=20;}//阀的连续加,每次加20
											else
												{j=2;}//阀以外的连续加,如温度,每次加2	
											for (k=0;k<j;k++)
												{KeyReadyFlag=1;KeyValueDispose();}
										}
								}
//********************************复合键连续处理程序*******************************************
							WDTC.byte=0x05;
							if (KeyMulCloseFlag) return;
							if (KeyContinuum3STime>=732)
								{
									LcdClear3sFlag=0;	
									Time3SecondCounter=0;
									//BuzzerWorkNumber=2;
									KeyContinuum3STime=0;
									KeyMulCloseFlag=1;
									if  (KeyValueRegister==ModiWatchMode_Key)
										{
											//if (RemoteModeFlag)
											//	{//是集控器
													if (KeyEnModeWatchModeFlag)
														{KeyEnModeWatchModeFlag=0;}
													else
														{KeyEnModeWatchModeFlag=1;}
													DisplayMode=0;
													BuzzerWorkNumber=2;
											}
//									if (KeyValueRegister==ModiMacNumber_Key && On_Off  && 0==MacNumModeOkFlag)
									if (KeyValueRegister==ModiMacNumber_Key   && 0==MacNumModeOkFlag)
										{//开机状态不允许修改机器号,且只有在初次上电没开机之前设置机号
											BuzzerWorkNumber=2;
											KeyReadyFlag=1;
											KeyEnModiInNumberFlag=1;
											IndoorMacNumBuff=DisplayMachineOrder+1;
											OldIndoorNumber=DisplayMachineOrder;
											KeyValueDispose();
										}		
									if (KeyValueRegister == EnLineContr_Key && RemoteModeFlag)
										{//开关室内机是否受线控器控制器
											if (EnLineContr)
												{EnLineContr=0;}
											else
												{EnLineContr=1;}	
											KeyReadyFlag=0;
											BuzzerWorkNumber=2;
										}
	
								}	
						}
//---------------------------------------------------------------------------------------------
					else	
						{
							BuzzerWorkNumber=1;
							KeyValueDispose();
							//装载设定温度
							if (Mode== HeartMode)
								{SetTemp=SetHeartTemp;}
							else
								{SetTemp=SetCoolTemp;}
						}
//*********************************************************************************************					
				}
		}
	else
		{
			if (KeyCloseFlag)
				{								//KeyCloseFlag=1------------------->有键按下
					//扫描
					if (KeyDelayTime<1) return;
					KeyDelayTime=0;
					
					ScanLineOne();
					ScanLineTwo();
					ScanLineThree();
					ScanLineFour();
					
					WDTC.byte=0x05;
					
					if (cKeyDetections==0)
						{KeyValue=KeyValueRegister;cKeyDetections++;}			//第一次读值不与上一次值比较
					else
						{
							if (KeyValue != KeyValueRegister || KeyValueRegister==0)
								{
									KeyCloseFlag=0;
									cKeyDetections=0;
									return;
								}
							else
								{
									cKeyDetections++;
									if (5==cKeyDetections)
										{								
											KeyMulKeyDelayTime=0;		
					
											KeyContinuum3STime=0;
											KeyOpenFlag=1;
											KeyCloseFlag=0;
										}
								}	
						}	

				}
			else
				{AdjustHave_NoKeyOpration();}	
		}		
}



void AdjustHave_NoKeyOpration()
{
	WDTC.byte=0x05;
	ScanLin0=false;ScanLin1=false;
	ScanLin2=false;ScanLin3=false;
	if (ScanLinIn1 && ScanLinIn2 && ScanLinIn3 && ScanLinIn4)
		{//------------------------------------------------------->都为1则无键按下
			;
		}
	else
		{//----------------------------------------------------->只要有一个为1则有键按下	
			KeyValueRegister=0;//------------------------------->键值寄存器清零
			KeyCloseFlag=1;//----------------------------------->设置有键按下标志
			
			KeyDelayTime=0;
			
			KeyContinuumTime=0;
			KeyReadyFlag=0;			
			
			cKeyDetections=0;
		}
}




void 	ScanLineFour()
{
	ScanLin0=true ;ScanLin1=true;
	ScanLin2=true;ScanLin3=false;
	ReadScanInputValue(8);
}

void 	ScanLineThree()
{
	ScanLin0=true ;ScanLin1=true;
	ScanLin2=false ;ScanLin3=true;
	ReadScanInputValue(4);
}

void 	ScanLineTwo()
{
	ScanLin0=true ;ScanLin1=false;
	ScanLin2=true ;ScanLin3=true;
	ReadScanInputValue(2);
}



void 	ScanLineOne()
{
	ScanLin0=false;ScanLin1=true;
	ScanLin2=true ;ScanLin3=true;
	ReadScanInputValue(1);
}

void	ReadScanInputValue(unbyte Line)
{
	if 	(ScanLinIn1==0)
		{KeyValueRegister|=(0x10+Line);}
	if 	(ScanLinIn2==0)
		{KeyValueRegister|=(0x20+Line);}
	if 	(ScanLinIn3==0)
		{KeyValueRegister|=(0x40+Line);}
	if 	(ScanLinIn4==0)
		{KeyValueRegister|=(0x80+Line);}
}


void RecognizeOpration()
{
	ScanLin0=false;ScanLin1=false;
	ScanLin2=false;ScanLin3=false;
	if (ScanLinIn4 && ScanLinIn3 && ScanLinIn2 && ScanLinIn1)
		{
			KeyCloseFlag=0;
			KeyReadyFlag=1;	
			KeyOpenFlag=0;	
			if (KeyMulCloseFlag)
				{
					KeyMulCloseFlag=0;
					KeyReadyFlag=0;
				}	
		}	
	else
		{KeyReadyFlag=0;}
}

⌨️ 快捷键说明

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