am2301驱动程序
AM2301 是国产的温湿度传感器,想较瑞士的 SHT1X ,价格低廉,但性能有所降低,在对 性能 要求不是很高的情况下,可以考虑用该款温湿度传感器。 单片机对 AM2301 的操作非常简单,通过 AM2301 的数据手册,便可写出访问它的程 序,例程如下,期望能达到抛砖引玉的目的,以 AVR 系列的 Mega16 为例: 一、头文件 /****************************************************************************** ***************** 文件:am2301.h 作者:wxxujian 用途:温湿度传感器 AM2301(又名:DHT21)的驱动程序 MCU: AVR Mega16 晶振:8MHz 编译器:WinAVR2010 版本:1.0(创建日期:2010-7-27) 能正常显示湿度,仅能显示正温度 1.1(修改日期:2010-7-28) 能正常显示湿度和温度(正、负温度均可) 日期:2010-7-27 ******************************************************************************* ****************/ #include #ifndef AM2301_H #define AM2301_H ////////////////////////////// 宏定义(须根据实际情况而修改) /////////////////////////////// //功能:定义与 AM2301 的数据位相连的单片机的端口及数据位 //注意:这些宏须随着实际的硬件电路情况而修改 #define AM2301_DATA_DDR DDRD #define AM2301_DATA_PORT PORTD #define AM2301_DATA_PIN PIND #define AM2301_DATA_BIT PD2 ////////////////////////////// 宏定义(结束) /////////////////////////////// ////////////////////////////// 函数声明 ////////////////////////////////////////////////// //说明:共 2 个函数,分别是: // AM2301_CollectCharData(int *pvHumidity,int *pvTemperature) // AM2301_CollectFloatData(float *pvHumidity,float *pvTemperature) //详细内容如下: /******************************************************************************** 函数名:AM2301_CollectCharData(int *pvHumidity,int *pvTemperature) 功 能:获得数据(湿度、温度) ,获得的数据保存于形参所提供的指针所指向的变量中 返回值: 0:数据校验正确; 1:数据校验错误 2:获取数据错误 3: 等待响应信号错误 参 数: pvHumidity: 湿度变量的指针,用于保存采集到的湿度,数据类型为:signed char,得到的 数据仅为湿度的整数部分,小数部分自动舍弃 pvTemperature:温度变量的指针,用于保存采集到的温度,数据类型为:signed char ,得到 的数据仅为温度的整数部分,小数部分自动舍弃 说 明:建议执行此函数的间隔为 2 秒,绝不能小 1 秒。若间隔时间很长,建议采集 2 次, 以 2 次为准 当发生错误,即返回值为 1、2 或 3 时,应间隔 2 秒后重新读取数据 注 意:因为:WinAVR 默认将 char 视为 unsigned char 所以:参数必须定义为 signed char,-128 #include “common.h“ #include “display.h“ ////////////////////////////// 宏定义(函数样式) /////////////////////////////////////////// //功能:操作与 am2301 的数据位相连的单片机端口与相应位,包括:输入、输出、置 1 和 清 0 //注意:这些宏只供此文件使用 #define SetDataBitOutput() SetBit(AM2301_DATA_DDR,AM2301_DATA_BIT) #define SetDataBit() ClearBit(AM2301_DATA_DDR,AM2301_DATA_BIT) #define SetDataBit() SetBit(AM2301_DATA_PORT,AM2301_DATA_BIT) #define ClearDataBit() ClearBit(AM2301_DATA_PORT,AM2301_DATA_BIT) #define TestDataBit() TestBit(AM2301_DATA_PIN,AM2301_DATA_BIT) ////////////////////////////// 宏定义(结束) /////////////////////////////////////////// ////////////////////////////// 函数实现 //////////////////////////////////////////////////