基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要

上传人:痛*** 文档编号:100469836 上传时间:2022-06-02 格式:DOC 页数:18 大小:3.08MB
收藏 版权申诉 举报 下载
基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要_第1页
第1页 / 共18页
基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要_第2页
第2页 / 共18页
基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要_第3页
第3页 / 共18页
资源描述:

《基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要》由会员分享,可在线阅读,更多相关《基于51单片机的AM2301温湿度传感器在LCD1602上显示驱动程序(带实物图)概要(18页珍藏版)》请在装配图网上搜索。

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

2、-8 AM2301技术参数参数条件MinTypMax单位湿度分辨率0.1%RH16Bit重复性1%RH精度253%RH0505%RH互换性可完全互换采样周期12S响应时间1/e(63%)25,1m/s 空气2S迟滞0.3%RH长期稳定性典型值1%RH/yr温度分辨率0.116Bit重复性0.5精度1量程范围-4080响应时间1/e(63%)620SAM2301 驱动电路图3-11 AM2301驱动电路图温湿度传感器模块流程设计用户主机(MCU)发送一次开始信号后,AM2301自动从休眠模式转换到高速模式。等待主机开始,信号发送后,AM2301发送响应信号,送出40比特的数据,发送数据结束之后触

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

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

5、k GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _REG52_H_#define _REG52_H_/* BYTE Registers */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sf

6、r TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* 8052 Extensions */sfr T2CON = 0xC8;sfr RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sfr TL2 = 0xCC;sfr TH2 = 0xCD;/* BIT Registers */* PSW */sbit CY = PSW7;sbit AC = PSW6;sbit F0 = PSW5;sbit R

7、S1 = PSW4;sbit RS0 = PSW3;sbit OV = PSW2;sbit P = PSW0; /8052 only/* TCON */sbit TF1 = TCON7;sbit TR1 = TCON6;sbit TF0 = TCON5;sbit TR0 = TCON4;sbit IE1 = TCON3;sbit IT1 = TCON2;sbit IE0 = TCON1;sbit IT0 = TCON0;/* IE */sbit EA = IE7;sbit ET2 = IE5; /8052 onlysbit ES = IE4;sbit ET1 = IE3;sbit EX1 =

8、IE2;sbit ET0 = IE1;sbit EX0 = IE0;/* IP */sbit PT2 = IP5;sbit PS = IP4;sbit PT1 = IP3;sbit PX1 = IP2;sbit PT0 = IP1;sbit PX0 = IP0;/* P3 */sbit RD = P37;sbit WR = P36;sbit T1 = P35;sbit T0 = P34;sbit INT1 = P33;sbit INT0 = P32;sbit TXD = P31;sbit RXD = P30;/* SCON */sbit SM0 = SCON7;sbit SM1 = SCON6

9、;sbit SM2 = SCON5;sbit REN = SCON4;sbit TB8 = SCON3;sbit RB8 = SCON2;sbit TI = SCON1;sbit RI = SCON0;/* P1 */sbit T2EX = P11; / 8052 onlysbit T2 = P10; / 8052 only /* T2CON */sbit TF2 = T2CON7;sbit EXF2 = T2CON6;sbit RCLK = T2CON5;sbit TCLK = T2CON4;sbit EXEN2 = T2CON3;sbit TR2 = T2CON2;sbit C_T2 =

10、T2CON1;sbit CP_RL2 = T2CON0;#endif2. INTRINS.H/*-INTRINS.HIntrinsic functions for C51.Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _INTRINS_H_#define _INTRINS_H_extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsi

11、gned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long

12、, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);#endif3. STDIO.H/*-STDIO.HPrototypes for standard I/O functions.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _S

13、TDIO_H_#define _STDIO_H_#ifndef EOF #define EOF -1#endif#ifndef NULL #define NULL (void *) 0)#endif#ifndef _SIZE_T #define _SIZE_T typedef unsigned int size_t;#endif#pragma SAVE#pragma REGPARMSextern char _getkey (void);extern char getchar (void);extern char ungetchar (char);extern char putchar (cha

14、r);extern int printf (const char *, .);extern int sprintf (char *, const char *, .);extern int vprintf (const char *, char *);extern int vsprintf (char *, const char *, char *);extern char *gets (char *, int n);extern int scanf (const char *, .);extern int sscanf (char *, const char *, .);extern int

15、 puts (const char *);#pragma RESTORE#endif4. LCD1602.H#include #ifndef _LCD1602_H_H#define _LCD1602_H_H#define uchar unsigned char#define uint unsigned int/-函数声明-void delayms(uchar z);void writecmd(uchar com);void writedata(uchar dat);void init_LCD();/-函数声明结束-/1602端口定义sbit RS = P24 ; /数据命令选择端(H/L)sb

16、it RW = P25 ;/读写选择端(H/L)sbit E=P26;/* /自定义的字符(5X8)uchar code tab1=0x03,0x05,0x19,0x19,0x19,0x05,0x03,0x00;/小喇叭uchar code tab2=0x08,0x0f,0x12,0x0f,0x0a,0x1F,0x02,0x02,;/年uchar code tab3=0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00;/月uchar code tab4=0x00,0x1F,0x11,0x1F,0x11,0x11,0x1F,0x00;/日uchar code tab5

17、=0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00;/C(温度符号)*/*void lcd_pos(uchar pos)/设定显示位置 lcd_wcmd(pos | 0x80) ;*/void delayms(uchar z)/延时函数uint i,j;for(i=z;i0;i-) for(j=100;j0;j-); void writecmd(uchar com) /写指令 RS=0; RW=0;E=0;delayms(1); P0=com;delayms(1);E=1; delayms(1);E=0;void writedata(uchar dat) /写数据

