溫濕度傳感器程序(共11頁)_第1頁
溫濕度傳感器程序(共11頁)_第2頁
溫濕度傳感器程序(共11頁)_第3頁
溫濕度傳感器程序(共11頁)_第4頁
溫濕度傳感器程序(共11頁)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上/*基于盛群單片機開發(fā)的 獲得溫濕傳感器dht11和光敏電阻的數據 并且發(fā)送到1602顯示屏的程序*/#include <ht46r232.h>#pragma vector isr_4 0x4#pragma vector isr_8 0x8#pragma vector isr_c 0xc#pragma vector isr_ad 0x10 /ad中斷服務程序(r232地址是10)/ISR for safequardvoid isr_4() / external ISRvoid isr_8() / timer/event 0void isr_c() / ti

2、mer/event 1/initialize registers for safeguardvoid safeguard_init()_intc0=0;_intc1=0;_tmr0h=0;_tmr0l=0;_tmr0c=0;_tmr1h=0;_tmr1l=0;_tmr1c=0;_pac=0xff;_pbc =0xff; /input mode_pcc =0xff;typedef unsigned char u8;#define rs _pc2 /屏幕的控制rs#define ep _pc0 /屏幕的控制rs#define rw _pc1 /屏幕的控制rs#define dht _pb1#def

3、ine ko _pb2 /外部按鍵定義#define ky _pb3#define LED_DATA_CRL _pac /屏幕數據管腳的I/O控制#define DHT_DATA_CRL _pbc /dht數據管腳的I/O控制#define LED_DATA_DATA _pa /屏幕數據管腳的數據傳遞#define LED_CRL_CRL _pcc /屏幕控制管腳的I/O控制#define ad_start _26_7 /定義ad轉換的start位(r232的adcr寄存器地址是0x26h)void busycheck(void);void init(void);void cmd(unsign

4、ed char);void data(int);signed char U8FLAG,U8temp,U8comdata;int U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;/*中間數值,校對校驗碼后付給最終的結果*/int U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;/*實際數值*/int k; /外部按鍵常量unsigned int light; /光強的數字值int light_b; /百位int

5、light_s;/十位int light_g;/個位int count;void ADtrans() /ad轉換開始ad_start=0;ad_start=1;ad_start=0;/-屏幕部分-/*屏幕初始*void init()LED_DATA_CRL=0;LED_CRL_CRL=0;LED_DATA_DATA=0;_pc=0;_delay(5000);_delay(5000);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);busycheck();cmd

6、(0x08);busycheck();cmd(0x01);busycheck();cmd(0x06);busycheck();cmd(0x0c);busycheck();/*/*送指令函數*void cmd(u8 mingling) /busycheck(); rs= 0; rw = 0; ep = 0; LED_DATA_DATA=mingling;_delay(100); ep=1;_delay(100); ep=0;/*/*送數據*void data(int zimu)/busycheck();rw=0; rs = 1; rw = 0; ep = 0;LED_DATA_DATA= zim

7、u;_delay(100);ep = 1;_delay(100);ep = 0; /*/*busycheck*void busycheck(void)u8 val;doep=0;LED_DATA_CRL=0xff;rs=0;rw=1;ep=1;_delay(100);val=LED_DATA_DATA;_delay(100);ep=0; while(val&(u8)0x80);rw=0;LED_DATA_CRL=0;/* /*寫入地址*void pos(u8 x)cmd(x|0x80);/*/-dht21 部分-/*獲取8位二進制數*/*COM獲取一個8位二進制數*/ void COM

8、(void) u8 i; for(i=0;i<8;i+) U8FLAG=2; while(!dht)&&U8FLAG+); _delay(35); U8temp=0; if(dht)U8temp=1; U8FLAG=2; while(dht)&&U8FLAG+); /超時則跳出for循環(huán) if(U8FLAG=1)break; /判斷數據位是0還是1 / 如果高電平高過預定0高電平值則數據位為 1 U8comdata<<=1; U8comdata|=U8temp; /rof /*/*-*/*-溫濕度讀取子程序 -*/*-*/*-以下變量均為全局變

