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

📄 aircondition.c

📁 基于H83664的空调控制模拟系统 aircondition.c、intprg.c
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(turn_on == 0)
		{
			Sysinit();
		}
		else
		{
			if(mode == 1)
			{
				if(TimeFlag == 0)
				{
					TimeFlag = 1;
					TimerCounter = 0;
					IENR1.BIT.IENTA = 1;//允许定时器A中断
				}
				else
				{
					TimeFlag = 0;
					IENR1.BIT.IENTA = 0;//禁止定时器A中断
				}
			}
			else
			{
				Sysclose();
			}
		}

		IRR1.BIT.IRRI0 = 0;			//清标志位
		IENR1.BIT.IEN0 = 1;   		//允许IRQ0中断		
		return;
	}

	else if(IO.PDRB.BIT.B3 == 1)	//按键2
	{
		if(turn_on == 1)
		{
			//mode = (mode++)%3;
			int temp = 0;
			temp = mode + 1;
			mode = temp;
			if(mode > 2)
				mode = 0;
			switch(mode)
			{
				case 0:
				{
					//LCD显示温度模式
					LcdStrUpdate();
					LCDupdate();
					break;
				}
				case 1:
				{
					//LCD显示定时模式
					LcdStrUpdate();
					LCDupdate();
					break;
				}
				case 2:
				{
					//LCD显示风叶控制模式
					LcdStrUpdate();
					LCDupdate();
					break;
				}
				default:
					break;
			}
		}
		IRR1.BIT.IRRI0 = 0;			//清标志位
		IENR1.BIT.IEN0 = 1;   		//允许IRQ0中断
		return;	
	}	

	else if(IO.PDRB.BIT.B4 == 1)	//按键3
	{
		if(turn_on == 1)
		{
			switch(mode)
			{
				case 0:
				{
					TemperatureSet++;
					if(TemperatureSet > 30) TemperatureSet = 30;
					LcdStrUpdate(); 
					LCDupdate();
					PressLoadControl();
					break;
				}
				case 1:
				{
					TimeSet += 10;
					if(TimeSet > 180) TimeSet = 180;
					LcdStrUpdate(); 
					LCDupdate();
					break;
				}
				case 2:
				{
					IO.PDR8.BIT.B1 = 1;
					FanState = 1;
					LcdStrUpdate();
					LCDupdate();
					break;
				}
				default:
					break;
			}
		}
		IRR1.BIT.IRRI0 = 0;			//清标志位
		IENR1.BIT.IEN0 = 1;   		//允许IRQ0中断
		return;
	}
	else							//按键4
	{
		if(turn_on == 1)
		{
			switch(mode)
			{
				case 0:
				{
					TemperatureSet--;
					if(TemperatureSet < 10) TemperatureSet = 10;
					LcdStrUpdate();
					LCDupdate();
					PressLoadControl();
					break;
				}
				case 1:
				{
					TimeSet -= 10;
					if(TimeSet < 0) TimeSet = 0;
					LcdStrUpdate(); 
					LCDupdate();
					break;
				}
				case 2:
				{
					IO.PDR8.BIT.B1 = 0;
					FanState = 0;
					LcdStrUpdate();
					LCDupdate();
					break;
				}
				default:
					break;
			}
		}
		IRR1.BIT.IRRI0 = 0;			//清标志位
		IENR1.BIT.IEN0 = 1;   		//允许IRQ0中断
		return;
	}

}

/*---------------------------------------------------------------------------

Function:					void Sysinit(void)
Purpose:					实现开机时的初始状态设定

---------------------------------------------------------------------------*/

void Sysinit(void)
{
	int i = 0;
	int j = 0;
	TimerCounter = 0;
	TA.TMA.BYTE = 0x18;		//设定溢出周期为1s
	IRR1.BIT.IRRTA = 0;		//清标志位
	IENR1.BIT.IENTA = 0;	//禁止定时器A中断

	turn_on = 1;			//开机状态
	LCDinit();
	mode = 0;				//温度设定状态
	TemperatureSet = 25;	//温度默认设定25
	TimeSet = 1;			//定时默认设定30
	FanState = 0;			//风叶停
	LcdStrUpdate();
	LCDupdate();
	IO.PDR8.BIT.B3 = 1;		//LED on
	IO.PDR8.BIT.B4 = 1; 	//sound on
	while (i < 50)			//延时
	{
		i++;
		j = 0;
		while (j < 10000)
		{
			j++;
		}
	}
	IO.PDR8.BIT.B4 = 0;		//sound off
	IO.PDR8.BIT.B2 = 1;		//风扇开
	IO.PDR8.BIT.B1 = 0;		//风叶停
	for(i = 0;i <= 6000;i++)//延时等待压缩机启动
	{
		;
	}
	PressLoadControl();		//压缩机工作(根据默认温度设定和当前温度决定压缩机状态)
	return;
}

