基于51單片機SHT11溫濕度傳感器檢測程序_第1頁
基于51單片機SHT11溫濕度傳感器檢測程序_第2頁
基于51單片機SHT11溫濕度傳感器檢測程序_第3頁
基于51單片機SHT11溫濕度傳感器檢測程序_第4頁
基于51單片機SHT11溫濕度傳感器檢測程序_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于51單片機SHT11S濕度傳感器檢測程 序(含電路圖)卜面就是原理卜面就是SHT1W MCU!接的典型電路:2 接口說明SHT1X(slave)2 典型應(yīng)用電路卜面就是源代碼:#include <reg52 、 h>#include <intrins 、 h>/* 宏定義*/#define uint unsigned int#define uchar unsigned char#define noACK 0#define ACK 1#define STATUS_REG_W 0x06#define STATUS_REG_R 0x07#define MEASURE_TE

2、MP 0x03#define MEASURE_HUMI 0x05#define RESET 0x1eenum TEMP,HUMI; typedef union / 定義共用同類型 unsigned int i;float f; value;/* 位定義*/sbit lcdrs=P2A0;sbit lcdrw=P2A1;sbit lcden=P2A2;sbit SCK = P1A0;sbit DATA = P1A1;/* 變量定義*/uchar table2="SHT11 溫濕度檢測"uchar table3=uchar table4=uchar table5=IIIIII溫

3、度為: "濕度為:"II.uchar wendu6;uchar shidu6;/* 1ms 延時函數(shù)*/ void delay(int z) x,y;intfor(x=z;x>0;x-) for(y=125;y>0;y-);/* 50us 延時函數(shù)*/void delay_50us(uint t) uint j;for(;t>0;t-)for(j=19;j>0;j-);/* 50ms 延時函數(shù)*/void delay_50ms(uint t) uint j;for(;t>0;t-)for(j=6245;j>0;j-); /*12864 液

4、晶寫指令*/ void write_12864com(uchar com) lcdrs=0;delay_50us(1);P0=com;lcden=1;delay_50us(10);lcden=0;delay_50us(2);/* 12864 液晶寫數(shù)據(jù)*/void write_dat(uchar dat) lcdrs=1;lcdrw=0;delay_50us(1);P0=dat;lcden=1;delay_50us(10);lcden=0;delay_50us(2);/* 12864 液晶初始化*/void init12864lcd(void) delay_50ms(2);write_1286

5、4com(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); /*12864 液晶顯示函數(shù)*/void display1(void)uchar i;write_12864com(0x80);for(i=0;i<18;i+)write_dat(ta

6、ble2i);delay_50us(1);/* 12864 液晶顯示函數(shù)*/void display2(void)uchar i;write_12864com(0x90);for(i=0;i<18;i+)write_dat(table3i);delay_50us(1); /*12864 液晶顯示函數(shù)*/void display3(void)uchar i;write_12864com(0x88);for(i=0;i<8;i+)write_dat(table4i);delay_50us(1); /*12864 液晶顯示函數(shù)*/void displaywendu(void) uchar

7、 i;write_12864com(0x94); for(i=0;i<3;i+) write_dat(wendui);delay_50us(1);for(i=0;i<1;i+)write_dat(table5i);delay_50us(1);for(i=4;i<5;i+)write_dat(wendui);delay_50us(1);/* 12864 液晶顯示函數(shù)*/void displayshidu(void) uchar i;write_12864com(0x8C);for(i=0;i<3;i+)write_dat(shidui);delay_50us(1);for

8、(i=0;i<1;i+)write_dat(table5i);delay_50us(1);for(i=4;i<5;i+)write_dat(shidui);delay_50us(1);/* SHT11 寫字節(jié)程序*/ char s_write_byte(unsigned char value) unsigned char i,error=0;for (i=0x80;i>0;i>>=1)/ 高位為 1, 循環(huán)右移if (i&value) DATA=1; / 與要發(fā)送的數(shù)相與, 結(jié)果為發(fā)送的位else DATA=0;SCK=1;_nop_();_nop_();

9、_nop_();/ 延時 3usSCK=0;DATA=1; / 釋放數(shù)據(jù)線SCK=1;error=DATA; / 檢查應(yīng)答信號, 確認(rèn)通訊正常_nop_();_nop_();_nop_();SCK=0;DATA=1;return error; /error=1 通訊錯誤/* SHT11 讀字節(jié)程序*/ char s_read_byte(unsigned char ack) unsigned char i,val=0;DATA=1; / 釋放數(shù)據(jù)線for(i=0x80;i>0;i>>=1)/ 高位為 1, 循環(huán)右移SCK=1;if(DATA) val=(val|i);/ 讀一位

