亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
溫濕度傳感器sht20 STC15單片機驅(qū)動程序
[打印本頁]
作者:
wxw51h
時間:
2020-7-15 16:31
標(biāo)題:
溫濕度傳感器sht20 STC15單片機驅(qū)動程序
溫濕度傳感器sht20驅(qū)動程序,IIC通訊,非常實用的C51驅(qū)動程序
單片機源程序如下:
#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; //數(shù)據(jù)線
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 應(yīng)答
{
sda=0;
delay2us();
scl=1;
delay2us();
scl=0;
delay2us();
}
void noACK (void) //非應(yīng)答
{
scl=1;
delay2us();
sda=0;
scl=0;
delay2us();
}
bit getACK(void) //4 接受應(yīng)答
{
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傳感器初始化&軟復(fù)位
{
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 傳感器測量分辨率設(shè)置
{ // 測量分辨率設(shè)置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;
}
/***********測量結(jié)果***********/
// 1 濕度測量
// 啟動>>發(fā)送地址+寫操作>>接受ACK>>濕度測量命令>>接受ACK>>啟動>>發(fā)送地址+讀操作>>接受ACK>>測量時間延時>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
// 計算結(jié)果。返回結(jié)果
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>>測量時間延時>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
// 計算結(jié)果。返回結(jié)果
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;
}
復(fù)制代碼
所有資料51hei提供下載:
sht20 driver.zip
(53.54 KB, 下載次數(shù): 283)
2020-7-15 16:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
hewayking
時間:
2020-12-8 10:43
我想問一個問題 負(fù)溫度怎么表示的
作者:
qq62582214
時間:
2021-5-22 19:39
感謝大佬提供的代碼
作者:
guizaishi
時間:
2021-9-22 13:14
哎,看錯了,單程AHT20了,SHT20太貴了用不起。。。。
作者:
dxfggggg
時間:
2021-10-27 08:31
請問SHT85能用這個程序嗎
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1