資源簡介
AHT10溫濕度驅動程序。STM32正點原子模擬IIC驅動,可以參考邏輯使用,頭文件未上傳,,,,,

代碼片段和文件信息
#include?“aht10.h“
#include?“myiic.h“
#include?“timer.h“
#include?“delay.h“
#include?“usart.h“
u8?READstatus;
static?u16?AHT10DelayCount;
float?TempOldfRH;
u8?AHTstatus;
u32?RHdata;
u32?TEMPdata;
uint64_t?REVdata;
u16?TIMcount;
/*************************
函數名:AHT10Init()
函數說明:AHT10傳感器初始化程序
輸入:無
輸出:
其他:
*************************/
void?AHT10Init()
{
u8?Initcount;
Initcount=0x0;
IIC_Init();
delay_ms(200);
IIC_Start();
IIC_Send_Byte(0x70); //寫
IIC_Wait_Ack();
IIC_Send_Byte(0xe1); //寫系統配置寄存器,初始化命令:0xe1
IIC_Wait_Ack();
IIC_Send_Byte(0x08);
IIC_Wait_Ack();
IIC_Send_Byte(0x00);
IIC_Wait_Ack();
IIC_Stop();
delay_ms(500);
while(?(ReadAHT10_Statue()&0x68)!=0x08?) // 設備閑,NOR模式,已校準,跳出循環
{
AHT10SofeReset();
delay_ms(500);
IIC_Start();
IIC_Send_Byte(0x70); //寫
IIC_Wait_Ack();
IIC_Send_Byte(0xe1); //寫系統配置寄存器,初始化命令:0xe1
IIC_Wait_Ack();
IIC_Send_Byte(0x08);
IIC_Wait_Ack();
IIC_Send_Byte(0x00);
IIC_Wait_Ack();
IIC_Stop();
delay_ms(500);
Initcount++;
if(Initcount>5)?break;
}
AHTstatus=0x0;
REVdata=0x0;
}
/*************************
函數名:u8?ReadAHT10_Statue()
函數說明:AHT10傳感器狀態寄存器讀取
輸入:無
輸出:AHT10狀態寄存器
其他:
*************************/
u8?ReadAHT10_Statue()
{
u8?AHT10Status;
IIC_Start();
IIC_Send_Byte((0x38<<1)+1); ?//讀
IIC_Wait_Ack();
AHT10Status=IIC_Read_Byte(0);?
IIC_Stop();
return?AHT10Status;
}
/*************************
函數名:AHT10_Star_measure()
函數說明:AHT10傳感器啟動測量命令
輸入:無
輸出:
其他:
*************************/
u8?AHT10_Star_measure()
{
IIC_Start();
IIC_Send_Byte(0x70); //寫
IIC_Wait_Ack();
// if(IIC_Wait_Ack()==0x01)?{IIC_Stop(); return?0; }
IIC_Send_Byte(0xac);?//發觸發指令
IIC_Wait_Ack();
// if(IIC_Wait_Ack()==0x01)?{IIC_Stop(); return?0; }
IIC_Send_Byte(0x33);??//以下是發送觸發測量的固定指令0x33
IIC_Wait_Ack();
// if(IIC_Wait_Ack()==0x01)?{IIC_Stop(); return?0; } //發送完0X33后,傳感器無應答?????
IIC_Send_Byte(0x00);
IIC_Wait_Ack();
IIC_Stop();
return?1;
}
/*************************
函數名:Temp_RH_Read()
函數說明:接收AHT10傳感器溫濕度數據
輸入:
輸出:傳感器數據
其他:
*************************/
void?Temp_RH_Read()
{
IIC_Start();
IIC_Send_Byte(0x71); //0x70地址+1讀
if(IIC_Wait_Ack()==0x01)?{IIC_Stop(); return?; }
AHTstatus=IIC_Read_Byte(1); //讀狀態寄存器
//---------receive?5byte?data
REVdata=0x0;
REVdata|=IIC_Read_Byte(1);? //1
REVdata<<=8;
REVdata|=IIC_Read_Byte(1); //2
REVdata<<=8;
REVdata|=IIC_Read_Byte(1); //3
REVdata<<=8;
REVdata|=IIC_Read_Byte(1); //4
REVdata<<=8;
REVdata|=IIC_Read_Byte(0); //5
IIC_Stop();
RHdata=REVdata>>20;
TEMPdata=REVdata&0xfffff; //Bit0~Bit20是溫度數據
}
/*************************
函數名:ADT10_Calulate()
函數說明:計算AHT10傳感器數據,得到溫度與濕度
輸入:
返回:溫度值,單位攝氏度
其他:
*************************/
float?ADT10_Calulate()
{
u8?u8cnt;
float?ftemp;
u16?Now_TIMcount;
if(READstatus==0x0)?
{
while((ReadAHT10_Statue()&0x80)==0x80)?
{
AHT10Init(); //出現錯誤,重啟AHT
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4839??2019-09-23?13:26??aht10.c
?????文件????????450??2019-09-18?16:37??aht10.h
-----------?---------??----------?-----??----
?????????????????5289????????????????????2
- 上一篇:數值分析知識點
- 下一篇:清華大學數據結構試題及答案
評論
共有 條評論