標題:
溫濕度傳感器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 發(fā)送一字節(jié)
{
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 接受一字節(jié)
{
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傳感器低電壓檢測
{ // 此狀態(tài)在每次測量后更新
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 濕度測量
// 啟動>>發(fā)送地址+寫操作>>接受ACK>>濕度測量命令>>接受ACK>>啟動>>發(fā)送地址+讀操作>>接受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 溫度測量
// 啟動>>發(fā)送地址+寫操作>>接受ACK>>溫度測量命令>>接受ACK>>啟動>>發(fā)送地址+讀操作>>接受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.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1