《SHT7X、2X使用笔记》由会员分享,可在线阅读,更多相关《SHT7X、2X使用笔记(20页珍藏版)》请在金锄头文库上搜索。
1、温湿度传感器SHT7X和SHT2X系列的个人笔记:官方资料下载:http:/ int i,进行/求模运算时:例:22000/320,结果不正确,而改为22000.0/320.0时结果正确。恕笔者才疏学浅,学校时没好好听课,不知此现象具体原因。若定义菲整形如float i,怎么都正确。自己找资料看吧。在此对后面计算编写出错时,有类似现象的作下参考。以下附上SHT71和SHT21完整调试程序,全部全局变量:(使用MAX7219驱动共阴数码管显示)(不含寄存器操作,局部注释)SHT21:#include#include#include#include#include#define uint unsi
2、gned int #define uchar unsigned charuchar code table=/共阴数码管:0、1、2、3、4、5、6、7、8、9、-、不显示;0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x01,0;uint i,ii,yyi,crc1;uchar vv,crc0,imm,error=0;float TEMP=0,HUMI=0;sbit DIN=P20; /MAX7219接口定义,数据总线sbit LOAD=P21; /MAX7219接口定义,片选位sbit CLK=P22; /MAX7219接口定义,时钟信
3、号端sbit SCL_sht=P00; /SHT21接口定义,时钟信号端sbit SDA_sht=P01; /SHT21接口定义,数据总线sbit TES=P26; /正常一次测量完成信号,低电平有效,外接一LEDsbit ERR=P27; /故障位定义,低电平有效,外接一LED;void MAX7219_init(); /MAX7219初始void LEE(uint e); /MAX7219子函数,SPI方式void MM(); /显示数据送往MAX7219void EEi_sht(); /SHT2x主函数void SHT2x(uchar yi); /SHT2x子函数void write_s
4、ht(uchar yii); /IIC_WRITEvoid read_sht(bit x_ack); void SAT_sht(); void SOP_sht(); void soft_rest_sht();void crc_8(); /CRC校验;生成多项式:P(x)=x8+x5+x4+1=0x131;void delay();void init();void main() init(); while(1) void init() MAX7219_init(); /MAX7219初始 TMOD=0x01; /定时器0初始,方式1 EA=1; ET0=1; TR0=1; TH0=0; TL0=
5、0;void MAX7219_init() LEE(0xff01); LEE(0xf900); LEE(0xfa0e); /段电流设定 LEE(0xfb07); LEE(0xfc01); LEE(0xff00);void LEE(uint e) uint zz; LOAD=0; for(zz=0x8000;zz0;zz=1) if(zz&e) DIN=1; else DIN=0; _nop_(); CLK=1; CLK=0; LOAD=1; void MM() uint TEMP_,HUMI_; uchar sign_; TEMP_=fabs(TEMP)*10; HUMI_=HUMI*10;
6、if(TEMP=0) sign_=1; else sign_=0; if(!error) if(TEMP=100) LEE(tableTEMP_%10000/1000+0xf100); else LEE(table10+sign_+0xf100); LEE(tableTEMP_%1000/100+0xf200); LEE(tableTEMP_%100/10+0xf300+0x80); /加小数点位 LEE(tableTEMP_%10+0xf400); LEE(tableHUMI_%10000/1000+0xf500); LEE(tableHUMI_%1000/100+0xf600); LEE(
7、tableHUMI_%100/10+0xf700+0x80); /加小数点位 LEE(tableHUMI_%10+0xf800); else LEE(0xf14f); LEE(0xf277); LEE(0xf377); LEE(0xf47e); LEE(0xf501); LEE(0xf601); LEE(0xf701); LEE(0xf801); void EEi_sht() SHT2x(0xe3); /测温 if(crc1!=crc0) if(!(error&0x02) error+=0x01; else yyi&=0xfffc; TEMP=yyi*175.72/0x10000-46.85;
8、 SHT2x(0xe5); /测湿 if(crc1!=crc0|!yyi) if(!(error&0x02) error+=0x01; else error&=0x0c; TES=0; yyi&=0xfffc; HUMI=yyi*125.0/0x10000-6; TES=1; void SHT2x(uchar yi) if(error&0x03) /若有错误重新唤醒IIC或软启动SHT21 soft_rest_sht(); else SAT_sht(); write_sht(0x80); write_sht(yi); SAT_sht(); write_sht(0x81); SCL_sht=1; for(ii=0;ii65532;ii+)/限时等待测量完成 delay(); if(SCL_sht) break; if(SCL_sht) yyi=0; read_sht(1); yyi=vv; yyi=8; read_sht(1); yyi+=vv; crc1=0; crc1=yyi; crc_8(); read_sht(0); crc0=vv;