写一个温湿度控制器,有上下键和设置键,可以设置温度湿度上限,按设置键时数码管能显示设定值,设置结束显示温湿度,C51例程
时间: 2024-02-05 20:03:37 浏览: 111
(含代码,含仿真)基于51单片机+DHT22+LCD1602简易温湿度检测计+温湿度达阈值控制用电器
5星 · 资源好评率100%
以下是一个基于C51单片机的温湿度控制器的例程:
```
#include <reg52.h>
sbit KeyUp = P3^0; // 上键
sbit KeyDown = P3^1; // 下键
sbit KeySet = P3^2; // 设置键
sbit Ds18b20 = P2^7; // DS18B20温度传感器引脚
unsigned char code Segment[10] = { // 数码管显示段码表
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
unsigned char code LedPos[4] = { // 数码管位选表
0xfe, 0xfd, 0xfb, 0xf7
};
unsigned char TempSet = 25; // 温度设定值
unsigned char HumiSet = 60; // 湿度设定值
void Delay(unsigned int time) { // 延时函数
unsigned int i, j;
for (i = time; i > 0; i--)
for (j = 110; j > 0; j--);
}
void Display(unsigned char num, unsigned char pos) { // 数码管显示函数
P1 = Segment[num];
P0 = LedPos[pos];
Delay(1);
P0 = 0xff;
}
float ReadTemperature() { // 读取温度函数
unsigned char a, b;
float temp;
Ds18b20 = 0;
Delay(1);
Ds18b20 = 1;
Delay(1);
a = Ds18b20;
Delay(1);
b = Ds18b20;
temp = (float)(b << 8 | a) * 0.0625;
return temp;
}
void main() {
unsigned char i, temp, humi;
float temperature;
while (1) {
temperature = ReadTemperature(); // 读取温度
temp = (unsigned char)temperature;
humi = 50 + rand() % 50; // 生成随机湿度
for (i = 0; i < 4; i++) {
if (i == 2) // 第3位显示小数点
Display(temp % 10, i);
else
Display(temp / 10, i);
temp = temp % 10;
}
if (KeyUp == 0 && TempSet < 50) { // 上键
TempSet++;
Delay(10);
while (KeyUp == 0);
}
if (KeyDown == 0 && TempSet > 0) { // 下键
TempSet--;
Delay(10);
while (KeyDown == 0);
}
if (KeySet == 0) { // 设置键
for (i = 0; i < 4; i++) {
Display(TempSet / 10, i);
TempSet = TempSet % 10;
Delay(500);
}
while (KeySet == 0);
}
if (temperature > TempSet || humi > HumiSet) { // 控制温湿度
// 控制逻辑
}
}
}
```
该例程使用了DS18B20温度传感器和一个随机数生成函数来模拟温湿度的读取。在主函数中,使用一个无限循环来不断读取温湿度,并且根据上下键和设置键进行设定。当温湿度超过设定值时,可以执行相应的控制逻辑。
阅读全文