(完整word版)AM2301温湿度传感器模块_第1页
(完整word版)AM2301温湿度传感器模块_第2页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AM2301 温湿度传感器模块AM230数字温湿度传感器是一各包括有数字校准输出的温湿度传感器。它采用独特的数字采集模块和高新温湿度采集传感技术,可以确保产品可靠性高以及 稳定性好。该款传感器具有响应快、抗干扰力强、性价比高、品质卓越等优点。 以及超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用 的最佳选则。9AM2301 引脚图AM2301 各引脚说明表 3-7 AM2301 引脚引脚颜色名称注释1红色VDD供电3.3-5.5VDC2黄色SDA串行数据,单总线3黑色GND接地,电源负极4NC空脚,请悬空(不要接Vcc或GndGNJD图 3-10 AM2301 引脚图AM2

2、301 技术参数表 3-8 AM2301 技术参数参数条件MinTypMax单位湿度分辨率0.1%RH16Bit重复性1%RH精度25C3%RH0-50C5 k%RH互换性可完全互换采样周期12S响应时间1/e(63%)25C,1m/s 空气2S迟滞0.3人%RH长期稳定性典型值1%RH/yr温度分辨率0.1c16Bit重复性0.5c精度1c里程范围-4080c响应时间1/e(63%)620SAM2301 驱动电路图 3-11 AM2301 驱动电路图MCUfDHT21G:i:tic温湿度传感器模块流程设计用户主机(MCU发送一次开始信号后,AM2301自动从休眠模式转换到高速模 式。等待主机

3、开始,信号发送后,AM230发送响应信号,送出40比特的数据,发送 数据结束之后触发一次信号采集,对外部环境进行数据采集,采集结束传感器自 动转入休眠模式,直到下一次通信信号的来临。此时AM230的SDA数据线由上拉 电阻拉高,一直保持高电平,且AM230的SDAH脚处于输入状态,时刻号,图 4-10 温湿度传感器流程图检测外部 信号。 一旦接收到主机发送的信号, 再次进入采集状态, 对外部数据进行一次采 集。整个过程流程图如下:1602 LCD 显示屏测试根据第三章说明的LCD硬件连线要求,将屏幕的14个接口按要求分别连接 至单片机的各端口,确认无误后,个单片机上电,并将编完的程序通过STC

4、SP软件烧入到单片机中,连线图如下:图 5-3 LCD1602 连线图给单片机上电之后,屏幕显示如下:图 5-4 LCD1602 显示效果该LCD显示屏能正常显示预期设置字幕AM2301 温湿度传感器测试根据温湿度传感器驱动电路,实物连接图如下:图 5-7 AM2301 连线图给单片机上电,则可在LCD屏幕上得到如下数据:图 5-8 AM2301 采集数据LCD屏幕第一行显示当前室内湿度情况,第二行显示当前室内温度情况,若 用吹风机对其吹风,则温湿度会相应变化。附录主要程序源代码:1.REG52.H/*-REG52.HHeader file for generic 80C52 and 80C3

5、2 microco ntroller.Copyright (c) 1988 -2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.、- */#ifndef _REG52_H_#defi ne _REG52_H_/* BYTE Registers */sfr P0=0 x80;sfr P1=0 x90;sfr P2=0 xA0;sfr P3=0 xB0;sfr PSW=0 xD0;sfr ACC=0 xE0;sfr B=0 xF0;sfr SP=0 x81;sfr DPL=0 x82;sfr DPH=0 x8

6、3;sfr PCON =0 x87;sfr TCON =0 x88;sfr TMOD=0 x89;sfr TL0=0 x8A;sfr TL1=0 x8B;sfr TH0=0 x8C;sfr TH1=0 x8D;sfr IE=0 xA8;sfr IP=0 xB8;sfr SCON =0 x98;sfr SBUF=0 x99;/*8052 Exte nsio ns */sfr T2CON = 0 xC8;sfr RCAP2L = OxCA;sfr RCAP2H = OxCB;sfr TL2 = 0 xCC;sfr TH2 = 0 xCD;I* BIT Registers *II* PSW*Isbi

7、t CY=PSWA7;sbit AC=PSWA6;sbit F0=PSWA5;sbit RS1=PSWA4;sbit RS0=PSWA3;sbit OV=PSWA2;sbit P=PSWAO; II8052 onlyI* TCON*Isbit TF1=TCONA7;sbit TR1=TCONA6;sbit TF0=TCONA5;sbit TR0=TCONA4;sbit IE1=TCONA3;sbit IT1=TCONA2;sbit IE0=TCONA1;sbit IT0=TCONAO;I* IE *Isbit EA=IEA7;sbit ET2=IEA5; II8052 onlysbit ES=

8、IEA4;sbit ET1=IEA3;sbit EX1=IEA2;sbit ET0 1 =IEA1;sbit EXO=IEAO;I* IP *Isbit PT2=05;sbit PS=04;sbit PT1=IPA3;sbit PX1=IPA2;sbit PTO=IPA1;sbit PXO=BO;I* P3 */sbit RD= P3A7;sbit WR=P3A6;sbit T1:卩3人5;sbit T0:P3A4;sbit INT1 =:P3A3;sbit INT0 =:P3A2;sbit TXD=P3A1;sbit RXD=P3A0;/* SCON*/sbit SM0=SCONA7;sbi

9、t SM1=SCONA6;sbit SM2=SCONA5;sbit REN=SCONA4;sbit TB8:=SCONA3;sbit RB8=SCONA2;sbit TI=SCONA1;sbit RI=SCONA0;/* P1 */sbit T2EX=P1A1; / 8052 onlysbit T2=:P1A0; / 8052 only/* T2CON*/sbit TF2=T2CONA7;sbit EXF2=T2CONA6;sbit RCLK=T2CONA5;sbit TCLK=T2CONA4;sbit EXEN2=T2CONA3;sbit TR2=T2CONA2;sbit C_T2=T2CO

10、NA1;sbit CP_RL2 =T2CONA0;#en dif2N TRINS.H/*-INTRINS.HIntrin sic functions for C51.Copyright (c) 1988 -2004 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.*/_nop_ (void);_testbit_ (bit);exter n un signed char _cror_ exter n unsig ned int _iror_ exter n unsig ned long _lror_ extern

11、unsig ned char _crol_ exter nun sig ned int _irol_(un sig ned char, un sig nedchar);(un sig ned int, un sig ned char);(un sig ned long, un sig nedchar);(un sig ned char, un sig nedchar);(un sig ned int, un sig ned char);exter n un sig ned long _lrol_(un sig ned long, un sig ned char);exter n un sig

12、ned char _chkfloat_(float);push_(un sig ned char _sfr);pop_(un sig ned char _sfr);#en dif3.STDIO.H/*-STDIO.HPrototypes for sta ndard I/O functions.Copyright (c) 1988 -2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.- */#ifndef _STDIO_H_#defi ne _STDIO_H_f1#ifndef EOF#defi ne EOF

13、 -1#en dif#ifndef NULL#defi ne NULL (void *) 0)#en dif#ifndef _SIZE_T#defi ne _SIZE_Ttypedef un sig ned int size_t;#en dif#ifndef _INTRINS_H_#defi ne _INTRINS_Hexter nvoidexter n bitexter nvoidexter nvoid#pragma SAVE#pragma REGPARMSexter n char _getkey (void);exter n char getchar (void);exter n char

14、 un getchar (char);exter n char putchar (char);exter n int printf(const charexter n int spri ntf (char *, const char *,.);exter n int vpri ntf (const char *, char *);exter n int vspri ntf (char *, const char *, char *); exter n char *gets (char *, int n);exter n int sca nf (const char *,.);exter n i

15、nt ssca nf (char *, const char *,.);exter n int puts (const char *);#pragma RESTORE#en dif4.LCD1602.H#in clude vintrin s.h#ifndef _LCD1602_H_H#defineLCD1602 H H一 #defi ne uchar un sig ned char#defi ne uint un sig ned intfJr Jr/-函数声明-void delayms(uchar z);void writecmd(uchar com);void writedata(uchar

16、 dat);void ini t_LCD();/-函数声明结束-/1602 端口定义sbit RS = P2A4 ; /数据命令选择端(H/L ) sbit RW = P2A5 ;/ 读写选择端(H/L ) sbitE=P2A6;/*/自定义的字符(5X8)uchar code tab1=0 x03,0 x05,0 x19,0 x19,0 x19,0 x05,0 x03,0 x00; 小喇叭uchar code tab2=0 x08,0 x0f,0 x12,0 x0f,0 x0a,0 x1F,0 x02,0 x02,;年uchar code tab3=0 x0f,0 x09,0 x0f,0 x

17、09,0 x0f,0 x09,0 x11,0 x00; 月uchar code tab4=0 x00,0 x1F,0 x11,0 x1F,0 x11,0 x11,0 x1F,0 x00; 日uchar code tab5=0 x18,0 x18,0 x07,0 x08,0 x08,0 x08,0 x07,0 x00;/C(温度符号)*/void lcd_pos(uchar pos)/ 设定显示位置lcd_wcmd(pos | 0 x80);void delayms(uchar z)uint i,j;for(i=z;i0;i -)for(j=100;j0;j -);void writecmd(u

18、char com)/ 写指令RS=0;RW=0;E=0;delayms(1);P0=com;delayms(1);E=1;delayms(1);void writedata(uchar dat)/ 写数据RS=1;RW=0;E=0;delayms(1);P0=dat;delayms(1);E=1;delayms(l);E=0;/*/延时函数*写汉字编码到 CGRAM 函数* void writetab()un sig ned char i ;lcd_wcmd(0 x40);for (i = 0 ; i 8 ; i+)lcd_wdat(mytab1 i );*/void ini t_LCD()d

19、elayms(15);writecmd(0 x38);delayms(5);writecmd(0 x38);delayms(5);writecmd(0 x38);delayms(5);writecmd(0 x38);delayms(5);writecmd(OxOI);delayms(5);writecmd(0 x06);delayms(5);writecmd(OxOc);delayms(5);Icd_pos(0 x4d);lcd_wdat(0 x00);*/写 CGRAM/初始化 1602/不检测忙信号/不检测忙信号/不检测忙信号/显示模式设置/显示清屏/显示光标移动设置/显示开及光标设置 1

20、自定义字符写入 CGRAM显示自定义字符#en dif5.主程序#in clude #in clude vintrin s.h#in clude #in elude lcd1602.htypedef un sig ned char U8;/* 无符号 8 位整型变量*/typedef sig nedchar S8;/* 有符号 8 位整型变量*/typedef un sig ned intU16;/* 无符号 16 位整型变量*/*1wwritetab(); 1Jdelay(5);typedef sig nedintS16;/* 有符号 16 位整型变量*/typedef un sig ned

21、 long U32;/* 无符号 32 位整型变量*/typedef sig nedlong S32;/*有符号 32 位整型变量*/typedef floatF32;/* 单精度浮点数(32 位长度)*/typedef doubleF64;/*双精度浮点数(64 位长度)*/#defi ne uchar un sig ned char#define uint unsigned int/- 10 口定义- /sbit DHT = P2A0 ;/AM2301 端口定义/-全局变量-/bit flagtemp;/ 温度正负标志位,k U8count,bit flagse ndtemp;/发送温度的

22、标志位U8 U8FLAG;U8 U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U16 DHTData1,DHTData2;U8 outdata5; 定义发送的字节数U8 in data5;U8 count, count_r=0;U8 str5;U8 data tab6=0 x00,0 x00,0 x00,0 x0

23、0,0 x00,0 x00;/ 存储温湿度数据U8 code dis1=Humdity:% ;U8 code dis2=Temper:c ;/*函数名称:延时子程序*void Delay(U16 j)U8 i;for(;j0;j -)for(i=0;i27;i+);void Delay_10us(void) 延时 10uSU8 i;i-;i-;i-;i-;i-;i-;/*函数名称:读温湿度字节函数功能:读取温湿度每个字节说明:无*/void COM(void)/ 读字节U8 i;for(i=0;i8;i+)U8FLAG=2;while(!DHT)&U8FLAG+);Delay_10us

24、();Delay_10us();Delay_10us();U8temp=0;if(DHT)U8temp=1;U8FLAG=2; while(DHT) &U8FLAG+);超时则跳出 for 循环if(U8FLAG=1)break;判断数据位是 0 还是 1/如果高电平高过预定0 高电平值则数据位为1U8comdata=1;U8comdata|=U8temp;/0/end i/-/-II-湿度读取子程序 -/-II-以下变量均为全局变量 -II-温度高 8 位=U8T_data_H II-温度低 8 位=U8T_data_L II-湿度高 8 位=U8RH_data_H -II-湿度低

25、8 位=U8RH_data_L -II-校验 8 位 =U8checkdata II-调用相关子程序如下-II- Delay();, Delay_10us();,COM();II-I*函数名称:温湿度读取函数功能:读取温湿度数据说明:无*Ivoid RH(void)/读取温湿度II 主机拉低 1-5msDHT=0;Delay(5);DHT=1;II 总线由上拉电阻拉高主机延时 40usDelay_10us();Delay_10us();Delay_10us();Delay_10us();主机设为输入判断从机响应信号DHT=1;II 判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if

26、(!DHT)肛!U8FLAG=2;II 判断从机是否发出80us 的低电平响应信号是否结束while(!DHT )&U8FLAG+);U8FLAG=2;II 判断从机是否发出80us 的高电平,如发出则进入数据接收状态while(DHT)&U8FLAG+);II 数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT=1;数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(U8temp=U8checkdata_temp)if(1)U8RH_data_H = U8RH_data_H_temp; 湿度U8RH_data_L = U8RH_data_L_temp;DHTData1 = U8RH_data_H;DHTData1 = 8;DHTData1 |= U8RH_data_L; 获得完整的湿度 tab0=DHTData1/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论