9、量-*/*-溫度高8位= U8T_data_H-*/*-溫度低8位= U8T_data_L-*/*-濕度高8位= U8RH_data_H-*/*-濕度低8位= U8RH_data_L-*/*-校驗 8位 = U8checkdata-*/void RH(void) int c=0; DHT_DATA_CRL=0; dht=0; _delay(20000); /主機拉低500us DHT_DATA_CRL=0xff; /主機設為輸入(電平由上拉電阻拉高) 在2040us后判斷從機響應信號 while(dht=1)&&(c+<100); /判斷從機是否有低電平響應信號 如不響應

10、則跳出,響應則向下運行 if(!dht) U8FLAG=2; while(!dht)&&U8FLAG+);/判斷從機是否發(fā)出 80us 的低電平響應信號是否結束 U8FLAG=2; while(dht)&&U8FLAG+); /判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數據接收狀態(tài) COM(); /數據接收狀態(tài) U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8c

11、omdata; COM(); U8checkdata_temp=U8comdata; /數據校驗 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) if(1) U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_t

12、emp; /*/-華麗的main函數分割線-void main() /*變量定義*u8 r='r'u8 h='h'u8 t='t'u8 c='c'u8 l='l'u8 z=':'u8 si='4'u8 wu='5'u8 liu='6'u8 ling='0'int rhdatas; /濕度數據十位int rhdatag; / 濕度數據個位int tdatas;int tdatag;int i=0;/*/*初始化*safeguard_ini

13、t();init();DHT_DATA_CRL=0xff; _acsr=0x01; /ad轉換8分頻_adcr=0x08; /設置通道 pb0 an0作為ad輸入ad_start=1; /設置分頻和通道ad_start=0;_emi=0; /關總中斷_adf=0; /清除ad中斷標志位_eadi=1; / 開ad中斷使能_emi=1; /開總中斷/*while(1) RH();ADtrans(); /ad轉換開始if(ko=0)k=1; /查詢鍵盤else if(ky=0)k=0;/*把獲得的數據轉換成屏幕可以顯示的數字(根據屏幕的編碼表)*rhdatas=U8RH_data_H/10;rhd

14、atag=U8RH_data_H%10;rhdatas=(rhdatas|0x30)&0x3f;rhdatag=(rhdatag|0x30)&0x3f;if(ko=0)k=1;/查詢鍵盤else if(ky=0)k=0;tdatas=U8T_data_H/10;tdatag=U8T_data_H%10;tdatas=(tdatas|0x30)&0x3f;tdatag=(tdatag|0x30)&0x3f;if(ko=0)k=1; /查詢鍵盤else if(ky=0)k=0;light_b=light/100;light_s=(light-light_b*100)

15、/10;light_g=light%10;light_b=(light_b|0x30)&0x3f;light_s=(light_s|0x30)&0x3f;light_g=(light_g|0x30)&0x3f;/*cmd(0x08); /先關顯示屏!_delay(60000);cmd(0x01); / 清屏! _delay(60000); _delay(60000); if(ko=0)k=1; /查詢鍵盤else if(ky=0)k=0;pos(0); /顯示溫度data(h);data(z);data(rhdatas);data(rhdatag);if(ko=0)k=

16、1; /查詢鍵盤else if(ky=0)k=0;pos(43); /顯示濕度data(t);data(z);data(tdatas);data(tdatag);if(ko=0)k=1; /查詢鍵盤else if(ky=0)k=0;pos(8);data(r); /顯示推薦數據data(c);data(z);if(tdatas='3') if (k=1) data(si);data(ling); else data(si);data(wu);if(U8T_data_H<30&&U8T_data_H>=25) if (k=1) data(si);dat

17、a(wu); else data(wu);data(ling);if (U8T_data_H<25) if (k=1) data(wu);data(wu); else data(liu);data(ling);pos(0x4a); /顯示當前光強data(l);data(z);data(light_b);data(light_s);data(light_g);pos(0x48);data(count);if(ko=0)k=1; /查詢鍵盤else if(ky=0)k=0;cmd(0xc); /開顯示屏!_delay(); if(ko=0)k=1; /查詢+延時else if(ky=0)k=0; _delay();if(ko=0)k=1;else if(ky=0)k=0;_delay();if(ko=0)k=1;else if(ky=0)k=0;_de

溫馨提示

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

評論

0/150

提交評論