标题:
Proteus模拟仿真蔬菜大棚系统设计 可以帮忙看看哪里有问题吗?
[打印本页]
作者:
鳩螭
时间:
2023-5-25 18:42
标题:
Proteus模拟仿真蔬菜大棚系统设计 可以帮忙看看哪里有问题吗?
Proteus模拟仿真蔬菜大棚系统设计
一、功能
1. 设计一个蔬菜大棚系统电路,此电路能够检测大棚内温度和湿度两种数据。
2. 为了蔬菜的更好生长,要求对大棚内温度和湿度进行控制,温度高了,采用电机散热,温度低了采用继电器控制加热丝加热;湿度低了,采用继电器控制电磁阀放水。
3. 当大棚内温度和湿度参数超出上下界限时,会进行声光报警。
4. 数码管实时显示大棚内当前温度和湿度值。
5. 该系统有四个按键分别控制温湿度切换,加,减和确定。
二、要求
1.采用Proteus软件模拟仿真实现系统设计
2.能检测温度和湿度两种数据,并实时数码管显示。
3.有相对应的温度和湿度控制操作。
可以帮忙看看哪里有问题吗?
#include <REG51.H>//头文件
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char//定义uchar为无符号字符型
#define uint unsigned int//定义uint为无符号整型
#define DHT11_PIN P2_3//温湿度检测模块数据引脚
#define BEEP_PIN P2_4//蜂鸣器引脚
#define LED_PIN P3_0//LED灯引脚
#define FAN_PIN P3_2//风扇控制引脚
#define PUMP_PIN P3_3//水泵控制引脚
#define HEAT_PIN P3_4//加热指示引脚
#define LCD_DATA P0//液晶显示屏DATA引脚
#define LCD_RS P2_5//液晶显示屏RS引脚
#define LCD_RW P2_6//液晶显示屏RW引脚
#define LCD_E P2_7//液晶显示屏E引脚
#define KEY_PLUS P1_4//加键引脚
#define KEY_MINUS P1_5//减键引脚
#define KEY_OK P1_6//确定键引脚
#define KEY_SWITCH P1_7//温湿度切换键引脚
sbit DHT11_PIN = P2^3;
sbit BEEP_PIN = P2^4;
sbit LED_PIN = P3^0;
sbit FAN_PIN = P3^2;
sbit PUMP_PIN = P3^3;
sbit HEAT_PIN = P3^4;
sbit LCD_RS = P2^5;
sbit LCD_RW = P2^6;
sbit LCD_E = P2^7;
sbit KEY_PLUS = P1^4;
sbit KEY_MINUS = P1^5;
sbit KEY_OK = P1^6;
sbit KEY_SWITCH = P1^7;
unsigned char table[] ="Temperature: 00C Humidity: 00%";//液晶显示屏显示格式
unsigned char temperature, humidity;
//延时ms函数
void delay_ms(uint ms) {
uint i, j;
for (i = ms; i > 0; i--)
for (j = 114; j > 0; j--);
}
//延时us函数
void delay_us(uint us) {
while (us--);
}
void LCD_write_cmd(uchar cmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
}
void LCD_write_data(uchar dat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
}
void LCD_init() {
LCD_write_cmd(0x38);
delay_ms(5);
LCD_write_cmd(0x38);
delay_ms(1);
LCD_write_cmd(0x38);
delay_ms(1);
LCD_write_cmd(0x38);
delay_ms(1);
LCD_write_cmd(0x08);
delay_ms(1);
LCD_write_cmd(0x01);
delay_ms(1);
LCD_write_cmd(0x06);
delay_ms(1);
LCD_write_cmd(0x0c);
delay_ms(1);
}
void DHT11_start() {
DHT11_PIN = 0;
delay_ms(18);
DHT11_PIN = 1;
delay_us(30);
}
uchar DHT11_response() {
uchar i;
for (i = 0; i < 9; i++) {
if (!DHT11_PIN) {
while (!DHT11_PIN);
return 0;
}
}
if(DHT11_PIN) {
while (DHT11_PIN);
return 1;
}
return 0;
}
uchar DHT11_read_byte() {
uchar i, dat = 0;
for (i = 0; i < 8; i++) {
while (!DHT11_PIN);
delay_us(30);
if (DHT11_PIN)
dat |= (1 << (7 - i));
while (DHT11_PIN);
}
return dat;
}
void DHT11_read_data() {
uchar check_sum;
DHT11_start();
if (DHT11_response()) {
humidity = DHT11_read_byte();
humidity = DHT11_read_byte();
temperature = DHT11_read_byte();
temperature = DHT11_read_byte();
check_sum = DHT11_read_byte();
if (check_sum == (humidity + temperature))
LED_PIN = 0;
else
LED_PIN = 1;
}
else {
LED_PIN = 1;
}
}
void display_data() {
uchar i;
uchar temp = temperature;
uchar humi = humidity;
table[13] = temp / 10 + '0';
table[14] = temp % 10 + '0';
table[28] = humi / 10 + '0';
table[29] = humi % 10 + '0';
for (i = 0; i < 32; i++)
LCD_write_data(table[i ]);
}
void fan_control(uchar flag) {
if (flag) {
FAN_PIN = 1;
HEAT_PIN = 0;
}
else {
FAN_PIN = 0;
}
}
void pump_control(uchar flag) {
if (flag) {
PUMP_PIN = 1;
}
else{
PUMP_PIN = 0;
}
}
void heat_control(uchar flag) {
if (flag) {
HEAT_PIN = 1;
FAN_PIN = 0;
}
else {
HEAT_PIN = 0;
}
}
void main() {
uchar key_value = 0;
uchar mode = 0;
LCD_init();
while(1) {
DHT11_read_data();
display_data();
if (temperature > 28) {
fan_control(1);
heat_control(0);
BEEP_PIN = 1;
}
else if (temperature < 20) {
fan_control(0);
heat_control(1);
BEEP_PIN = 1;
}
else {
fan_control(0);
heat_control(0);
BEEP_PIN = 0;
}
if (humidity < 50) {
pump_control(1);
}
else {
pump_control(0);
}
if (KEY_PLUS == 0) {
delay_ms(10);
if (KEY_PLUS == 0) {
key_value = 1;
while (!KEY_PLUS);
}
}
else if (KEY_MINUS == 0) {
delay_ms(10);
if (KEY_MINUS == 0) {
key_value = 2;
while (!KEY_MINUS);
}
}
else if (KEY_OK == 0) {
delay_ms(10);
if (KEY_OK == 0) {
key_value = 3;
while (!KEY_OK);
}
}
else if (KEY_SWITCH == 0) {
delay_ms(10);
if (KEY_SWITCH == 0) {
key_value = 4;
while (!KEY_SWITCH);
}
}
if (key_value == 1) {
if (mode == 0) {
mode = 1;
}
else {
mode = 0;
}
key_value = 0;
}
else if (key_value == 2) {
if (mode == 1) {
if (temperature < 50) {
temperature++;
}
}
else if (mode == 2) {
if (humidity < 100) {
humidity++;
}
}
key_value = 0;
}
else if (key_value == 3) {
if (mode == 1) {
if (temperature > 0) {
temperature--;
}
}
else if (mode == 2) {
if (humidity > 0) {
humidity--;
}
}
key_value = 0;
}
else if (key_value == 4) {
if (mode == 0) {
mode = 1;
}
else if (mode == 1) {
mode = 2;
}
else if (mode == 2) {
mode = 0;
}
key_value = 0;
}
}
}
复制代码
温湿度报警系统.zip
2023-5-25 18:40 上传
点击文件名下载附件
111.92 KB, 下载次数: 6
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1