單片機設計溫濕度傳感器的設計程序_第1頁
單片機設計溫濕度傳感器的設計程序_第2頁
單片機設計溫濕度傳感器的設計程序_第3頁
單片機設計溫濕度傳感器的設計程序_第4頁
單片機設計溫濕度傳感器的設計程序_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-作者xxxx-日期xxxx單片機設計溫濕度傳感器的設計程序【精品文檔】(GDAIB小遠制作)R #ifndef _REG51_H_#define _REG51_H_/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0

2、 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* BIT Register */* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbit TF0 = 0x

3、8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88;/* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8;/* IP */ sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8;/* P3 */sbit RD = 0xB7;sbit

4、 WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;#endifM#ifndef _MAIN_H_#define _MAIN_H_#include#define uc

5、har unsigned char#define uint unsigned intvoid delay1m(uint x);void RH_founction();/溫濕度讀取子程序void init_1602();/初始化1602函數(shù)void DHT11_display(uchar add,uchar shi,uchar ge);/溫濕度顯示函數(shù)void key_shidu();void key_wendu();void alarm_function();void w_string(uchar add, uchar *p);#endifM/溫濕度實時監(jiān)測顯示,超限報警,溫度測量范圍為0+5

6、0; 濕度測量范圍為20%90%;#includemain.hsbit s1=P14;/溫度sbit s2=P13;/濕度sbit s3=P12;/sbit s4=P11;/sbit s5=P10;/確定sbit alarm=P15;/蜂鳴器報警extern uchar TH,RH;/溫度整數(shù),濕度整數(shù)部分uchar code word116= My own design! ; uchar code word216=Tem= C Hum= %;/word24word25C word213word214%uchar code hehe16= Set Temperature!;/設置溫度上下限界面

7、uchar code haha16= Set Humidity! ;/設置濕度上下限界面uchar code word316=up= C down= C;uchar code word416=up= % down= %;uchar w_up=30;w_down=20;/溫度上下限uchar s_up=60;s_down=40;/濕度上下限void main()uint i; init_1602();delay1m(500);/延時等待1602穩(wěn)定RH_founction();while(1) key_wendu();/溫度上下限調整key_shidu();/濕度上下限調整i+;if(i2000

8、)/動態(tài)延時讀取溫濕度值i=0;RH_founction();/讀取溫濕度DHT11_display(0xc0+4,TH/10+0x30,TH%10+0x30); /顯示溫度 DHT11_display(0xc0+13,RH/10+0x30,RH%10+0x30); /顯示濕度if(THw_up)|(THs_up)|(RH4000)counter=0;/清零if(counter2000)DHT11_display(dzwei,0x20,0x20);/顯示空格if(counter1)wei=0;if(!s3)/加1while(!s3);bufwei+;if(bufwei50)bufwei=0;i

9、f(!s4)/減1while(!s4);bufwei-;if(bufwei=0xff)bufwei=50;if(buf04000)counter=0;/清零if(counter2000)DHT11_display(dzwei,0x20,0x20);/顯示空格if(counter1)wei=0;if(!s3)/加1while(!s3);bufwei+;if(bufwei90)bufwei=0;if(!s4)/減1while(!s4);bufwei-;if(bufwei20)bufwei=90; if(buf0=buf1)buf0=60;buf1=40;/如果濕度上限不大于下限,回到初始狀態(tài)whi

10、le(s5);/按下s5設置確定s_up=buf0;s_down=buf1;w_string(0x80,word1);w_string(0xc0,word2);/發(fā)送字符串到LCD第一行 /=ms級延時函數(shù)= void delay1m(uint x) uint k,j; for(k=0;kx;k+) /連數(shù)x次,約 x ms for(j=0;j120;j+); /數(shù)120 次,約1 ms#includemain.h#define shuju P0/數(shù)據(jù)腳sbit rs=P27;/數(shù)據(jù)命令選擇端sbit rw=P26;/讀寫選擇端sbit en=P25;/1602使能端sbit busy = P

11、07;/檢測為1,說明1602忙extern uchar code word116;extern uchar code word216;/=讀繁忙標記函數(shù)=void read_busy()shuju = 0xff;/準備讀數(shù)據(jù)dors = 0;/讀狀態(tài)rw = 1;/讀en = 0;en = 1;/使能1602數(shù)據(jù)讀出 while(busy);en = 0;/=寫命令函數(shù)=void write_cmd(uchar cmd)read_busy();rs = 0;/寫指令rw = 0;/寫shuju = cmd;en = 0;en = 1;en = 0; /=寫數(shù)據(jù)函數(shù)=void write_da

12、t(uchar dat)read_busy();rs = 1;/寫數(shù)據(jù)rw = 0;/寫shuju = dat;en = 0;en = 1;en = 0;/=1602初始化函數(shù)=void init_1602()write_cmd(0x38); / 16*2顯示,5*7點陣,8位數(shù)據(jù)接口 write_cmd(0x0c); / 顯示開、光標關、光標不允許閃爍 write_cmd(0x06); / 文字不動,光標自動右移 write_cmd(0x01); / 清屏w_string(0x80,word1);w_string(0xc0,word2);/=將溫濕度數(shù)據(jù)分成高低位在1602上顯示函數(shù)=voi

13、d DHT11_display(uchar ad,uchar shi,uchar ge) write_cmd(ad);write_dat(shi);write_dat(ge);/=調整數(shù)據(jù)的時候,1602顯示=void w_string(uchar add, uchar *p) /發(fā)送字符串到LCDuchar i;write_cmd(add);for(i=0;i0;j-) for(i=0;i27;i+);void Delay_10us(void) uchar i; i-;i-;i-; i-;i-;i-;void COM(void) uchar i; for(i=0;i8;i+) flag=2;

14、 while(!DQ)&flag+); Delay_10us(); Delay_10us(); Delay_10us(); temp=0; if(DQ)temp=1;/判斷數(shù)據(jù)位是0還是1 flag=2; while(DQ)&flag+); if(flag=1)break;/超時則跳出for循環(huán) /如果高電平高過預定0高電平值則數(shù)據(jù)位為 1 comdata=1; comdata|=temp; /-溫濕度讀取子程序 -void RH_founction() DQ=0; Delay(180);/主機拉低18ms DQ=1;/總線由上拉電阻拉高 主機延時20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); DQ=1;/主機設為輸入 判斷從機響應信號 if(!DQ)/判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行 flag=2; while(!DQ)&flag+);/判斷從機是否發(fā)出 80us 的低電平響應信號是否結束 flag=2;while(DQ)&flag+); /判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài) /數(shù)據(jù)接收狀態(tài) COM(); RH_temp=comdata; COM(); R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論