|
該智能家居基于51單片機(jī)控制, 同時(shí)外接DS1302和DS18B20以及LCD液晶屏等,對(duì)智能家居智進(jìn)行簡(jiǎn)易的控制。
該設(shè)計(jì)運(yùn)用到的芯片:STC89C58+DS18B20+DHT11+DS1302+LCD12864+紅外人體感應(yīng)器+無線遙控
功能:
1.數(shù)字可調(diào)萬年歷
2.顯示空氣中溫度和濕度
3.對(duì)環(huán)境溫度和濕度可以自動(dòng)控制
4.測(cè)量水的溫度
5.無線控制
6.防盜報(bào)警
7.低功耗模式
8.開機(jī)圖片
9.EEPROM數(shù)據(jù)保存
51hei.png (69.2 KB, 下載次數(shù): 49)
下載附件
2022-5-16 04:30 上傳
單片機(jī)源程序如下:
- /****************************************/
- /************DHT11驅(qū)動(dòng)程序***************/
- /****************************************/
- #include<reg52.h>
- #include<intrins.h>
- #include"DHT11.h"
- #include"delay_ms.h"
- unsigned int w_s;
- unsigned char sd_shi,sd_ge,wd_shi1,wd_ge1,dsq_0,sign_wd,sign_sd; //先要在這進(jìn)行聲明,然后在頭文件(DHT11.h)中用extern進(jìn)行外部變量聲明
- unsigned char set_up_sd,set_up_wd; //濕度報(bào)警和溫度報(bào)警閥值
- char shidu,wendu;
- void delay_us(unsigned int x) //DHT11專用延時(shí)
- {
- while(x--);
- }
- void init_DHT11() //初始化DHT11
- {
- unsigned char k=250;
- DHT=0;
- delay_us(2100); //延時(shí)18.925ms
- DHT=1;
- delay_us(2); //延時(shí)34us,等待DHT11響應(yīng),變低電平
- while((DHT==0)&&k--); //判斷DHT11是否響應(yīng),且要防止掉入死循環(huán),先是低電平然后,等待DHT11變高電平
- k=250;
- while((DHT==1)&&k--); //判斷DHT11是否開始傳輸數(shù)據(jù)(再次進(jìn)入低電平表示開始傳輸數(shù)據(jù))
- }
- unsigned char Read_OneChar() //從DHT11讀出一個(gè)字節(jié)數(shù)據(jù)
- {
- unsigned char g;
- unsigned char temp;
- for(g=0;g<8;g++)
- {
- temp=temp<<1; //從高字節(jié)開始讀起,每讀一位向左移一位
- while(!DHT); //判斷是否DHT11信號(hào)是否變高電平(這步非常非常關(guān)鍵)
- delay_us(3); //變高后延時(shí)44us左右,這樣如果是“1”則還是高電平,“0”就是低電平了
- if(DHT==1) //進(jìn)行“1”和“0”的判斷
- {
- temp=temp|0x01;
- delay_us(1);
- }
- }
- return(temp);
- }
- unsigned int return_wendu_shidu() //讀取溫度濕度
- {
- unsigned char sd_h,sd_l,wd_h,wd_l,crc;
- unsigned int sd_wd;
- init_DHT11(); //初始化DHT11
- sd_h=Read_OneChar(); //濕度高8位
- sd_l=Read_OneChar(); //濕度低8位
- wd_h=Read_OneChar(); //溫度高8位
- wd_l=Read_OneChar(); //溫度低8位
- crc=Read_OneChar(); //CRC校驗(yàn)8位
- sign_sd=sd_h; //報(bào)警濕度
- sign_wd=wd_h; //報(bào)警溫度
- sd_wd=0x00ff&sd_h;
- sd_wd=sd_wd<<8;
- sd_wd=sd_wd|wd_h; //高8位為濕度整數(shù)部分,低8位為溫度整數(shù)部分
- return(sd_wd);
- }
- void qushu_DHT11(unsigned int qs) //取數(shù)將數(shù)據(jù)分離
- {
- unsigned char sd_H,wd_H; //因?yàn)檫M(jìn)來的數(shù)據(jù)是int型,高八位為濕度,低八位為溫度
- wd_H=0x00ff&qs; //所以要將數(shù)據(jù)分離開來,再次分成char型,然后再進(jìn)行取數(shù)
- qs=qs>>8; //取濕度數(shù)據(jù)
- sd_H=qs; //直接將int型給char型,會(huì)自動(dòng)保留低八位
- sd_shi=sd_H/10; //關(guān)于為什么要這樣,因?yàn)檫@樣可以不用設(shè)置全局變量
- sd_ge=sd_H%10; //沒有全局變量就容易將程序模塊化�。�!
- wd_shi1=wd_H/10;
- wd_ge1=wd_H%10;
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
01.7z
(298.08 KB, 下載次數(shù): 27)
2022-5-16 04:34 上傳
點(diǎn)擊文件名下載附件
|
|