基于51單片機(jī)SHT11溫濕度傳感器檢測程序

上傳人:jun****875 文檔編號:17807027 上傳時(shí)間:2020-12-07 格式:DOC 頁數(shù):10 大?。?65.41KB
收藏 版權(quán)申訴 舉報(bào) 下載
基于51單片機(jī)SHT11溫濕度傳感器檢測程序_第1頁
第1頁 / 共10頁
基于51單片機(jī)SHT11溫濕度傳感器檢測程序_第2頁
第2頁 / 共10頁
基于51單片機(jī)SHT11溫濕度傳感器檢測程序_第3頁
第3頁 / 共10頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《基于51單片機(jī)SHT11溫濕度傳感器檢測程序》由會員分享,可在線閱讀,更多相關(guān)《基于51單片機(jī)SHT11溫濕度傳感器檢測程序(10頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、 基于51單片機(jī)SHT11溫濕度傳感器檢測程序(含電路圖) 下面是原理圖: 下面是SHT11與MCU連接的典型電路: 下面是源代碼: #include #include /******************************************************** 宏定義 ********************************************************/ #define uint unsigned int #define uchar unsigne

2、d char #define noACK 0 #define ACK 1 #define STATUS_REG_W 0x06 #define STATUS_REG_R 0x07 #define MEASURE_TEMP 0x03 #define MEASURE_HUMI 0x05 #define RESET 0x1e enum{TEMP,HUMI}; typedefunion//定義共用同類型 { unsignedinti; floatf; } value; /*********************************************

3、*********** 位定義 ********************************************************/ sbit lcdrs=P2^0; sbit lcdrw=P2^1; sbit lcden=P2^2; sbit SCK = P1^0; sbit DATA = P1^1; /******************************************************** 變量定義 ********************************************************/ ucha

4、r table2[]="SHT11 溫濕度檢測"; uchar table3[]="溫度為: ℃"; uchar table4[]="濕度為:"; uchar table5[]="."; uchar wendu[6]; uchar shidu[6]; /******************************************************** 1ms延時(shí)函數(shù) ********************************************************/ voiddelay(intz) { intx,y; for(

5、x=z;x>0;x--) for(y=125;y>0;y--); } /******************************************************** 50us延時(shí)函數(shù) ********************************************************/ voiddelay_50us(uint t) { uint j; for(;t>0;t--) for(j=19;j>0;j--); } /*******************************************

6、************* 50ms延時(shí)函數(shù) ********************************************************/ voiddelay_50ms(uint t) { uint j; for(;t>0;t--) for(j=6245;j>0;j--); } /******************************************************** 12864液晶寫指令 ********************************************************/

7、 voidwrite_12864com(uchar com) { lcdrs=0; delay_50us(1); P0=com; lcden=1; delay_50us(10); lcden=0; delay_50us(2); } /******************************************************** 12864液晶寫數(shù)據(jù) ********************************************************/ voidwrite_dat(uchar dat

8、) { lcdrs=1; lcdrw=0; delay_50us(1); P0=dat; lcden=1; delay_50us(10); lcden=0; delay_50us(2); } /******************************************************** 12864液晶初始化 ********************************************************/ voidinit12864lcd(void) { delay_50

9、ms(2); write_12864com(0x30); delay_50us(4); write_12864com(0x30); delay_50us(4); write_12864com(0x0f); delay_50us(4); write_12864com(0x01); delay_50us(240); write_12864com(0x06); delay_50us(10); write_12864com(0x0c); delay_50us(10); } /**********************

10、********************************** 12864液晶顯示函數(shù) ********************************************************/ voiddisplay1(void) { uchar i; write_12864com(0x80); for(i=0;i<18;i++) { write_dat(table2[i]); delay_50us(1); } } /******************************************

11、************** 12864液晶顯示函數(shù) ********************************************************/ voiddisplay2(void) { uchar i; write_12864com(0x90); for(i=0;i<18;i++) { write_dat(table3[i]); delay_50us(1); } } /******************************************************** 1286

12、4液晶顯示函數(shù) ********************************************************/ voiddisplay3(void) { uchar i; write_12864com(0x88); for(i=0;i<8;i++) { write_dat(table4[i]); delay_50us(1); } } /******************************************************** 12864液晶顯示函數(shù) *************

13、*******************************************/ voiddisplaywendu(void) { uchar i; write_12864com(0x94); for(i=0;i<3;i++) { write_dat(wendu[i]); delay_50us(1); } for(i=0;i<1;i++) { write_dat(table5[i]); delay_50us(1); } for(i=4;i<5;i++) { write_dat(wend

14、u[i]); delay_50us(1); } } /******************************************************** 12864液晶顯示函數(shù) ********************************************************/ voiddisplayshidu(void) { uchar i; write_12864com(0x8C); for(i=0;i<3;i++) { write_dat(shidu[i]); delay_50us(1);

15、 } for(i=0;i<1;i++) { write_dat(table5[i]); delay_50us(1); } for(i=4;i<5;i++) { write_dat(shidu[i]); delay_50us(1); } } /******************************************************** SHT11寫字節(jié)程序 ********************************************************/ chars_write

16、_byte(unsignedcharvalue) { unsignedchari,error=0; for(i=0x80;i>0;i>>=1)//高位為1,循環(huán)右移 { if(i&value) DATA=1;//和要發(fā)送的數(shù)相與,結(jié)果為發(fā)送的位 elseDATA=0; SCK=1; _nop_();_nop_();_nop_();//延時(shí)3us SCK=0; } DATA=1;//釋放數(shù)據(jù)線 SCK=1; error=DATA;//檢查應(yīng)答信號,確認(rèn)通訊正常 _nop_();_nop_();_nop_();

17、SCK=0; DATA=1; returnerror;//error=1 通訊錯(cuò)誤 } /******************************************************** SHT11讀字節(jié)程序 ********************************************************/ chars_read_byte(unsignedcharack) { unsignedchari,val=0; DATA=1;//釋放數(shù)據(jù)線 for(i=0x80;i>0;i>>=1)//高位為1,循環(huán)右移

18、 { SCK=1; if(DATA) val=(val|i);//讀一位數(shù)據(jù)線的值 SCK=0; } DATA=!ack;//如果是校驗(yàn),讀取完后結(jié)束通訊 ; SCK=1; _nop_();_nop_();_nop_();//延時(shí)3us SCK=0; _nop_();_nop_();_nop_(); DATA=1;//釋放數(shù)據(jù)線 returnval; } /******************************************************** SHT11啟動(dòng)傳輸 *********

19、***********************************************/ voids_transstart(void) { DATA=1; SCK=0;//準(zhǔn)備 _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } /*******************************************

20、************* SHT11連接復(fù)位 ********************************************************/ voids_connectionreset(void) { unsignedchari; DATA=1; SCK=0;//準(zhǔn)備 for(i=0;i<9;i++)//DATA保持高,SCK時(shí)鐘觸發(fā)9次,發(fā)送啟動(dòng)傳輸,通迅即復(fù)位 { SCK=1; SCK=0; } s_transstart();//啟動(dòng)傳輸 } /****************************

21、**************************** SHT11溫濕度檢測 ********************************************************/ chars_measure(unsignedchar*p_value, unsignedchar*p_checksum, unsignedcharmode) { unsigned error=0; unsignedinti; s_transstart();//啟動(dòng)傳輸 switch(mode)//選擇發(fā)送命令 { caseTEMP : error+=

22、s_write_byte(MEASURE_TEMP);break;//測量溫度 caseHUMI : error+=s_write_byte(MEASURE_HUMI);break;//測量濕度 default:break; } for(i=0;i<65535;i++)if(DATA==0)break;//等待測量結(jié)束 if(DATA) error+=1;// 如果長時(shí)間數(shù)據(jù)線沒有拉低,說明測量錯(cuò)誤 *(p_value) =s_read_byte(ACK);//讀第一個(gè)字節(jié),高字節(jié) (MSB) *(p_value+1)=s_read_byte(ACK)

23、;//讀第二個(gè)字節(jié),低字節(jié) (LSB) *p_checksum =s_read_byte(noACK);//read CRC校驗(yàn)碼 returnerror;// error=1 通訊錯(cuò)誤 } /******************************************************** SHT11溫濕度值標(biāo)度變換及溫度補(bǔ)償 ********************************************************/ voidcalc_sth10(float*p_humidity ,float*p_temperature) {

24、 constfloatC1=-4.0;// 12位濕度精度 修正公式 constfloatC2=+0.0405;// 12位濕度精度 修正公式 constfloatC3=-0.0000028;// 12位濕度精度 修正公式 constfloatT1=+0.01;// 14位溫度精度 5V條件 修正公式 constfloatT2=+0.00008;// 14位溫度精度 5V條件 修正公式 floatrh=*p_humidity;// rh: 12位 濕度 floatt=*p_temperature;// t: 14位 溫度 floatrh_li

25、n;// rh_lin: 濕度 linear值 floatrh_true;// rh_true: 濕度 ture值 floatt_C;// t_C : 溫度 ℃ t_C=t*0.01 - 40;//補(bǔ)償溫度 rh_lin=C3*rh*rh + C2*rh + C1;//相對濕度非線性補(bǔ)償 rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//相對濕度對于溫度依賴性補(bǔ)償 if(rh_true>100)rh_true=100;//濕度最大修正 if(rh_true<0.1)rh_true=0.1;//濕度最小修正 *p_t

26、emperature=t_C;//返回溫度結(jié)果 *p_humidity=rh_true;//返回濕度結(jié)果 } /******************************************************** 主函數(shù) ********************************************************/ voidmain(void) { unsignedinttemp,humi; value humi_val,temp_val;//定義兩個(gè)共同體,一個(gè)用于濕度,一個(gè)用于溫度 unsignedcharerror;//

27、用于檢驗(yàn)是否出現(xiàn)錯(cuò)誤 unsignedcharchecksum;//CRC init12864lcd(); display1(); display2(); display3(); s_connectionreset();//啟動(dòng)連接復(fù)位 while(1) { error=0;//初始化error=0,即沒有錯(cuò)誤 error+=s_measure((unsignedchar*)&temp_val.i,&checksum,TEMP);//溫度測量 error+=s_measure((unsignedchar*)&humi_val.i

28、,&checksum,HUMI);//濕度測量 if(error!=0) s_connectionreset();////如果發(fā)生錯(cuò)誤,系統(tǒng)復(fù)位 else { humi_val.f=(float)humi_val.i;//轉(zhuǎn)換為浮點(diǎn)數(shù) temp_val.f=(float)temp_val.i;//轉(zhuǎn)換為浮點(diǎn)數(shù) calc_sth10(&humi_val.f,&temp_val.f);//修正相對濕度及溫度 temp=temp_val.f*10; humi=humi_val.f*10; wendu[0]=temp/1000+0;//溫度百位

29、 wendu[1]=temp%1000/100+0;//溫度十位 wendu[2]=temp%100/10+0;//溫度個(gè)位 wendu[3]=0x2E;//小數(shù)點(diǎn) wendu[4]=temp%10+0;//溫度小數(shù)點(diǎn)后第一位 displaywendu(); shidu[0]=humi/1000+0;//濕度百位 shidu[1]=humi%1000/100+0;//濕度十位 shidu[2]=humi%100/10+0;//濕度個(gè)位 shidu[3]=0x2E;//小數(shù)點(diǎn) shidu[4]=humi%10+0;//濕度小數(shù)點(diǎn)后第一位 displayshidu(); } delay(800);//等待足夠長的時(shí)間,以現(xiàn)行下一次轉(zhuǎn)換 } } 相關(guān)手冊資料及源碼下載地址:基于51單片機(jī)SHT11溫濕度傳感器檢測程序相關(guān)資料

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!