仪器网(yiqi.com)欢迎您!

| 注册 登录
网站首页-资讯-专题- 微头条-话题-产品- 品牌库-搜索-供应商- 展会-招标-采购- 社区-知识-技术-资料库-方案-直播- 视频

问答社区

100分,求温湿度传感器SHT11的源程序(51单片机语言)

小Q740593168 2008-06-02 21:46:45 321  浏览
  • 谢谢了,在线等.... 谢谢了,在线等. 展开

参与评论

全部评论(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 //数码管位定义 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; //存放五字节数据的数组 uchar value_array[SIZE]; /*可在其他的文件引用温湿度值,实际是温度的整数的10 倍 如dht11 读回的温度是26,则temp_value = 260, 湿度同理*/ uchar flag; //数码管编码 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--; } /*读一个字节的数据*/ uchar ReadValue(void) { uchar count, value = 0, i; status = OK; //设定标志为正常状态 for(i = 8; i > 0; i--) { //高位在先 value <<= 1; count = 0; //每一位数据前会有一个50us 的低电平时间.等待50us 低电平结束 while(dht11 == 0 && count++ < NUMBER); if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; //函数执行过程发生错误就退出函数 } //26-28us 的高电平表示该位是0,为70us 高电平表该位1 Delay_10us(); Delay_10us(); Delay_10us(); //延时30us 后检测数据线是否还是高电平 if(dht11 != 0) { //进入这里表示该位是1 value++; //等待剩余(约40us)的高电平结束 while(dht11 != 0 && count++ < NUMBER) { dht11 = 1; } if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; } } } return (value); } //读一次的数据,共五字节 uchar ReadTempAndHumi(void) { uchar i = 0, check_value = 0,count = 0; EA = 0; dht11 = 0; //拉低数据线大于18ms 发送开始信号 Delay_1ms(20); //需大于18 毫秒 dht11 = 1; //释放数据线,用于检测低电平的应答信号 //延时20-40us,等待一段时间后检测应答信号,应答信号是从机拉低数据线80us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); if(dht11 != 0) //检测应答信号,应答信号是低电平 { //没应答信号 EA = 1; return ERROR; } else { //有应答信号 while(dht11 == 0 && count++ < NUMBER); //等待应答信号结束 if(count >= NUMBER) //检测计数器是否超过了设定的范围 { dht11 = 1; EA = 1; return ERROR; //读数据出错,退出函数 } count = 0; dht11 = 1;//释放数据线 //应答信号后会有一个80us 的高电平,等待高电平结束 while(dht11 != 0 && count++ < NUMBER); if(count >= NUMBER) { dht11 = 1; EA = 1; return ERROR; //退出函数 } //读出湿.温度值 for(i = 0; i < SIZE; i++) { value_array[i] = ReadValue(); if(status == ERROR)//调用ReadValue()读数据出错会设定status 为ERROR { dht11 = 1; EA = 1; return ERROR; } //读出的Z后一个值是校验值不需加上去 if(i != SIZE - 1) { //读出的五字节数据中的前四字节数据和等于第五字节数据表示成功 check_value += value_array[i]; } }//end for //在没用发生函数调用失败时进行校验 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 输出的数据 } else { //校验数据出错 EA = 1; return ERROR; } } } void main(void) { uchar mark = 0; //先等上电稳定 Delay_1ms(1000); //因为读一次数据dht11 才会触发一次采集数据. //即在先使用数据时采集一次数据 ReadTempAndHumi(); //因为在两次采集数据需一定的时间间隔,这里还可减少 Delay_1ms(3000); //设定定时器 InitTime(); while(1) { //三秒读一次温湿度 if(flag == 60) { flag = 0; mark++; /* //读温湿度,可检测函数调用是否失败, //函数返回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; } //数码管显示函数 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; /*显示小数点*/ dula=0; Delay_1ms(2); wela=1; P0 = 0XFB; wela=0; P0 = 0XFF; dula=1; P0 = array[ge]; dula=0; Delay_1ms(2); } //中断函数 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 //测量湿度命令 //读温湿度数据 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 321 3
温湿度传感器SHT10与51单片机连接电路
 
2009-08-08 05:29:07 253 4
哪位大侠有51单片机控制直流电机的源程序
 
2017-12-13 05:13:18 214 1
急求 基于51单片机 yl69土壤湿度传感器 lcd1602显示湿度c语言程序
 
2016-11-10 05:49:23 395 2
温湿度传感器SHT10和SHT11的区别?
想知道sht10和sht11有什么区别?除了精度以外?他们的性能.工作原理.程序是不是都可以通用?麻烦详细点.谢谢!满意还会加分的.... 想知道sht10和sht11有什么区别? 除了精度以外? 他们的性能.工作原理.程序是不是都可以通用? 麻烦详细点.谢谢! 满意还会加分的. 展开
2009-03-15 07:26:02 465 2
求基于51单片机YL69土壤湿度传感器的C语言代码,包括AD转换,谢谢。
 
2018-11-29 07:57:23 275 0
单片机通过温湿度传感器sht11控制草坪喷水,程序怎么写啊?
 
2012-12-12 10:50:58 402 4
51单片机读取温湿度传感器数据,显示在1602上
求电路图···... 求电路图··· 展开
2014-02-09 06:49:05 320 3
谁能给个温湿度传感器sht11和单片机连接图 要具体的图
 
2012-04-11 12:12:34 372 3
c语言的单片机控制的空调温度控制系统的源程序
 
2012-02-15 01:32:02 332 2
请问有谁写过htu21d温湿度传感器的51单片机 c程序吗,求参考一下
 
2018-11-14 00:47:32 236 0
DHT22 SHT11 这两种温湿度传感器哪一种好
 
2017-08-02 23:06:41 200 1
SHT10(SHT11)温湿度传感器输出数据不稳定
SHT10(或SHT11)测量湿度时,输出的数据不稳定,比如测量74%湿度时,在67%~82%之间跳动,测量温度则偏高离普:测量22度时,输出为95度左右乱跳,也不稳定。排除器件损坏的问题,因为换... SHT10(或SHT11)测量湿度时,输出的数据不稳定,比如测量74%湿度时,在67%~82%之间跳动,测量温度则偏高离普:测量22度时,输出为95度左右乱跳,也不稳定。排除器件损坏的问题,因为换了一个还是一样,焊好之后也放置了24小时了,请哪位大师帮忙解决,感激不尽! 展开
2018-11-25 06:39:54 281 0
51单片机温度控制系统的C语言程序
设计基于单片计算机的温度控制器。用于控制电加热炉的温度。具体要求如下1.温度连续可调,范围为30℃~150℃2.超调量σ%≤20%3.温度误差≤±0.5℃4.人-机对话方便5.控制算法采用PID或改... 设计基于单片计算机的温度控制器。用于控制电加热炉的温度。具体要求如下 1. 温度连续可调,范围为30℃~150℃ 2. 超调量σ%≤20% 3. 温度误差≤±0.5℃ 4. 人-机对话方便 5. 控制算法采用PID或改进的PID或其他算法 .请发至3166109374@qq.com 谢谢帮忙 具体见http://wenku.baidu.com/view/e0feacf0f121dd36a22d822c 展开
2015-06-07 00:06:30 421 3
集成温湿度传感器SHT11和SHT10的区别~
是不是仅仅只有性能上的区别?使用和设计方法是不是一样?如果不一样,请说明不一样在哪... 是不是仅仅只有性能上的区别? 使用和设计方法是不是一样?如果不一样,请说明不一样在哪 展开
2009-02-28 13:53:05 353 3
温湿度传感器sht11芯片的封装形式是什么
 
2012-07-17 09:56:43 365 2
嵌入式温湿度传感器C语言代码求帮忙注释
嵌入式温湿度无线传感器,C语言代码求帮忙注释,关键的地方注释一下,越多越好。无线传感器网络源代码发到百度贴吧了ht\t\p://tieba.baidu.com/p/2801429171... 嵌入式温湿度无线传感器,C语言代码求帮忙注释,关键的地方注释一下,越多越好。无线传感器网络源代码发到百度贴吧了h t \t \p:// ti e ba.baidu.com/p/28 01429 171 展开
2016-07-02 07:25:08 530 1
求DHT22/AM2302温湿度传感器AT89S52单片机程序
求DHT22/AM2302温湿度传感器AT89S52单片机程序,就是温湿度数据读取和处理的哪方面。求具体程序。... 求DHT22/AM2302温湿度传感器AT89S52单片机程序,就是温湿度数据读取和处理的哪方面。求具体程序。 展开
2012-05-29 02:50:34 291 2
单片机与温湿度传感器
板子是430F149芯片是DHT11LCD是1602求完整的main函数,dht11驱动函数和1602显示函数琢磨半天了程序就是编译不通过要能用的不要随便抄的!大神直接联系546709472滥竽充数的就不一一回复... 板子是430F149 芯片是DHT11 LCD是1602 求完整的main函数,dht11驱动函数和1602显示函数 琢磨半天了 程序就是编译不通过 要能用的不要随便抄的! 大神直接联系546709472 滥竽充数的就不一一回复了 展开
2014-12-11 09:58:06 259 3
SHT11温湿度传感器能在protus里面仿真吗?
有看到网上写了关于SHT11在protus里面仿真的文章,但我自己没在protus里面找到SHT11这个元件。和版本有关吗?我的似乎是7.1的。如果不行,是否可以给我推荐个可以在protus里面仿真的湿... 有看到网上写了关于SHT11在protus里面仿真的文章,但我自己没在protus里面找到SHT11这个元件。和版本有关吗?我的似乎是7.1的。 如果不行,是否可以给我推荐个可以在protus里面仿真的湿度传感器或者温湿度传感器。。 先谢了! 展开
2009-11-24 03:10:39 388 5

10月突出贡献榜

推荐主页

最新话题