資源簡介
實現了AT89C51單片機實時對SHT75溫濕度傳感器的溫度,濕度和露點的計算并顯示在LCD液晶顯示屏上。

代碼片段和文件信息
//SCK:串行時鐘,輸入口用于通信
//DATA:串行數據,雙向
//命令00000101表示濕度
//命令00000011表示溫度???命令發送后等待時間和相應獲取位數,約20/80/320ms??-->8/12/14?bit
#include
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?SHT75_DATA_PIN=P2^7;
sbit?SHT75_SCK_PIN=P2^6;
int?_data=0;
float?result_data=0temp=0;
void?SHT75_reset()//SHT75復位
{
uchar?i;
SHT75_DATA_PIN=1;
SHT75_SCK_PIN=0;
_nop_();_nop_();_nop_();_nop_();
for(i=0;i<10;i++)
{
SHT75_SCK_PIN=1;
_nop_();_nop_();_nop_();_nop_();
SHT75_SCK_PIN=0;
_nop_();_nop_();_nop_();_nop_();
}
}
void?Initialize_connect_SHT75()//初始話發送命令連接
{
// SHT75_reset();
SHT75_SCK_PIN=1;???????????
_nop_();
SHT75_DATA_PIN=0;
_nop_();
SHT75_SCK_PIN=0;
_nop_();_nop_();
SHT75_SCK_PIN=1;
_nop_();
SHT75_DATA_PIN=1;
_nop_();
SHT75_SCK_PIN=0;
}
void?send_byte(uchar?cmd)//發送一個字節由高位到低位循環發送
{
char?i;
for(i=7;i>=0;i--){
if(cmd&(0x01< SHT75_DATA_PIN=1;
}
else{
SHT75_DATA_PIN=0;
}
SHT75_SCK_PIN=1;??//發送一個電平信號脈沖,該位被送出
_nop_();_nop_();
SHT75_SCK_PIN=0;
}
_nop_();
return;
}
char?read_byte()//讀取一個字節由高位到低位接收
{
char?_data=0;
char?i;
SHT75_DATA_PIN=1;???//置高電平,釋放數據線
for(i=8;i>0;i--){
_data<<=1;???//左移一位,準備讀取下一位數據
SHT75_SCK_PIN=1; //置高電平
_nop_();_nop_();_nop_();_nop_();?//延遲4us
if(SHT75_DATA_PIN){???//讀取一個位
_data|=0x01;
}
SHT75_SCK_PIN=0; //拉低sck
_nop_();_nop_();
}
return?_data;
}
void?send_ACK()//ACK??確認字符
{
//SHT75_DATA_PIN=1;
SHT75_DATA_PIN=0;
_nop_();
SHT75_SCK_PIN=1;
_nop_();_nop_();
SHT75_SCK_PIN=0;
_nop_();
SHT75_DATA_PIN=1;??//拉高data釋放數據線
}
char?read_ACK()?//讀取確認字符
{
char?ack;
SHT75_DATA_PIN=1;
_nop_();
SHT75_SCK_PIN=1;
_nop_();_nop_();
ack=SHT75_DATA_PIN;
SHT75_SCK_PIN=0;
_nop_();
return?ack;
}
float?get_measure_data(uchar?cmd)//根據對應的指令,獲取相應的測量數據
{
Initialize_connect_SHT75();
send_byte(cmd);
if(read_ACK()){
return?-1;
}
while(SHT75_DATA_PIN!=0);?//延時等待data變低,之后便可讀數據
_data=read_byte(); //讀取高八位的數據
send_ACK();????????????//發送一個確認指令,確定已讀取了前八位數據
_data=(_data<<8)+read_byte();?//讀取后八位,并和前八位合并成為一個16進制的數據
send_ACK();? //發送一個確認符,表示接受完八位字符
read_byte(); //再讀取八位數據是CRC,用于數據校驗,可忽略校驗
send_ACK();
if(cmd==0x05){ //測濕度
temp=-4+(0.0405*_data)-(2.8e-6*_data*_data);
//對濕度進行溫度補償
result_data=(result_data-25)*(0.01+0.00008*_data)+temp;?????//由于每次先測量的是溫度,所以result_data的值計算前還是溫度的值
}
else?if(cmd==0x03){??//測溫度
result_data=-39.75+0.01*_data;
}
else{
return?-1;
}
return?result_data;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2894??2015-06-02?15:46??temp_humi\get_SHT75.c
?????文件???????6557??2015-06-02?15:49??temp_humi\get_SHT75.LST
?????文件???????7357??2015-06-02?15:49??temp_humi\get_SHT75.OBJ
?????文件?????104654??2015-06-01?16:04??temp_humi\Last?Loaded?SHT75溫濕度傳感器測試.DBK
?????文件???????1679??2015-06-02?11:36??temp_humi\LM041L_LCD.c
?????文件???????4174??2015-06-02?15:49??temp_humi\LM041L_LCD.LST
?????文件???????7360??2015-06-02?15:49??temp_humi\LM041L_LCD.OBJ
?????文件?????104654??2015-06-02?09:58??temp_humi\SHT75溫濕度傳感器測試.DSN
?????文件????????768??2015-06-02?15:49??temp_humi\SHT75溫濕度傳感器測試.PWI
?????文件??????????0??2015-05-30?16:59??temp_humi\SHT75溫濕度傳感器測試.SDF?(Can‘t?open)
?????文件??????25049??2015-06-02?15:49??temp_humi\temp_humi
?????文件???????2669??2015-06-02?15:48??temp_humi\temp_humi.c
?????文件??????13777??2015-06-02?15:49??temp_humi\temp_humi.hex
?????文件?????????72??2015-06-02?15:49??temp_humi\temp_humi.lnp
?????文件???????6094??2015-06-02?15:49??temp_humi\temp_humi.LST
?????文件??????26723??2015-06-02?15:49??temp_humi\temp_humi.M51
?????文件??????10411??2015-06-02?15:49??temp_humi\temp_humi.OBJ
?????文件???????1585??2015-06-02?15:48??temp_humi\temp_humi.Opt
?????文件???????1036??2015-06-02?15:49??temp_humi\temp_humi.plg
?????文件???????2084??2015-06-02?11:32??temp_humi\temp_humi.Uv2
?????文件???????1585??2015-06-02?11:36??temp_humi\temp_humi_Opt.Bak
?????文件???????2084??2015-06-02?11:32??temp_humi\temp_humi_Uv2.Bak
?????目錄??????????0??2015-06-02?21:26??temp_humi
-----------?---------??----------?-----??----
???????????????333266????????????????????23
- 上一篇:破解手機號碼去重排序軟件
- 下一篇:車標大全資源jpg
評論
共有 條評論