一个的温湿度控制器有上下按键和设置按键的可以设置温度湿度上限的C51程序例程
时间: 2024-02-29 17:53:14 浏览: 130
基于51单片机的温湿度控制程序
以下是一个基于C51的温湿度控制器的程序例程,其中有上下按键和设置按键,可以设置温度湿度上限:
```c
#include<reg51.h>
#include<lcd.h>
sbit upKey = P1^0; // 上按键
sbit downKey = P1^1; // 下按键
sbit setKey = P1^2; // 设置按键
unsigned char temp = 25; // 初始温度为25℃
unsigned char humi = 60; // 初始湿度为60%
unsigned char tempLimit = 30; // 温度上限默认为30℃
unsigned char humiLimit = 70; // 湿度上限默认为70%
void delay(unsigned int t)
{
unsigned int i, j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void updateTemp()
{
lcd_cmd(0x8F);
lcd_write_data(temp/10+'0');
lcd_write_data(temp%10+'0');
}
void updateHumi()
{
lcd_cmd(0xCF);
lcd_write_data(humi/10+'0');
lcd_write_data(humi%10+'0');
}
void main()
{
lcd_init(); // 初始化LCD显示
lcd_write_string("Temp: Humi: ");
updateTemp();
updateHumi();
while(1)
{
if(upKey == 0) // 上按键
{
delay(10); // 延时去抖动
if(upKey == 0)
{
if(temp < 99)
temp++; // 每按一次增加1℃
updateTemp();
while(!upKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
if(downKey == 0) // 下按键
{
delay(10); // 延时去抖动
if(downKey == 0)
{
if(temp > 0)
temp--; // 每按一次减少1℃
updateTemp();
while(!downKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
if(setKey == 0) // 设置按键
{
delay(10); // 延时去抖动
if(setKey == 0)
{
lcd_cmd(0x01); // 清屏
lcd_write_string("Set Temp&Humi: ");
lcd_cmd(0xC0);
lcd_write_string("Temp: Humi: ");
while(setKey == 0) // 等待设置按键释放
{
if(upKey == 0) // 上按键
{
delay(10); // 延时去抖动
if(upKey == 0)
{
if(tempLimit < 99)
tempLimit++; // 每按一次增加1℃
lcd_cmd(0xCB);
lcd_write_data(tempLimit/10+'0');
lcd_write_data(tempLimit%10+'0');
while(!upKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
if(downKey == 0) // 下按键
{
delay(10); // 延时去抖动
if(downKey == 0)
{
if(tempLimit > 0)
tempLimit--; // 每按一次减少1℃
lcd_cmd(0xCB);
lcd_write_data(tempLimit/10+'0');
lcd_write_data(tempLimit%10+'0');
while(!downKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
if(setKey == 0) // 设置按键
{
delay(10); // 延时去抖动
if(setKey == 0)
{
lcd_cmd(0x01); // 清屏
lcd_write_string("Temp: Humi: ");
while(setKey == 0) // 等待设置按键释放
{
if(upKey == 0) // 上按键
{
delay(10); // 延时去抖动
if(upKey == 0)
{
if(humiLimit < 99)
humiLimit++; // 每按一次增加1%
lcd_cmd(0xCF);
lcd_write_data(humiLimit/10+'0');
lcd_write_data(humiLimit%10+'0');
while(!upKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
if(downKey == 0) // 下按键
{
delay(10); // 延时去抖动
if(downKey == 0)
{
if(humiLimit > 0)
humiLimit--; // 每按一次减少1%
lcd_cmd(0xCF);
lcd_write_data(humiLimit/10+'0');
lcd_write_data(humiLimit%10+'0');
while(!downKey); // 等待按键释放
delay(10); // 延时去抖动
}
}
}
lcd_cmd(0x01); // 清屏
lcd_write_string("Temp: Humi: ");
}
}
}
lcd_cmd(0x01); // 清屏
lcd_write_string("Temp: Humi: ");
updateTemp();
updateHumi();
}
}
// 判断是否超过温湿度上限
if(temp > tempLimit)
{
// 超过温度上限,关闭加热器
// ...
}
else
{
// 未超过温度上限,打开加热器
// ...
}
if(humi > humiLimit)
{
// 超过湿度上限,关闭加湿器
// ...
}
else
{
// 未超过湿度上限,打开加湿器
// ...
}
}
}
```
这个程序通过读取P1口的按键状态来控制温度和湿度值,上按键用来增加温度和湿度,下按键用来减少温度和湿度,设置按键用来设置温度湿度上限。在设置温度湿度上限时,按上下按键可以增加或减少对应的值,设置完成后再次按下设置按键即可返回温度湿度显示界面。需要注意的是,程序中的温湿度上限判断部分只是一个简单的例程,实际的温湿度控制器需要根据具体的需求进行修改和完善。
阅读全文