本文主要介绍了怎么使用51单片机最小系统板和温湿度传感器制作一个温湿度检测系统。

  本次设计主要涉及了温湿度的测量、显示以及实现简单控制。硬件方面有五个模块,即STC89C52单片机主控模块、传感器模块、LCD1602液晶显示模块、继电器模块以及阈值设置模块。整体框架如下图所示。

  

  传感器模块使用的是DHT11数字温湿度传感器。通过DHT11检测出当前环境下的温湿度,将所测数据交给AT单片机进行分析和处理,并分别存入不同数组以便显示时候用。其中,为了显示稳定,本系统每间隔2s采集一次数据送入单片机。

  本系统采用的是继电器驱动负载,因此无论温度还是湿度超出范围继电器均可以驱动负载工作,及时启用降温风扇以及抽湿风扇来有效的调整粮仓等应用场所内的温湿度。

  硬件设计

  该系统主要由五个大的模块构成,分别是主控模块、传感器模块、LCD液晶显示模块、继电器模块以及阈值设置模块。其中主控模块是此次毕业设计的核心模块,主要是指STC89C52芯片,它控制整个系统的运行,利用其各个口分别控制其他模块,使其他模块能够成为一个整体,实现功能的需要,从DHT11温湿度传感器中读入温度和湿度,在液晶屏上即时显示。液晶屏上同时显示温湿度上限值,该上限值保存外外部EEPROM存储器中,掉电不失,并且可以通过四只按键上调或下调。当温度或湿度值超过上限值时,报警信号点亮相应报警灯。该报警信号可以通过三极管驱动继电器,以控制外部风机或制冷器。

  软件设计

  软件流程图如下所示。

  系统总体电路图如下所示:

  主函数代码如下:(如果有需要在后面的网盘链接中下载完整程序)

  1 #include <reg52.h>
  2 #include "1602.h"
  3 #include "dht.h"
  4 #include "2402.h"
  5
  6 //¶¨ÒåÈý¸öLEDµÆ
  7 sbit Led_qushi=P1^6;        //ȥʪµÆ
  8 sbit Led_jiangwen=P1^5;        //½µÎµÆ
  9 sbit Led_shengwen=P1^4;        //ÉýεÆ
 10 sbit Key_TH1 = P3^2;
 11 sbit Key_TH2 = P3^3;
 12 sbit Key_HH1 = P3^4;
 13 sbit Key_HH2 = P3^5;
 14
 15 //¶¨Òå±êʶ
 16 volatile bit FlagStartRH = 0;  //¿ªÊ¼ÎÂʪ¶Èת»»±êÖ¾
 17 volatile bit FlagKeyPress = 0; //Óмü°´ÏÂ
 18
 19
 20 //¶¨ÒåÎÂʪ¶È´«¸ÐÆ÷ÓÃÍⲿ±äÁ¿
 21 extern U8  U8FLAG,k;
 22 extern U8  U8count,U8temp;
 23 extern U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
 24 extern U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
 25 extern U8  U8comdata;
 26 extern U8  count, count_r;
 27
 28 U16 temp;
 29 S16 temperature, humidity;
 30 S16 idata TH, HH;  //ζÈÉÏÏÞºÍʪ¶ÈÉÏÏÞ
 31 char * pSave;
 32 U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2;
 33
 34 //¶¨Òå±äÁ¿
 35 U16 RHCounter;
 36
 37
 38 //Êý¾Ý³õʼ»¯
 39 void Data_Init()
 40 {
 41    RHCounter = 0;
 42    Led_qushi = 1;
 43    Led_jiangwen = 1;
 44    Led_shengwen = 1;
 45    TH = 40;
 46    HH = 85;
 47    keyvalue = 0;
 48    keyTH1 = 1;
 49    keyTH2 = 1;
 50    keyHH1 = 1;
 51    keyHH2 = 1;
 52
 53 }
 54
 55 //¶¨Ê±Æ÷0³õʼ»¯
 56 void Timer0_Init()
 57 {
 58     ET0 = 1;        //ÔÊÐí¶¨Ê±Æ÷0ÖжÏ
 59     TMOD = 1;       //¶¨Ê±Æ÷¹¤×÷·½Ê½Ñ¡Ôñ
 60     TL0 = 0x06;
 61     TH0 = 0xf8;     //¶¨Ê±Æ÷¸³Óè³õÖµ
 62     TR0 = 1;        //Æô¶¯¶¨Ê±Æ÷
 63 }
 64
 65 //¶¨Ê±Æ÷0ÖжÏ
 66 void Timer0_ISR (void) interrupt 1 using 0
 67 {
 68     TL0 = 0x06;
 69     TH0 = 0xf8;     //¶¨Ê±Æ÷¸³Óè³õÖµ
 70
 71     //ÿ2ÃëÖÓÆô¶¯Ò»´ÎÎÂʪ¶Èת»»
 72     RHCounter ++;
 73     if (RHCounter >= 1000)
 74     {
 75        FlagStartRH = 1;
 76        RHCounter = 0;
 77     }
 78 }
 79
 80 //´æÈëÉ趨ֵ¡¢
 81 void Save_Setting()
 82 {
 83    pSave =  (char *)&TH;      //µØÖ·µÍλ¶ÔÓ¦µÍ8룬¸ßλ¶ÔÓ¦¸ß8λ
 84    wrteeprom(0, *pSave);      //´æζÈÉÏÏÞÖµTHµÍ8λ
 85    DELAY(500);
 86    pSave ++;
 87    wrteeprom(1, *pSave);      //´æζÈÉÏÏÞÖµTH¸ß8λ
 88    DELAY(500);
 89    pSave =  (char *)&HH;
 90    wrteeprom(2, *pSave);      //´æʪ¶ÈÉÏÏÞÖµRHµÍ8λ
 91    DELAY(500);
 92    pSave ++;
 93    wrteeprom(3, *pSave);      //´æʪ¶ÈÉÏÏÞÖµRH¸ß8λ
 94    DELAY(500);
 95 }
 96
 97 //ÔØÈëÉ趨ֵ¡¢
 98 void Load_Setting()
 99 {
100    pSave =  (char *)&TH;
101    *pSave++ = rdeeprom(0);
102    *pSave = rdeeprom(1);
103    pSave = (char *)&HH;
104    *pSave++ = rdeeprom(2);
105    *pSave = rdeeprom(3);
106    if ((TH>99)||(TH<0)) TH = 40;
107    if ((HH>99)||(HH<0)) HH = 85;
108 }
109
110 void KeyProcess(uint num)
111 {
112    switch (num)
113    {
114       case 1:
115          if (TH<99) TH++;
116          L1602_char(1, 15, TH/10+48);
117          L1602_char(1, 16, TH%10+48);
118          break;
119       case 2:
120          if (TH>1) TH--;
121          L1602_char(1, 15, TH/10+48);
122          L1602_char(1, 16, TH%10+48);
123          break;
124       case 3:
125          if (HH<99) HH++;
126          L1602_char(2, 15, HH/10+48);
127          L1602_char(2, 16, HH%10+48);
128          break;
129       case 4:
130          if (HH>1) HH--;
131          L1602_char(2, 15, HH/10+48);
132          L1602_char(2, 16, HH%10+48);
133          break;
134       default:
135          break;
136    }
137    Save_Setting();
138 }
139
140 /********************************************************************
141 * Ãû³Æ : Main()
142 * ¹¦ÄÜ : Ö÷º¯Êý
143 ***********************************************************************/
144 void main()
145 {
146     U16 i, j, testnum;
147
148     EA = 0;
149
150     Timer0_Init();  //¶¨Ê±Æ÷0³õʼ»¯
151
152     Data_Init();
153     EA = 1;
154
155     L1602_init();
156     L1602_string(1,1," Welcome to T&H   ");
157     L1602_string(2,1," Control System!  ");
158     //ÑÓʱ
159     for (i=0;i<500;i++)
160        for (j=0;j<1000;j++)
161        {;}
162     //ÇåÆÁ
163     L1602_string(1,1,"                ");
164     L1602_string(2,1,"                ");
165     L1602_string(1,1,"Tem:    C  TH:");
166     L1602_string(2,1,"Hum:    %  HH:");
167
168     //ÔØÈëζÈÉÏÏÞºÍʪ¶ÈÉÏÏÞÉ趨ֵ
169     Load_Setting();
170     L1602_char(1, 15, TH/10+48);
171     L1602_char(1, 16, TH%10+48);
172     L1602_char(2, 15, HH/10+48);
173     L1602_char(2, 16, HH%10+48);
174
175
176     while(1)
177     {
178        //ÎÂʪ¶Èת»»±êÖ¾¼ì²é
179          if (FlagStartRH == 1)
180          {
181              TR0 = 0;
182              testnum = RH();
183               FlagStartRH = 0;
184              TR0 = 1;
185              //¶Á³öÎÂʪ¶È£¬Ö»È¡ÕûÊý²¿·Ö
186              humidity = U8RH_data_H;
187              temperature = U8T_data_H;
188               //ÏÔʾÎÂʪ¶È
189              L1602_int(1,5,temperature);
190              L1602_int(2,5,humidity);
191         }
192         //ÎÂʪ¶È¿ØÖÆ
193         if (temperature > TH) Led_jiangwen = 0;
194         else Led_jiangwen = 1;                    //½µÎÂ
195         if (humidity > HH) Led_qushi = 0;
196         else Led_qushi = 1;                        //ȥʪ
197
198         //¼üÅ̲éѯ£¬ÔÚµ¯ÆðʱÏìÓ¦
199         if ((Key_TH1)&&(keyTH1==0)) {FlagKeyPress = 1; keyvalue = 1;}
200         else if ((Key_TH2)&&(keyTH2==0)) {FlagKeyPress = 1; keyvalue = 2;}
201         else if ((Key_HH1)&&(keyHH1==0)) {FlagKeyPress = 1; keyvalue = 3;}
202         else if ((Key_HH2)&&(keyHH2==0)) {FlagKeyPress = 1; keyvalue = 4;}
203         if (FlagKeyPress == 1)
204         {
205            KeyProcess(keyvalue);
206            FlagKeyPress = 0;
207         }
208         if (!Key_TH1) keyTH1 = 0;
209         else keyTH1 = 1;
210         if (!Key_TH2) keyTH2 = 0;
211         else keyTH2 = 1;
212         if (!Key_HH1) keyHH1 = 0;
213         else keyHH1 = 1;
214         if (!Key_HH2) keyHH2 = 0;
215         else keyHH2 = 1;
216     }
217 }

