編號:71
基于51單片機的的雞籠補光和恒溫系統的設計與實現
功能描述:
? ? ? ?本設計由89C52單片機+液晶12864顯示模塊+聲光報警電路+溫濕度傳感器電路+風扇電路+LED照明電路+光照檢測電路+GSM電路+DS1302時鐘電路
1.實現的功能
(1)采用DHT11溫濕傳感器、光敏電阻捕捉空氣中的濕度,溫度以及光照強度,把這些信息通過AT89C52在12864顯示溫度,濕度,光照強度并且顯示指導老師的姓名,當前日期,
(2)如果外接環境發生變化,比如光照太強(弱),濕度太潮(干),溫度過熱(低),則蜂鳴器開始報警,12864顯示當前溫度并顯示已發送報警消息;
并且通過GSM給手機發短信報警,短信顯示當前的溫濕度,光照強度;
發短信的同時并自動采取補救實施,比如溫度太高~散熱器轉動,溫度太低~小燈泡光照強度加強,光照強度太低~小燈泡的強度加強,
(蜂鳴器報警,顯示屏顯示當前參數,發短信報警,實施措施是幾乎同時完成的)
(3)如果系統能自動的消除這些問題,也一切恢復正常,并且給手機發短信,當前的參數以及恢復正常字樣
視頻演示鏈接:
71、基于51單片機的的雞籠補光和恒溫系統的設計與實現
仿真圖:
實物圖:
電路圖:
程序源碼:
/**********************************************************************************************/
#include "reg52.h"
#include "intrins.h"
#include "delay.h"
#include "lcd12864.h"
#include "adc0832.h"
#include "ds1302.h"
#include "PWM.h"
#include "uart.h"
#include "shtxx.h"sbit BEEP = P1^1; //蜂鳴器
sbit FAN = P2^0; //風扇
sbit Deng = P1^3; //燈泡sbit JD = P1^2; //繼電器sfr T2MOD = 0xc9; //timer2 mode registervoid Timer2Init(void) //50毫秒@11.0592MHz 用來報警
{T2MOD = 0; //初始化模式寄存器T2CON = 0; //初始化控制寄存器TL2 = 0x00; //設置定時初值TH2 = 0x4C; //設置定時初值RCAP2L = 0x00; //設置定時重載值RCAP2H = 0x4C; //設置定時重載值TR2 = 1; //定時器2開始計時ET2 = 0; //使能T2中斷
}void main(void)
{value humi_val,temp_val; //定義兩個共同體,一個用于濕度,一個用于溫度unsigned char error; //用于檢驗是否出現錯誤unsigned char checksum; //CRC unsigned int temp,humi;bit d_flag=1;xdata unsigned char dat[100];unsigned char res = 1;bit flag = 0; //DHT11 讀取標志unsigned char light;DS1302_Init(); //DS1302初始化
// DS1302_Set_Time(0x80,&Byte,7); //設置初始時間函數DisplayOn();clear();Disp_Init();delay_ms(200);clear();EA = 1;Timer0Init(); //定時器PWM初始化Timer2Init();Uart_Init(); //串口初始化PWM_Set(0);JD = 1;Deng = 1;DIS_top();s_connectionreset(); //啟動連接復位PWM_Set(4);while(1){error=0; //初始化error=0,即沒有錯誤error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //溫度測量error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //濕度測量if(error!=0) s_connectionreset(); //如果發生錯誤,系統復位else{ humi_val.f=(float)humi_val.i; //轉換為浮點數temp_val.f=(float)temp_val.i; //轉換為浮點數calc_sth10(&humi_val.f,&temp_val.f); //修正相對濕度及溫度temp=temp_val.f*10;humi=humi_val.f*10-40; //補償 } light=ADC0832(1,0)*100/255;DS1302_Get_Time(0x81,time_buf,7); //讀取時間
// DS1302_Time(); //格式化輸出日期時間信息dis_time(temp/10,humi/10,light);if((temp/10)>30){ FAN = 0;}elseFAN = 1;if((temp/10)>30||(humi/10)>80||light>80||(temp/10)<15||(humi/10)<20||light<20) //溫濕度光照超標{ET2 = 1; }else {BEEP = 1;ET2 = 0;}/********************這里只負責措施動作*************///風扇動作 溫度超標 或者濕度太高 開啟風扇if((temp/10)>30||(humi/10)>80) //溫度或者濕度 太高{FAN = 0; //溫度或者濕度 太高 開風扇}else{FAN =1; //關風扇}//燈泡動作 溫度太低 燈泡打開if((temp/10)<15){Deng = 0;}else{Deng = 1;}//繼電器動作 if((humi/10)<20) //濕度過低{JD = 0;}else{JD = 1;}//led燈光if(light>80) //光照過高{PWM_Set(1);}else if(light<20){PWM_Set(4);}else{PWM_Set(2);}}
}
void tm2_isr() interrupt 5 using 1
{static unsigned char n = 0;TF2 = 0;TL2 = 0x00; //設置定時初值TH2 = 0x4C; //設置定時初值RCAP2L = 0x00; //設置定時重載值RCAP2H = 0x4C; //設置定時重載值n++;if(n>5){n = 0;BEEP =~BEEP;}
}
軟件免費下載地址:
1、Proteus仿真軟件
文件內容:Proteus7.8安裝包、Proteus8.6安裝包、Proteus.8.10安裝包、Proteus Professional 8.11 SP0安裝包
鏈接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w?
提取碼:2756
2、KEIL4 C51軟件安裝包
鏈接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA?
提取碼:sy2a?
文件下載:
鏈接: https://pan.baidu.com/s/1dc3p6yAPAmNC-qTrbB3GJA?pwd=1234 提取碼: 1234