资源简介
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
- 上一篇:数值分析知识点
- 下一篇:清华大学数据结构试题及答案
评论
共有 条评论