View Code

  最有如果有小伙伴需要的话,可以在网盘链接中下载,提取码yu30。

转载于:https://www.cnblogs.com/wenzhixin/p/10798748.html

单片机课程设计——基于51单片机温湿度检测系统的设计与实现相关推荐

  1. 单片机数字定时闹钟设计c语言,电子设计 基于51单片机的定时闹钟设计.doc

    电子设计 基于51单片机的定时闹钟设计 课件之家精心整理资料--欢迎你的欣赏 课件之家精心整理资料--欢迎你的欣赏 摘 要 单片计体积小.能耗低.成本低.功能强,广泛应用于智能产品和工业自动化上.本次 ...

  2. 51单片机五层电梯控制器 基于51单片机的五层电梯控制系统

    51单片机五层电梯控制器 基于51单片机的五层电梯控制系统 包括源代码和proteus仿真 系统硬件由51单片机最小系统.蜂鸣器电路.指示灯电路.内部按键电路.外部按键电路.直流电机.内部显示电路.外 ...

  3. 基于电容传感器的压力检测系统的设计

    基于电容传感器的压力检测系统的设计 本系统以电容式传感器为压力感应元件,将压力信号转换为相应的电信号,经ADC0809模数转化芯片将电信号转化为数学信号再经单片机在输出端显示电感式传感器所受到的压力值 ...

  4. 实物设计|基于51单片机的温湿度检测报警系统

    目录 具体实现功能: 设计介绍 51单片机简介 设计方案 资料内容 原理图和PCB(AD19) 仿真实现(protues8.7) 程序(Keil5) 全部资料(压缩文件) 具体实现功能: 由STC89 ...

  5. 基于51单片机的光照强度检测c语言程序,智能仪器课程设计-基于51单片机的光照强度检测报告.doc...

    该设计论文已经通过各大高校老师审核认可并通过答辩,.欢迎大家下载学习交流.如有疑问可随时联系店主,竭诚为您解答!! 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 ...

  6. 单片机四路抢答器课程C语言设计,基于51单片机四路抢答器设计

    内容简介: 毕业设计 基于51单片机四路抢答器设计 共25页,9905字 随着经济水平的不断提高,人们在物质文明得到满足的同时更注重精神文明的追求,各种娱乐节目不断涌现,提高节目的质量尤为重要..本次 ...

  7. 51单片机八位抢答器c语言设计,基于51单片机八路抢答器的设计

    基于51单片机八路抢答器的设计 毕业设计(论文)题 目:基于 51 单片机八路抢答器的设计 系 部: 专 业: 学 号: 学生姓名: 指导教师姓名: 指导教师职称: 2013 年 xx 月 xx 日X ...

  8. 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc

    基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...

  9. 51单片机计算器_基于51单片机的倒计时温度检测报警器

    基于51单片机的倒计时温度检测报警器 学习单片机断断续续半年了,在学长学姐的教学帮助下,完成了51单片机的入门学习,开始实践做项目,在一周时间内设计和制作出个人项目.起初,我设计和选择的是12864显 ...

