📄 aircondition.c
字号:
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 + -