标题:
温湿度传感器sht20 STC15单片机驱动程序
[打印本页]
作者:
wxw51h
时间:
2020-7-15 16:31
标题:
温湿度传感器sht20 STC15单片机驱动程序
温湿度传感器sht20驱动程序,IIC通讯,非常实用的C51驱动程序
单片机源程序如下:
#include "STC15W4K32S4.h"
#include <intrins.h>
#include "sht20.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
// 测量分辨率 RH 12BIT、T 14BIT,测量时间RH 29ms、T 85ms
// 测量分辨率 RH 8BIT、T 12BIT,测量时间RH 4ms、T 22ms
// SCL 时钟,延时2us
sbit sda=P1^3; //数据线
sbit scl=P1^4; //时钟线
void start(void) //1 启动
{
sda=1;
delay2us();
scl=1;
delay2us();
sda=0;
delay2us();
scl=0;
delay2us();
}
void stop(void) //2 停止
{
sda=0;
delay2us();
scl=1;
delay2us();
sda=1;
delay2us();
scl=0;
delay2us();
}
void ACK (void) //3 应答
{
sda=0;
delay2us();
scl=1;
delay2us();
scl=0;
delay2us();
}
void noACK (void) //非应答
{
scl=1;
delay2us();
sda=0;
scl=0;
delay2us();
}
bit getACK(void) //4 接受应答
{
bit ack1=0;
sda=1;
delay2us();
scl=1;
delay2us();
ack1=sda;
scl=0;
delay2us();
return ack1;
}
void send(uchar DATA) //5 发送一字节
{
uchar Bit_Counter=8;
while(Bit_Counter>0)
{
sda=(bit)(DATA&0x80);
DATA<<=1;
scl=1;
delay2us();
scl=0;
delay2us();
Bit_Counter--;
}
}
unsigned char Read() //6 接受一字节
{
unsigned char x=0,y=8;
sda=1;
while(y>0)
{
scl=1;
delay2us();
if(sda)
x=x|0x01;
else
x=x&0xfe;
scl=0;
delay2us();
if(y>1)
x=x<<1;
y--;
}
return x;
}
void SHT2x_init() // 1传感器初始化&软复位
{
start();
send(add_w);
getACK();
send(RST_code);
getACK();
stop();
delay15ms();
sda=1;
scl=1;
}
unsigned char SHT2x_user_register() // 2传感器用户寄存器读取
{
uchar register_data;
start();
send(add_w);
getACK();
send(user_code_r);
getACK();
start();
send(add_r);
getACK();
register_data=Read();
noACK();
stop();
return register_data;
}
void SHT2x_Resolution() // 3 传感器测量分辨率设置
{ // 测量分辨率设置RH 8 BIT、T 12 BIT,测量时间 RH4ms、T22ms
start();
send(add_w);
getACK();
send(user_code_w);
getACK();
send(0x3b);
getACK();
getACK();
stop();
}
bit SHT2x_battery() // 4传感器低电压检测
{ // 此状态在每次测量后更新
uchar battery;
start();
send(add_w);
getACK();
send(user_code_r);
getACK();
start();
send(add_r);
getACK();
battery=Read();
noACK();
stop();
battery=(battery&0x40)>>6;
return battery;
}
/***********测量结果***********/
// 1 湿度测量
// 启动>>发送地址+写操作>>接受ACK>>湿度测量命令>>接受ACK>>启动>>发送地址+读操作>>接受ACK>>测量时间延时>>读取高位数据>>ACK>>读取地位数据>>NO_ACK>>停止
// 计算结果。返回结果
unsigned int RH_Result()
{
unsigned int RH_Data;
unsigned long RH=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;
return RH;
}
// 2 温度测量
// 启动>>发送地址+写操作>>接受ACK>>温度测量命令>>接受ACK>>启动>>发送地址+读操作>>接受ACK>>测量时间延时>>读取高位数据>>ACK>>读取地位数据>>NO_ACK>>停止
// 计算结果。返回结果
unsigned int T_Result()
{
unsigned int T_Data;
unsigned long T=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;
return T;
}
复制代码
所有资料51hei提供下载:
sht20 driver.zip
(53.54 KB, 下载次数: 283)
2020-7-15 16:30 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
hewayking
时间:
2020-12-8 10:43
我想问一个问题 负温度怎么表示的
作者:
qq62582214
时间:
2021-5-22 19:39
感谢大佬提供的代码
作者:
guizaishi
时间:
2021-9-22 13:14
哎,看错了,单程AHT20了,SHT20太贵了用不起。。。。
作者:
dxfggggg
时间:
2021-10-27 08:31
请问SHT85能用这个程序吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1