/*---------------------------------------------------------------------------

Function:					void Sysclose(void)
Purpose:					响应关机命令

---------------------------------------------------------------------------*/

void Sysclose(void)
{
	int i = 0;
	int j = 0;
	turn_on = 0;			//关机状态
	for(i = 0 ;i <= 15;i++)
	{
		LcdStr[i] = ' ';
	}
	LCDupdate();			//LCD显示空
	IO.PDR8.BIT.B4 = 1; 	//sound on
	while (i < 50)			//延时
	{
		i++;
		j = 0;
		while (j < 10000)
		{
			j++;
		}
	}
	IO.PDR8.BIT.B4 = 0;		//sound off	
	IO.PDR8.BIT.B3 = 0;		//LED off
	IO.PDR8.BIT.B2 = 0;		//风扇关
	IO.PDR8.BIT.B1 = 0;		//风叶停
	TV.TCORB = 0;			//压缩机停
	return;
}

/*---------------------------------------------------------------------------

Function:					void LcdStrUpdate(void)
Purpose:					更新LCD显示内容	

---------------------------------------------------------------------------*/

void LcdStrUpdate(void)
{
	
	LcdStr[0] = 'T';
	LcdStr[1] = ':';
	LcdStr[2] = TemperatureNow / 10 + 48;
	LcdStr[3] = TemperatureNow % 10 + 48;
	LcdStr[4] = 'W';
	LcdStr[5] = ':';
	LcdStr[6] = WetNow / 10 + 48;
	LcdStr[7] = WetNow % 10 + 48;
	LcdStr[8] = '%';
	LcdStr[9] = 'M';
	LcdStr[10] = ':';
	switch(mode)
	{
		case 0:	
		{
			LcdStr[11] = 'T';
			LcdStr[12] = TemperatureSet / 10 + 48;
			LcdStr[13] = TemperatureSet % 10 + 48;
			LcdStr[14] = ' ';
			LcdStr[15] = ' ';
			break;
		}
		case 1: 
		{
			LcdStr[11] = 't';
			if(TimeSet >= 100)
			{
				LcdStr[12] = TimeSet / 100 + 48;
				LcdStr[13] = TimeSet % 100 / 10 + 48;
				LcdStr[14] = 48;
			}
			else
			{
				LcdStr[12] = TimeSet / 10 + 48;
				LcdStr[13] = TimeSet % 10 + 48;
				LcdStr[14] = ' ';
			}
			LcdStr[15] = ' ';
			break;
		}
		case 2: 
		{
			LcdStr[11] = 'F';
			if(FanState == 1)
			{
				LcdStr[12] = ' ';
				LcdStr[13] = 'O';
				LcdStr[14] = 'N';
				LcdStr[15] = ' ';
			}
			else
			{
				LcdStr[12] = ' ';
				LcdStr[13] = 'O';
				LcdStr[14] = 'F';
				LcdStr[15] = 'F';
			}
			break;
		}
		default:
			break;
	}
	return;
}

/*---------------------------------------------------------------------------

Function:					void PressLoadControl(void)
Purpose:					根据当前温度设定和当前实际温度决定压缩机状态	

---------------------------------------------------------------------------*/

void PressLoadControl(void)
{
	if(TemperatureNow > TemperatureSet)
	{
		TV.TCORB = (unsigned char)(256.0 / 40.0 * (TemperatureNow - TemperatureSet));
	}
	else
	{
		TV.TCORB = 0;
	}
	return;
}

/*---------------------------------------------------------------------------

Function:					void TimerAInterrupt(void)
Purpose:					定时器A的中断响应子程序,用于实现定时关机	

---------------------------------------------------------------------------*/

void TimerAInterrupt(void)
{
	IENR1.BIT.IEN0 = 0;   		//禁止IRQ0中断
	TimerCounter++;
	if(TimerCounter == TimeSet * 20)
	{
		Sysclose();
		TimerCounter = 0;
		TimeFlag = 0;
		IENR1.BIT.IENTA = 0;	//禁止定时器A中断
	}
	IRR1.BIT.IRRTA = 0;			//清标志位
	IENR1.BIT.IEN0 = 1;   		//允许IRQ0中断
	return;
}

⌨️ 快捷键说明

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