最新文章

  1. 数据结构树的基本操作_《数据结构》树的基本操作.doc
  2. 初学者学python好还是c-入门是不是应该选择C而不是直接学Python?
  3. 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
  4. 安装 | MatlabR2021bMac链接及Matlabx运行图基本运行代码与图像
  5. 读书笔记2014年第1本:《赤裸裸的统计学》
  6. LA 2402 (枚举) Fishnet
  7. 整合百度UEditor上传图片到阿里云OSS
  8. Unix 下的 vim 如何使用系统剪贴板
  9. Windows监听进程的两个函数
  10. 一元三次方程重根判别式_一元四次方程的常规解法
  11. 搜集70个国外搜索引擎网站,供大家学习参考
  12. 设置android模拟器屏幕自动旋转
  13. 关于 SQL Server Reporting Services 匿名登录的解决方案
  14. C++刷题知识点总结2
  15. JS生成随机颜色(rgb)
  16. 关于网易云验证码的服务介绍
  17. 企业数字化转型思考系列文章(一)何为数字化转型?
  18. 《Google软件工程》读书笔记
  19. BTree和B+Tree区别
  20. css:图片显示太大怎么办?

热门文章

  1. 提升线下实体店铺购物体验
  2. Nginx+Tomcat 搭建负载均衡、动静分离(tomcat多实例)
  3. Redis Desktop Manager 黑屏
  4. 从键盘任意输入一个年号,判断它是否是闰年。
  5. Apache Avro项目简介
  6. 如何利用华硕Mesh系统路由器在780平方公尺大的场域架设可靠的WiFi系统?
  7. 如何更好地进行销售预测
  8. python中bd是什么属性_聊一聊:Python中对象的属性
  9. 以标记清除的方式垃圾回收
  10. SpringMVC+Mybatis+Maven搭建 简单配置双数据源