10、數(shù)據(jù)線的值SCK=0;DATA=!ack; / 如果就是校驗, 讀取完后結(jié)束通訊;SCK=1;_nop_();_nop_();_nop_();/ 延時 3usSCK=0;_nop_();_nop_();_nop_();DATA=1; / 釋放數(shù)據(jù)線 return val;/* SHT11 啟動傳輸*/void s_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;/*SHT

11、11 連接復(fù)位*/void s_connectionreset(void)unsigned char i;DATA=1; SCK=0; / 準(zhǔn)備for(i=0;i<9;i+) /DATA保持高,SCK時鐘觸發(fā)9次,發(fā)送啟動傳輸,通迅即復(fù)位SCK=1;SCK=0;s_transstart(); / 啟動傳輸/* SHT11 溫濕度檢測char *p_checksum,break;/ 測量溫度break;/ 測量濕度*/ char s_measure(unsigned char *p_value, unsigned unsigned charmode)unsigned error=0;uns

12、igned int i;s_transstart(); / 啟動傳輸switch(mode) / 選擇發(fā)送命令case TEMP : error+=s_write_byte(MEASURE_TEMP); case HUMI : error+=s_write_byte(MEASURE_HUMI); default : break;for (i=0;i<65535;i+) if(DATA=0) break; / 等待測量結(jié)束if(DATA) error+=1; / 如果長時間數(shù)據(jù)線沒有拉低, 說明測量錯誤*(p_value) =s_read_byte(ACK); / 讀第一個字節(jié), 高字節(jié)

13、(MSB)*(p_value+1)=s_read_byte(ACK); / 讀第二個字節(jié), 低字節(jié) (LSB)*p_checksum =s_read_byte(noACK); /read CRC 校驗碼return error; / error=1 通訊錯誤/*SHT11 溫濕度值標(biāo)度變換及溫度補償*/void calc_sth10(float *p_humidity ,float *p_temperature)const floatC1=-4、 0; / 12 位濕度精度修正公式const floatC2=+0、 0405; / 12 位濕度精度修正公式const floatC3=-0、 0

14、000028; / 12 位濕度精度修正公式const float T1=+O 01; / 14 位溫度精度5V條件修正公式const float T2=+。00008; / 14 位溫度精度5V條件修正公式float rh=*p_humidity; / rh: 12 位 濕度float t=*p_temperature; / t: 14 位 溫度float rh_lin; / rh_lin:濕度 linear 值float rh_true; / rh_true: 濕度 ture 值float t_C; / t_C : 溫度 t_C=t*0 、 01 - 40;/ 補償溫度rh_lin=C3*

15、rh*rh + C2*rh + C1;/ 相對濕度非線性補償rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;/ 相對濕度對于溫度依賴性補償if(rh_true>100)rh_true=100; / 濕度最大修正if(rh_true<0 、 1)rh_true=0 、 1; / 濕度最小修正*p_temperature=t_C; / 返回溫度結(jié)果*p_humidity=rh_true; / 返回濕度結(jié)果/*主函數(shù)*/void main(void) unsignedinttemp,humi;value humi_val,temp_val; / 定義兩個共同體, 一

16、個用于濕度, 一個用于溫度unsignedcharerror; /用于檢驗就是否出現(xiàn)錯誤unsignedcharchecksum;/CRCinit12864lcd();display1();display2();display3();s_connectionreset(); / 啟動連接復(fù)位while(1)error=0; / 初始化 error=0, 即沒有錯誤error+=s_measure(unsignedchar*)&temp_val 、 i,&checksum,TEMP);/ 溫度測量error+=s_measure(unsignedchar*)&humi_v

17、al 、 i,&checksum,HUMI);/ 濕度測量if(error!=0) s_connectionreset();/ 如果發(fā)生錯誤, 系統(tǒng)復(fù)位elsehumi_val 、 f=(float)humi_val、i;/轉(zhuǎn)換為浮點數(shù)temp_val 、 f=(float)temp_val、i;/轉(zhuǎn)換為浮點數(shù)calc_sth10(&humi_val 、 f,&temp_val 、 f);/ 修正相對濕度及溫度temp=temp_val 、 f*10;humi=humi_val 、 f*10;wendu0=temp/1000+'0'/ 溫度百位wendu1=temp%1000/100+'0'/ 溫度十位wendu2=temp%100/10+'0'/ 溫度個位wendu3=0x2E; / 小數(shù)點wendu4=temp%10+'0'

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論