全部評論(3條)
-
- gfgftgfygfty 2008-06-03 00:00:00
- 你好! 我的博客里有<<SHT11溫度濕度傳感器的詳細資料包獲C代碼和使用方法>> 請留下郵箱!
-
贊(19)
回復(0)
-
- 鑼鼓愛好人 2012-08-14 00:00:00
- #include <reg52.h> #define uchar unsigned char #define uint unsigned int //數(shù)碼管位定義 sbit dula = P2^6; sbit wela = P2^7; #define OK 1 #define ERROR 0 #define NUMBER 20 #define SIZE 5 sbit dht11 = P2^0; uchar status; //存放五字節(jié)數(shù)據(jù)的數(shù)組 uchar value_array[SIZE]; /*可在其他的文件引用溫濕度值,實際是溫度的整數(shù)的10 倍 如dht11 讀回的溫度是26,則temp_value = 260, 濕度同理*/ uchar flag; //數(shù)碼管編碼 uchar code array[]= { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f }; int temp_value, humi_value; void InitTime(void); //void Delay_1ms(uint ms); void SMG_Display(uint value); void Delay_1ms(uint ms) { uint x, y; for(x = ms; x > 0; x--) { for(y = 124; y > 0; y--); } } void Delay_10us(void) { unsigned char i; i--; i--; i--; i--; i--; i--; } /*讀一個字節(jié)的數(shù)據(jù)*/ uchar ReadValue(void) { uchar count, value = 0, i; status = OK; //設定標志為正常狀態(tài) for(i = 8; i > 0; i--) { //高位在先 value <<= 1; count = 0; //每一位數(shù)據(jù)前會有一個50us 的低電平時間.等待50us 低電平結(jié)束 while(dht11 == 0 && count++ < NUMBER); if(count >= NUMBER) { status = ERROR; //設定錯誤標志 return 0; //函數(shù)執(zhí)行過程發(fā)生錯誤就退出函數(shù) } //26-28us 的高電平表示該位是0,為70us 高電平表該位1 Delay_10us(); Delay_10us(); Delay_10us(); //延時30us 后檢測數(shù)據(jù)線是否還是高電平 if(dht11 != 0) { //進入這里表示該位是1 value++; //等待剩余(約40us)的高電平結(jié)束 while(dht11 != 0 && count++ < NUMBER) { dht11 = 1; } if(count >= NUMBER) { status = ERROR; //設定錯誤標志 return 0; } } } return (value); } //讀一次的數(shù)據(jù),共五字節(jié) uchar ReadTempAndHumi(void) { uchar i = 0, check_value = 0,count = 0; EA = 0; dht11 = 0; //拉低數(shù)據(jù)線大于18ms 發(fā)送開始信號 Delay_1ms(20); //需大于18 毫秒 dht11 = 1; //釋放數(shù)據(jù)線,用于檢測低電平的應答信號 //延時20-40us,等待一段時間后檢測應答信號,應答信號是從機拉低數(shù)據(jù)線80us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); if(dht11 != 0) //檢測應答信號,應答信號是低電平 { //沒應答信號 EA = 1; return ERROR; } else { //有應答信號 while(dht11 == 0 && count++ < NUMBER); //等待應答信號結(jié)束 if(count >= NUMBER) //檢測計數(shù)器是否超過了設定的范圍 { dht11 = 1; EA = 1; return ERROR; //讀數(shù)據(jù)出錯,退出函數(shù) } count = 0; dht11 = 1;//釋放數(shù)據(jù)線 //應答信號后會有一個80us 的高電平,等待高電平結(jié)束 while(dht11 != 0 && count++ < NUMBER); if(count >= NUMBER) { dht11 = 1; EA = 1; return ERROR; //退出函數(shù) } //讀出濕.溫度值 for(i = 0; i < SIZE; i++) { value_array[i] = ReadValue(); if(status == ERROR)//調(diào)用ReadValue()讀數(shù)據(jù)出錯會設定status 為ERROR { dht11 = 1; EA = 1; return ERROR; } //讀出的Z后一個值是校驗值不需加上去 if(i != SIZE - 1) { //讀出的五字節(jié)數(shù)據(jù)中的前四字節(jié)數(shù)據(jù)和等于第五字節(jié)數(shù)據(jù)表示成功 check_value += value_array[i]; } }//end for //在沒用發(fā)生函數(shù)調(diào)用失敗時進行校驗 if(check_value == value_array[SIZE - 1]) { //將溫濕度擴大10 倍方便分離出每一位 humi_value = value_array[0] * 10; temp_value = value_array[2] * 10; dht11 = 1; EA = 1; return OK; //正確的讀出dht11 輸出的數(shù)據(jù) } else { //校驗數(shù)據(jù)出錯 EA = 1; return ERROR; } } } void main(void) { uchar mark = 0; //先等上電穩(wěn)定 Delay_1ms(1000); //因為讀一次數(shù)據(jù)dht11 才會觸發(fā)一次采集數(shù)據(jù). //即在先使用數(shù)據(jù)時采集一次數(shù)據(jù) ReadTempAndHumi(); //因為在兩次采集數(shù)據(jù)需一定的時間間隔,這里還可減少 Delay_1ms(3000); //設定定時器 InitTime(); while(1) { //三秒讀一次溫濕度 if(flag == 60) { flag = 0; mark++; /* //讀溫濕度,可檢測函數(shù)調(diào)用是否失敗, //函數(shù)返回OK(1)表示成功,返回ERROR(0)表示失敗 //OK和ERROR是在DHT11.H中定義的宏 */ ReadTempAndHumi(); } if(mark % 2 == 0) { //顯示溫度 SMG_Display(temp_value); } else { //顯示濕度 SMG_Display(humi_value); } } } //設定定時器 void InitTime(void) { TH0 = (65535 - 50000)/256; TL0 = (65535 - 50000)%256 ; TMOD = 0X01; TR0 = 1; ET0 = 1; EA = 1; } //數(shù)碼管顯示函數(shù) void SMG_Display(uint value) { uchar ge, bai, shi; ge = value % 10; shi = value % 100 / 10; bai = value % 1000 / 100; wela=1; P0 = 0XFE; wela=0; P0 = 0XFF; dula=1;; P0 = array[bai]; dula=0; Delay_1ms(2); wela=1; P0 = 0XFD; wela=0; P0 = 0XFF; dula=1; P0 = array[shi]; P0 |= 0x80; /*顯示小數(shù)點*/ dula=0; Delay_1ms(2); wela=1; P0 = 0XFB; wela=0; P0 = 0XFF; dula=1; P0 = array[ge]; dula=0; Delay_1ms(2); } //中斷函數(shù) void timer(void) interrupt 1 { TH0 = (65535 - 50000)/256; TL0 = (65535 - 50000)%256; flag++; }
-
贊(2)
回復(0)
-
- 航錐臘媒頓么 2016-06-09 00:00:00
- #define DATA P1_1
#define SCK P1_0
#define ACK 1
#define noACK 0
#define MEASURE_TEMP 0x03 //測量溫度命令
#define MEASURE_HUMI 0x05 //測量濕度命令
//讀溫濕度數(shù)據(jù)
char s-measure(unsigned char *p- value, un-signed char *p_checksum, unsigned char mode)
{
unsigned char error=0;
unsigned int i;
s_transstart(); //傳輸開始
switch(mode){
case
TEMP:error+=s_write_byte(measure_temp);
break;
case
HUMI:error+=s_write_byte(measure_humi);break;
default:break;
}
for(i=0;i<65535;i++) if(DATA==0) break;
if (DATA) reeor+=1;
*(p_value)=s_read_byte(ACK);
*(p_value+1)=s_read_byte(ACK);
*p_checksum=s_read_byte(noACK);
return error;
}
//溫濕度值標度變換及溫度補償
void calc_sth15(float *p_humidity,float *p_tempera-ture)
{
const float c1=-4.0;
const float c2=0.0405;
const float c3=-0.0000028;
const float t1=-0.01;
const float t2=0.00008;
float rh=×p_humidity;
float t=×p_temperature;
float rh_lin;
float th_ture;
float t_c;
t_c=t×0.01-40;
rh_lin=c3×rh×rh+c2×rh+c1;
trh_ture=(t_c-25)×(t1+t2×rh)+rh_lin;
×p_temperature=t-c;
×p_humidity=rh_ture;
}
//從相對溫度和濕度計算露點
char calc_dewpoint(float h,float t)
{float logex,dew_point;
logex=0.66077+7.5×t/(237.3+t)+[log10(h)-2];
dew_point=(logex-0.66077)×237.3/(0.66077+7.5-logex);
return dew_point;
} -
贊(20)
回復(0)
熱門問答
- 100分,求溫濕度傳感器SHT11的源程序(51單片機語言)
- 謝謝了,在線等.... 謝謝了,在線等. 展開
2008-06-02 21:46:45
390
3
- 溫濕度傳感器SHT10與51單片機連接電路
2009-08-08 05:29:07
339
4
- 哪位大俠有51單片機控制直流電機的源程序
2017-12-13 05:13:18
290
1
- 急求 基于51單片機 yl69土壤濕度傳感器 lcd1602顯示濕度c語言程序
2016-11-10 05:49:23
476
2
- 溫濕度傳感器SHT10和SHT11的區(qū)別?
- 想知道sht10和sht11有什么區(qū)別?除了精度以外?他們的性能.工作原理.程序是不是都可以通用?麻煩詳細點.謝謝!滿意還會加分的.... 想知道sht10和sht11有什么區(qū)別? 除了精度以外? 他們的性能.工作原理.程序是不是都可以通用? 麻煩詳細點.謝謝! 滿意還會加分的. 展開
2009-03-15 07:26:02
579
2
- 求基于51單片機YL69土壤濕度傳感器的C語言代碼,包括AD轉(zhuǎn)換,謝謝。
2018-11-29 07:57:23
347
0
- 單片機通過溫濕度傳感器sht11控制草坪噴水,程序怎么寫?。?
2012-12-12 10:50:58
498
4
- 51單片機讀取溫濕度傳感器數(shù)據(jù),顯示在1602上
- 求電路圖···... 求電路圖··· 展開
2014-02-09 06:49:05
400
3
- 誰能給個溫濕度傳感器sht11和單片機連接圖 要具體的圖
2012-04-11 12:12:34
436
3
- c語言的單片機控制的空調(diào)溫度控制系統(tǒng)的源程序
2012-02-15 01:32:02
383
2
- 請問有誰寫過htu21d溫濕度傳感器的51單片機 c程序嗎,求參考一下
2018-11-14 00:47:32
282
0
- SHT10(SHT11)溫濕度傳感器輸出數(shù)據(jù)不穩(wěn)定
- SHT10(或SHT11)測量濕度時,輸出的數(shù)據(jù)不穩(wěn)定,比如測量74%濕度時,在67%~82%之間跳動,測量溫度則偏高離普:測量22度時,輸出為95度左右亂跳,也不穩(wěn)定。排除器件損壞的問題,因為換... SHT10(或SHT11)測量濕度時,輸出的數(shù)據(jù)不穩(wěn)定,比如測量74%濕度時,在67%~82%之間跳動,測量溫度則偏高離普:測量22度時,輸出為95度左右亂跳,也不穩(wěn)定。排除器件損壞的問題,因為換了一個還是一樣,焊好之后也放置了24小時了,請哪位大師幫忙解決,感激不盡! 展開
2018-11-25 06:39:54
383
0
- DHT22 SHT11 這兩種溫濕度傳感器哪一種好
2017-08-02 23:06:41
266
1
- 51單片機溫度控制系統(tǒng)的C語言程序
- 設計基于單片計算機的溫度控制器。用于控制電加熱爐的溫度。具體要求如下1.溫度連續(xù)可調(diào),范圍為30℃~150℃2.超調(diào)量σ%≤20%3.溫度誤差≤±0.5℃4.人-機對話方便5.控制算法采用PID或改... 設計基于單片計算機的溫度控制器。用于控制電加熱爐的溫度。具體要求如下 1. 溫度連續(xù)可調(diào),范圍為30℃~150℃ 2. 超調(diào)量σ%≤20% 3. 溫度誤差≤±0.5℃ 4. 人-機對話方便 5. 控制算法采用PID或改進的PID或其他算法 .請發(fā)至3166109374@qq.com 謝謝幫忙 具體見http://wenku.baidu.com/view/e0feacf0f121dd36a22d822c 展開
2015-06-07 00:06:30
504
3
- 溫濕度傳感器sht11芯片的封裝形式是什么
2012-07-17 09:56:43
432
2
- 集成溫濕度傳感器SHT11和SHT10的區(qū)別~
- 是不是僅僅只有性能上的區(qū)別?使用和設計方法是不是一樣?如果不一樣,請說明不一樣在哪... 是不是僅僅只有性能上的區(qū)別? 使用和設計方法是不是一樣?如果不一樣,請說明不一樣在哪 展開
2009-02-28 13:53:05
457
3
- 嵌入式溫濕度傳感器C語言代碼求幫忙注釋
- 嵌入式溫濕度無線傳感器,C語言代碼求幫忙注釋,關(guān)鍵的地方注釋一下,越多越好。無線傳感器網(wǎng)絡源代碼發(fā)到百度貼吧了ht\t\p://tieba.baidu.com/p/2801429171... 嵌入式溫濕度無線傳感器,C語言代碼求幫忙注釋,關(guān)鍵的地方注釋一下,越多越好。無線傳感器網(wǎng)絡源代碼發(fā)到百度貼吧了h t \t \p:// ti e ba.baidu.com/p/28 01429 171 展開
2016-07-02 07:25:08
595
1
- 單片機與溫濕度傳感器
- 板子是430F149芯片是DHT11LCD是1602求完整的main函數(shù),dht11驅(qū)動函數(shù)和1602顯示函數(shù)琢磨半天了程序就是編譯不通過要能用的不要隨便抄的!大神直接聯(lián)系546709472濫竽充數(shù)的就不一一回復... 板子是430F149 芯片是DHT11 LCD是1602 求完整的main函數(shù),dht11驅(qū)動函數(shù)和1602顯示函數(shù) 琢磨半天了 程序就是編譯不通過 要能用的不要隨便抄的! 大神直接聯(lián)系546709472 濫竽充數(shù)的就不一一回復了 展開
2014-12-11 09:58:06
348
3
- 求DHT22/AM2302溫濕度傳感器AT89S52單片機程序
- 求DHT22/AM2302溫濕度傳感器AT89S52單片機程序,就是溫濕度數(shù)據(jù)讀取和處理的哪方面。求具體程序。... 求DHT22/AM2302溫濕度傳感器AT89S52單片機程序,就是溫濕度數(shù)據(jù)讀取和處理的哪方面。求具體程序。 展開
2012-05-29 02:50:34
362
2
- SHT11溫濕度傳感器能在protus里面仿真嗎?
- 有看到網(wǎng)上寫了關(guān)于SHT11在protus里面仿真的文章,但我自己沒在protus里面找到SHT11這個元件。和版本有關(guān)嗎?我的似乎是7.1的。如果不行,是否可以給我推薦個可以在protus里面仿真的濕... 有看到網(wǎng)上寫了關(guān)于SHT11在protus里面仿真的文章,但我自己沒在protus里面找到SHT11這個元件。和版本有關(guān)嗎?我的似乎是7.1的。 如果不行,是否可以給我推薦個可以在protus里面仿真的濕度傳感器或者溫濕度傳感器。。 先謝了! 展開
2009-11-24 03:10:39
455
5
4月突出貢獻榜
推薦主頁
最新話題





參與評論
登錄后參與評論