您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > SHT20最新数字温湿度传感器芯片-程序
/*STC15L系列单片机11.0592M晶振、3.3V20150612mos*/#include<reg52.h>#include<intrins.h>#defineadd_w0x80//传感器地址+写操作#defineadd_r0x81//传感器地址+读操作#defineT_code0xe3//温度测量指令#defineRH_code0xe5//湿度测量指令#defineuser_code_w0xe6//用户寄存器写指令#defineuser_code_r0xe7//用户寄存器读指令,可读电池电压是否小于2.25V。(测量后才可查看)#defineRST_code0xfe//软复位,寄存器服务。#defineucharunsignedchar#defineuintunsignedintsbitsda=P1^3;//数据线sbitscl=P1^4;//时钟线/***********延时程序***********///11.0592MHz1T时钟周期0.09042us机器周期0.09042us,根据当前配置计算延时程序。//测量分辨率RH12BIT、T14BIT,测量时间RH29ms、T85ms//测量分辨率RH8BIT、T12BIT,测量时间RH4ms、T22ms//SCL时钟,延时2usvoiddelay85ms(void)//误差-0.000000000011us{unsignedchara,b,c;for(c=97;c>0;c--)for(b=56;b>0;b--)for(a=85;a>0;a--);_nop_();//ifKeil,requireuseintrins.h_nop_();//ifKeil,requireuseintrins.h}voiddelay29ms(void)//误差-0.072337962967us{unsignedchara,b,c;for(c=161;c>0;c--)for(b=221;b>0;b--)for(a=3;a>0;a--);_nop_();//ifKeil,requireuseintrins.h}voiddelay15ms(void)//误差-0.000000000002us{unsignedchara,b;for(b=220;b>0;b--)for(a=187;a>0;a--);_nop_();//ifKeil,requireuseintrins.h_nop_();//ifKeil,requireuseintrins.h}/*voiddelay4ms(void)//误差-0.072337962963us{unsignedchara,b;for(b=89;b>0;b--)for(a=247;a>0;a--);}voiddelay22ms(void)//误差-0.036168981484us{unsignedchara,b,c;for(c=9;c>0;c--)for(b=170;b>0;b--)for(a=78;a>0;a--);_nop_();//ifKeil,requireuseintrins.h_nop_();//ifKeil,requireuseintrins.h}*/voiddelay2us(void)//误差-0.010706018519us{unsignedchara,b;for(b=1;b>0;b--)for(a=8;a>0;a--);}/***********时序程序***********///传感器基本时序程序。//1启动//2停止//3应答&非应答//4接收应答//5发送一字节//6接收一字节//1启动voidstart(void){sda=1;delay2us();scl=1;delay2us();sda=0;delay2us();scl=0;delay2us();}//2停止voidstop(void){sda=0;delay2us();scl=1;delay2us();sda=1;delay2us();scl=0;delay2us();}//3应答&非应答voidACK(void){sda=0;delay2us();scl=1;delay2us();scl=0;delay2us();}voidnoACK(void){scl=1;delay2us();sda=0;scl=0;delay2us();}//4接收应答bitgetACK(void){bitack1=0;sda=1;delay2us();scl=1;delay2us();ack1=sda;scl=0;delay2us();returnack1;}//5发送一字节voidsend(ucharDATA){ucharBit_Counter=8;while(Bit_Counter>0){sda=(bit)(DATA&0x80);DATA<<=1;scl=1;delay2us();scl=0;delay2us();Bit_Counter--;}}//6接收一字节unsignedcharRead(){unsignedcharx=0,y=8;sda=1;while(y>0){scl=1;delay2us();if(sda)x=x|0x01;elsex=x&0xfe;scl=0;delay2us();if(y>1)x=x<<1;y--;}returnx;}/*1**********传感器初始化&软复位*********//*2**********传感器用户寄存器读取*******//*3**********传感器测量分辨率设置*******//*4**********传感器低电压检测***********///1传感器初始化&软复位voidSHT2x_init(){start();send(add_w);getACK();send(RST_code);getACK();stop();delay15ms();sda=1;scl=1;}//2传感器用户寄存器读取unsignedcharSHT2x_user_register(){ucharregister_data;start();send(add_w);getACK();send(user_code_r);getACK();start();send(add_r);getACK();register_data=Read();noACK();stop();returnregister_data;}//3传感器测量分辨率设置//测量分辨率设置RH8BIT、T12BIT,测量时间RH4ms、T22msvoidSHT2x_Resolution(){start();send(add_w);getACK();send(user_code_w);getACK();send(0x3b);getACK();getACK();stop();}//4传感器低电压检测//此状态位在每次测量后更新bitSHT2x_battery(){ucharbattery;start();send(add_w);getACK();send(user_code_r);getACK();start();send(add_r);getACK();battery=Read();noACK();stop();battery=(battery&0x40)>>6;returnbattery;}/***********测量结果***********///1湿度测量//启动》发送地址+写操作》接收ACK》湿度测量命令》接收ACK》启动》发送地址+读操作》...//...接收ACK》测量时间延时》读取高位数据》ACK》读取低位数据》NO_ACK》停止。//计算结果。返回结果。unsignedintRH_Result(){unsignedintRH_Data;unsignedlongRH=0;start();send(add_w);getACK();send(RH_code);getACK();start();send(add_r);getACK();delay29ms();RH_Data=Read();ACK();RH_Data=RH_Data<<8;RH_Data=RH_Data|Read();noACK();stop();RH_Data=RH_Data&0xfffc;RH=RH_Data*12500L;RH=RH>>16;RH=RH-600;returnRH;}//2温度测量//启动》发送地址+写操作》接收ACK》温度测量命令》接收ACK》启动》发送地址+读操作》...//...接收ACK》测量时间延时》读取高位数据》ACK》读取低位数据》NO_ACK》停止。//计算结果。返回结果。unsignedintT_Result(){unsignedintT_Data;unsignedlongT=0;start();send(add_w);getACK();send(T_code);getACK();start();send(add_r);getACK();delay85ms();T_Data=Read();ACK();T_Data=T_Data<<8;T_Data=T_Data|Read();noACK();stop();T_Data=T_Data&0xfffE;T=T_Data*17572L;T=T>>16;T=T-4685;returnT;}/***********主程序***********/voidmain(){uintT,RH,B1;//i=RH_Result();//i=T_Result();SHT2x_init();SHT2x_Resolution();B1=SHT2x_user_register();T=T_Result();RH=RH_Result();SHT2x_battery();while(1);}
本文标题:SHT20最新数字温湿度传感器芯片-程序
链接地址:https://www.777doc.com/doc-6700324 .html