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

Posted wenzhixin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机课程设计——基于51单片机温湿度检测系统的设计与实现相关的知识,希望对你有一定的参考价值。

  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 }

 

以上是关于单片机课程设计——基于51单片机温湿度检测系统的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于单片机SHT11温湿度采集报警系统设计-全套资料

基于单片机的蓝牙控制窗帘电路系统

51单片机课程设计:基于MQ-3的酒精浓度报警器

基于单片机温湿度智能农田自动灌溉系统设计

基于单片机GSM大棚环境智能监控系统基于单片机的警示灯爆闪灯设计基于单片机太阳能手机智能充电器设计基于单片机智能无线病床呼叫系统设计-设计资料转发分享