找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 479|回复: 1
打印 上一主题 下一主题
收起左侧

Proteus模拟仿真蔬菜大棚系统设计 可以帮忙看看哪里有问题吗?

[复制链接]
跳转到指定楼层
楼主
ID:1079640 发表于 2023-5-25 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Proteus模拟仿真蔬菜大棚系统设计
一、功能
1. 设计一个蔬菜大棚系统电路,此电路能够检测大棚内温度和湿度两种数据。
2. 为了蔬菜的更好生长,要求对大棚内温度和湿度进行控制,温度高了,采用电机散热,温度低了采用继电器控制加热丝加热;湿度低了,采用继电器控制电磁阀放水。
3. 当大棚内温度和湿度参数超出上下界限时,会进行声光报警。
4. 数码管实时显示大棚内当前温度和湿度值。
5. 该系统有四个按键分别控制温湿度切换,加,减和确定。
二、要求
1.采用Proteus软件模拟仿真实现系统设计
2.能检测温度和湿度两种数据,并实时数码管显示。
3.有相对应的温度和湿度控制操作。

可以帮忙看看哪里有问题吗?
  1. #include <REG51.H>//头文件
  2. #include <stdio.h>
  3. #include <intrins.h>

  4. #define uchar unsigned char//定义uchar为无符号字符型
  5. #define uint unsigned int//定义uint为无符号整型

  6. #define DHT11_PIN P2_3//温湿度检测模块数据引脚
  7. #define BEEP_PIN P2_4//蜂鸣器引脚
  8. #define LED_PIN P3_0//LED灯引脚
  9. #define FAN_PIN P3_2//风扇控制引脚
  10. #define PUMP_PIN P3_3//水泵控制引脚
  11. #define HEAT_PIN P3_4//加热指示引脚
  12. #define LCD_DATA P0//液晶显示屏DATA引脚
  13. #define LCD_RS P2_5//液晶显示屏RS引脚
  14. #define LCD_RW P2_6//液晶显示屏RW引脚
  15. #define LCD_E P2_7//液晶显示屏E引脚
  16. #define KEY_PLUS P1_4//加键引脚
  17. #define KEY_MINUS P1_5//减键引脚
  18. #define KEY_OK P1_6//确定键引脚
  19. #define KEY_SWITCH P1_7//温湿度切换键引脚

  20. sbit DHT11_PIN = P2^3;
  21. sbit BEEP_PIN = P2^4;
  22. sbit LED_PIN = P3^0;
  23. sbit FAN_PIN = P3^2;
  24. sbit PUMP_PIN = P3^3;
  25. sbit HEAT_PIN = P3^4;
  26. sbit LCD_RS = P2^5;
  27. sbit LCD_RW = P2^6;
  28. sbit LCD_E = P2^7;
  29. sbit KEY_PLUS = P1^4;
  30. sbit KEY_MINUS = P1^5;
  31. sbit KEY_OK = P1^6;
  32. sbit KEY_SWITCH = P1^7;

  33. unsigned char table[] ="Temperature: 00C Humidity: 00%";//液晶显示屏显示格式
  34. unsigned char temperature, humidity;
  35. //延时ms函数
  36. void delay_ms(uint ms) {
  37.    uint i, j;
  38.    for (i = ms; i > 0; i--)
  39.        for (j = 114; j > 0; j--);
  40. }
  41. //延时us函数
  42. void delay_us(uint us) {
  43.    while (us--);
  44. }

  45. void LCD_write_cmd(uchar cmd) {
  46.    LCD_RS = 0;
  47.    LCD_RW = 0;
  48.    LCD_DATA = cmd;
  49.    LCD_E = 1;
  50.    _nop_();
  51.    _nop_();
  52.    LCD_E = 0;
  53. }

  54. void LCD_write_data(uchar dat) {
  55.    LCD_RS = 1;
  56.    LCD_RW = 0;
  57.    LCD_DATA = dat;
  58.    LCD_E = 1;
  59.    _nop_();
  60.    _nop_();
  61.    LCD_E = 0;
  62. }

  63. void LCD_init() {
  64.    LCD_write_cmd(0x38);
  65.     delay_ms(5);
  66.    LCD_write_cmd(0x38);
  67.    delay_ms(1);
  68.    LCD_write_cmd(0x38);
  69.    delay_ms(1);
  70.    LCD_write_cmd(0x38);
  71.    delay_ms(1);
  72.    LCD_write_cmd(0x08);
  73.    delay_ms(1);
  74.    LCD_write_cmd(0x01);
  75.    delay_ms(1);
  76.    LCD_write_cmd(0x06);
  77.     delay_ms(1);
  78.    LCD_write_cmd(0x0c);
  79.    delay_ms(1);
  80. }

  81. void DHT11_start() {
  82.    DHT11_PIN = 0;
  83.    delay_ms(18);
  84.    DHT11_PIN = 1;
  85.    delay_us(30);
  86. }

  87. uchar DHT11_response() {
  88.    uchar i;
  89.    for (i = 0; i < 9; i++) {
  90.        if (!DHT11_PIN) {
  91.            while (!DHT11_PIN);
  92.            return 0;
  93.        }
  94.     }
  95.     if(DHT11_PIN) {
  96.        while (DHT11_PIN);
  97.        return 1;
  98.     }
  99.    return 0;
  100. }

  101. uchar DHT11_read_byte() {
  102.    uchar i, dat = 0;
  103.    for (i = 0; i < 8; i++) {
  104.        while (!DHT11_PIN);
  105.        delay_us(30);
  106.        if (DHT11_PIN)
  107.            dat |= (1 << (7 - i));
  108.        while (DHT11_PIN);
  109.     }
  110.    return dat;
  111. }

  112. void DHT11_read_data() {
  113.    uchar check_sum;
  114.    DHT11_start();
  115.    if (DHT11_response()) {
  116.        humidity = DHT11_read_byte();
  117.        humidity = DHT11_read_byte();
  118.        temperature = DHT11_read_byte();
  119.        temperature = DHT11_read_byte();
  120.        check_sum = DHT11_read_byte();
  121.        if (check_sum == (humidity + temperature))
  122.            LED_PIN = 0;
  123.        else
  124.            LED_PIN = 1;
  125.     }
  126.    else {
  127.        LED_PIN = 1;
  128.     }
  129. }

  130. void display_data() {
  131.    uchar i;
  132.    uchar temp = temperature;
  133.    uchar humi = humidity;
  134.    table[13] = temp / 10 + '0';
  135.    table[14] = temp % 10 + '0';
  136.    table[28] = humi / 10 + '0';
  137.    table[29] = humi % 10 + '0';
  138.    for (i = 0; i < 32; i++)
  139.        LCD_write_data(table[i ]);
  140. }

  141. void fan_control(uchar flag) {
  142.    if (flag) {
  143.        FAN_PIN = 1;
  144.        HEAT_PIN = 0;
  145.     }
  146.    else {
  147.        FAN_PIN = 0;
  148.     }
  149. }

  150. void pump_control(uchar flag) {
  151.    if (flag) {
  152.        PUMP_PIN = 1;
  153.     }
  154.     else{
  155.        PUMP_PIN = 0;
  156.     }
  157. }

  158. void heat_control(uchar flag) {
  159.    if (flag) {
  160.        HEAT_PIN = 1;
  161.        FAN_PIN = 0;
  162.     }
  163.    else {
  164.        HEAT_PIN = 0;
  165.     }
  166. }

  167. void main() {
  168.    uchar key_value = 0;
  169.    uchar mode = 0;
  170.    LCD_init();
  171.     while(1) {
  172.        DHT11_read_data();
  173.        display_data();
  174.        if (temperature > 28) {
  175.            fan_control(1);
  176.            heat_control(0);
  177.            BEEP_PIN = 1;
  178.        }
  179.        else if (temperature < 20) {
  180.            fan_control(0);
  181.             heat_control(1);
  182.            BEEP_PIN = 1;
  183.        }
  184.        else {
  185.            fan_control(0);
  186.            heat_control(0);
  187.            BEEP_PIN = 0;
  188.        }
  189.        if (humidity < 50) {
  190.            pump_control(1);
  191.        }
  192.        else {
  193.             pump_control(0);
  194.        }
  195.        if (KEY_PLUS == 0) {
  196.            delay_ms(10);
  197.            if (KEY_PLUS == 0) {
  198.                 key_value = 1;
  199.                 while (!KEY_PLUS);
  200.            }
  201.        }
  202.        else if (KEY_MINUS == 0) {
  203.            delay_ms(10);
  204.            if (KEY_MINUS == 0) {
  205.                 key_value = 2;
  206.                 while (!KEY_MINUS);
  207.            }
  208.        }
  209.        else if (KEY_OK == 0) {
  210.            delay_ms(10);
  211.            if (KEY_OK == 0) {
  212.                 key_value = 3;
  213.                 while (!KEY_OK);
  214.            }
  215.        }
  216.        else if (KEY_SWITCH == 0) {
  217.            delay_ms(10);
  218.            if (KEY_SWITCH == 0) {
  219.                 key_value = 4;
  220.                 while (!KEY_SWITCH);
  221.            }
  222.        }
  223.        if (key_value == 1) {
  224.            if (mode == 0) {
  225.                 mode = 1;
  226.            }
  227.            else {
  228.                 mode = 0;
  229.            }
  230.            key_value = 0;
  231.         }
  232.        else if (key_value == 2) {
  233.            if (mode == 1) {
  234.                 if (temperature < 50) {
  235.                     temperature++;
  236.                 }
  237.            }
  238.            else if (mode == 2) {
  239.                 if (humidity < 100) {
  240.                    humidity++;
  241.                 }
  242.            }
  243.            key_value = 0;
  244.        }
  245.        else if (key_value == 3) {
  246.            if (mode == 1) {
  247.                 if (temperature > 0) {
  248.                     temperature--;
  249.                 }
  250.            }
  251.            else if (mode == 2) {
  252.                 if (humidity > 0) {
  253.                     humidity--;
  254.                 }
  255.            }
  256.            key_value = 0;
  257.        }
  258.        else if (key_value == 4) {
  259.            if (mode == 0) {
  260.                 mode = 1;
  261.            }
  262.            else if (mode == 1) {
  263.                mode = 2;
  264.            }
  265.            else if (mode == 2) {
  266.                 mode = 0;
  267.            }
  268.            key_value = 0;
  269.        }
  270.     }
  271. }
复制代码


温湿度报警系统.zip

111.92 KB, 下载次数: 6

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2023-5-26 16:22 | 只看该作者
此帖仅作者可见

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表