欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
溫濕度傳感器sht20 STC15單片機(jī)驅(qū)動(dòng)程序
[打印本頁(yè)]
作者:
wxw51h
時(shí)間:
2020-7-15 16:31
標(biāo)題:
溫濕度傳感器sht20 STC15單片機(jī)驅(qū)動(dòng)程序
溫濕度傳感器sht20驅(qū)動(dòng)程序,IIC通訊,非常實(shí)用的C51驅(qū)動(dòng)程序
單片機(jī)源程序如下:
#include "STC15W4K32S4.h"
#include <intrins.h>
#include "sht20.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
// 測(cè)量分辨率 RH 12BIT、T 14BIT,測(cè)量時(shí)間RH 29ms、T 85ms
// 測(cè)量分辨率 RH 8BIT、T 12BIT,測(cè)量時(shí)間RH 4ms、T 22ms
// SCL 時(shí)鐘,延時(shí)2us
sbit sda=P1^3; //數(shù)據(jù)線
sbit scl=P1^4; //時(shí)鐘線
void start(void) //1 啟動(dòng)
{
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 傳感器測(cè)量分辨率設(shè)置
{ // 測(cè)量分辨率設(shè)置RH 8 BIT、T 12 BIT,測(cè)量時(shí)間 RH4ms、T22ms
start();
send(add_w);
getACK();
send(user_code_w);
getACK();
send(0x3b);
getACK();
getACK();
stop();
}
bit SHT2x_battery() // 4傳感器低電壓檢測(cè)
{ // 此狀態(tài)在每次測(cè)量后更新
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;
}
/***********測(cè)量結(jié)果***********/
// 1 濕度測(cè)量
// 啟動(dòng)>>發(fā)送地址+寫(xiě)操作>>接受ACK>>濕度測(cè)量命令>>接受ACK>>啟動(dòng)>>發(fā)送地址+讀操作>>接受ACK>>測(cè)量時(shí)間延時(shí)>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
// 計(jì)算結(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 溫度測(cè)量
// 啟動(dòng)>>發(fā)送地址+寫(xiě)操作>>接受ACK>>溫度測(cè)量命令>>接受ACK>>啟動(dòng)>>發(fā)送地址+讀操作>>接受ACK>>測(cè)量時(shí)間延時(shí)>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
// 計(jì)算結(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 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
hewayking
時(shí)間:
2020-12-8 10:43
我想問(wèn)一個(gè)問(wèn)題 負(fù)溫度怎么表示的
作者:
qq62582214
時(shí)間:
2021-5-22 19:39
感謝大佬提供的代碼
作者:
guizaishi
時(shí)間:
2021-9-22 13:14
哎,看錯(cuò)了,單程AHT20了,SHT20太貴了用不起。。。。
作者:
dxfggggg
時(shí)間:
2021-10-27 08:31
請(qǐng)問(wèn)SHT85能用這個(gè)程序嗎
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1