18、RS=1;RW=0;E=0;delayms(1);P0=dat;delayms(1);E=1;delayms(1);E=0; /* 写汉字编码到CGRAM函数 *void writetab() unsigned char i ; lcd_wcmd(0x40) ; /写CGRAM for (i = 0 ; i 8 ; i+) lcd_wdat(mytab1 i ) ; */void init_LCD() /初始化1602delayms(15); writecmd(0x38); /不检测忙信号delayms(5);writecmd(0x38); /不检测忙信号delayms(5);writecmd

19、(0x38); /不检测忙信号delayms(5);writecmd(0x38); /显示模式设置delayms(5);writecmd(0x01);/显示清屏delayms(5);writecmd(0x06);/显示光标移动设置delayms(5);writecmd(0x0c);/显示开及光标设置delayms(5);/*writetab() ; /自定义字符写入CGRAM delay(5) ; lcd_pos(0x4d) ; lcd_wdat(0x00) ; /显示自定义字符*/#endif5. 主程序#include #include #include #include lcd1602.

20、htypedef unsigned char U8; /* 无符号8位整型变量 */typedef signed char S8; /* 有符号8位整型变量 */typedef unsigned int U16; /* 无符号16位整型变量 */typedef signed int S16; /* 有符号16位整型变量 */typedef unsigned long U32; /* 无符号32位整型变量 */typedef signed long S32; /* 有符号32位整型变量 */typedef float F32; /* 单精度浮点数(32位长度) */typedef double

21、F64; /* 双精度浮点数(64位长度) */#define uchar unsigned char#define uint unsigned int/-IO口定义-/sbit DHT = P20 ; /AM2301端口定义/-全局变量-/bit flagtemp;/温度正负标志位,k U8count, bit flagsendtemp;/发送温度的标志位U8 U8FLAG;U8 U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH

22、_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U16 DHTData1,DHTData2;U8 outdata5; /定义发送的字节数 U8 indata5;U8 count, count_r=0;U8 str5;U8 data tab6=0x00,0x00,0x00,0x00,0x00,0x00;/存储温湿度数据U8 code dis1=Humdity: % ;U8 code dis2=Temper: c ;/*函数名称 : 延时子程序*/void Delay(U16 j) U8 i; for(;j0;j-) for(

23、i=0;i27;i+); void Delay_10us(void)/延时10uS U8 i; i-; i-; i-; i-; i-; i-; /*函数名称 : 读温湿度字节函数 功 能 : 读取温湿度每个字节说 明 : 无*/ void COM(void)/读字节 U8 i; for(i=0;i8;i+) U8FLAG=2; while(!DHT)&U8FLAG+);Delay_10us();Delay_10us();Delay_10us(); U8temp=0; if(DHT)U8temp=1; U8FLAG=2; while(DHT)&U8FLAG+); /超时则跳出for循环 if(U

24、8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /0 /end i /-/-/-湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位= U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(); /-/*函数名称 : 温湿度读取函数功 能 : 读取温

25、湿度数据说 明 : 无*/ void RH(void)/读取温湿度 /主机拉低 1-5ms DHT=0; Delay(5); DHT=1; /总线由上拉电阻拉高 主机延时40us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); /主机设为输入 判断从机响应信号 DHT=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DHT) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!DHT)&U8FLAG+); U8FLAG=2; /判断从机是否发出 80us

26、 的高电平,如发出则进入数据接收状态 while(DHT)&U8FLAG+); /数据接收状态 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

27、_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/100+0x30; /湿度百位 tab1=DHTData1%100/10+0x30;/湿度十位 tab2=DHTData1%10+0x30; /湿度个位 U8T_data_H = U8T_data_H_tem

28、p;/温度 U8T_data_L = U8T_data_L_temp; DHTData2 = U8T_data_H; DHTData2=8; DHTData2 |= U8T_data_L;/获得完整的温度 if(DHTData2&0x8000)/如果温度为负值 flagtemp=1; DHTData2&=0x7FFF; tab3=DHTData2/100+0x30; tab4=DHTData2%100/10+0x30; tab5=DHTData2%10+0x30;/ U8checkdata=U8checkdata_temp; /fi /fi/*函数名称 : 显示温湿度函数 功 能 : 显示温湿

29、度数据说 明 : 无*/void display() U8 m; /=显示湿度= m = 0 ; writecmd(0x80); while(dis1m != 0)/显示字符 writedata(dis1m) ; m+ ; writecmd(0x89); writedata(tab0); writedata(tab1); writedata(.); writedata(tab2); /=显示温度= m = 0 ; writecmd(0xc0); while(dis1m != 0)/显示字符 writedata(dis2m) ; m+ ; writecmd(0xC8); if(flagtemp)writedata(-); else writedata(+); writecmd(0xC9); writedata(tab3); writedata(tab4); writedata(.); writedata(tab5);void main() /U8 buff4;/U8 timecount; init_LCD();while(1) RH();/调用温湿度读取子程序 display(); /1602显示数据 Delay(2000);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!