多功能温湿度计设计毕业论文(编辑修改稿)内容摘要:

12 3. 硬件电路的设计 总体 结构 框图 图 总结构框图 主控制电路和测温湿 电路 本次硬件设计的核心就是 AT89C52,其他部 位 的硬 件都是围绕 着 它 来 设计的。 数字温湿度传感器 DHT22 的 DATA 口 与 AT89C52 的 P2^7 口 相连。 按键电路就是 7个按键分别与 AT89C52的 P3^2,P3^3,P2^3,P2^4,P2^5,P0^0和 P0^1口相连。 当有按键按下时单片机 接收 到有效的信号, S1键和 S2键 用来调整温度报警范围 ,S1 键 是增加温度 值 , S2 键 是减少温度值 ; S3, S4 和 S5 键是用来 调 整时间和日期的 , S3 键用来 移动设置的光标, S4键 是增加键, S5键 是减少键 ; S6 和 S7 键是用来保存和查询温湿度的, S6 键 用来查询 温湿度 和退出界面, S7 键 用来保存温湿度和日期。 报警电路 就是 蜂鸣器与单片机的 P2^6 口 相连,当温度超过设置的 预警值 时,蜂鸣器就会发出警报。 其 电路接线图如 图 所示。 键盘输入模块 温 湿 度传 感模块( DS18B20) 主控制器 时钟模块 LCD 显示模块 蜂鸣器 模块 存储 模块 13 图 DHT22电路 接线图 存储模块与 时钟模块电路 本次设计 使用的存储 模块是 以 AT24C02 存储芯片 为 核心的 ,该 模块有四个引脚,其中的 VCC 和 GND 引脚分别接 电源 和 接地, SDA 引脚与单片机的 P3^6 口 连接, SCL 引脚与 单片机 的 P3^7 口 连接,存储芯片 主要 是用来存储想要保存的温湿度。 时钟 模块 是 以 DS1302 芯片 为核心的,该模块有 五个 引脚,其中 VCC 引脚悬空, GND 引脚接地, CLK 引脚与单片机的 P2^0 口 连接, DAT 引脚与单片 机的 P2^1口 连接, RST 引脚与单片机的 P2^2 口 连接,时钟芯片 主要 是用来 提供 秒分时日日期月年的信息 , 并 具有掉电存储的功能。 DS1302 的 电路接线图如 图 所示: 图 DS1302的电路 接线图 AT24C02 的 电路接线图如 图 所示: 14 图 AT24C02电路图 显示 模块 电路 本次设计 采用的显示屏是 LCD12864, LCD12864 一共 有 20 个 引脚, 其中 RS引脚与单片机的 P0^3 口 连接, R/W 引脚 与 P0^4 口连接 , E 引脚与 P0^5 口连接 ,PSB引脚与 P0^6 口 连接, D0~D7分别 与 P1^0~P1^7 连接 ,其他的电源口 、 接地口和 空引脚分别对应相应的引脚或悬空。 LCD显示的时候分为四行,第一行显示日期,第二行显示时间,第三行显示湿度,第四行显示温度 和 预警值。 12864 的 接线电路图如图。 图 12864接线电路图 15 4. 软件设计及分析 流程图 Y N N Y 图 程序 流程 图 开始 清屏 及初始化 读 DS130 DHT22 外部 中断 扫描键盘 显示 历史记录 是否 按下 调整 时间、温度上 限 显示 结束 16 DHT22 工作原理 DHT22 为 单总线接口, DATA 用于 微处理器与 DHT22 之间的通讯和同步 ,采用单总线数据格式 ,一次通讯时间 5ms 左右 ,具体格式在下面说明 ,当前数据传输为40bit,高位先出。 如下 : 数据格式 : 40bit 数据 =16bit 湿度数据 +16bit 温度数据 +8bit 校验和 例子: 接收 40bit 数据如下: 0000 0010 1000 1100 0000 0001 0101 1111 1110 1110 湿度数据温度数据校验和 湿度高 8位 +湿度低 8位 +温度高 8 位 +温度低 8位 =的末 8位 =校验和 例如: 0000 0010+1000 1100+0000 0001+0101 1111=1110 1110 湿度 =% RH 温度 =℃ 当温度低于 0℃时温度数据的最高位置 1。 例如: ℃表示为 1000 0000 0110 0101 用户主机( MCU)发送一次开始信号后 ,DHT22 从低功耗模式转换到高速模式 ,等待主机开始信号结束后 ,DHT22 发送响应信号 ,送出 40bit 的数据 ,并触发一次信号采集。 如 图 所示 : 图 接收开始信号 空闲时总线为高电平,通讯开始时主机 (MCU)拉低总线 500us 后释放总线,延时 2040us 后主机开 始检测从机( DHT22)的响应信号。 从机的响应信号是一个 80us 左右的低电平,随后从机在拉高总线 80us 左右代表即将进入数据传送。 如 图 所示 : 17 图 进入数据 传送 高电平后就是数据位,每 1bit 数据都是由一个低电平时隙和一个高电平组成。 低电平时隙就是一个 50us 左右的低电平,它代表数据位的起始,其后的高电平的长度决定数据位所代表的数值,较长的高电平代表 1,较短的高电平代表0。 共 40bit 数据,当最后一 Bit 数据传送完毕后,从机将再次拉低总线 50us左右,随后释放总线,由上拉电阻拉高。 数字 1信号表示方法如图 所示 : 图 数字 1信号 表示方法 数字 0信号表示方法 .如图 所示 : 18 图 数字 0信号 表示方法 DHT22 的 的 电气特性如表 : 表 DHT22的 电气特性 VDD=5V, T = 25℃ ,除非特殊标注 参数 条件 min typ max 单位 供电 DC 6 V 供电电流 测量 1 mA 待机 40 50 uA 采样周期 秒 2 次 注 :采样周期间隔不得低于 2秒钟(建议 2秒以上) 读 八位数 据子程序: void COM(void) { uchar i。 for(i=0。 i8。 i++) { FLAG=2。 while((!DATA)amp。 amp。 FLAG++)。 Delay_10us()。 Delay_10us()。 Delay_10us()。 u8temp=0。 19 if(DATA) u8temp=1。 FLAG=2。 while((DATA)amp。 amp。 FLAG++)。 if(FLAG==1)break。 data=1。 data|=u8temp。 } } 温湿度 读取子程序: void RH(void) { uchar T_data_H_temp,T_data_L_temp。 uchar RH_data_H_temp,RH_data_L_temp,checkdata_temp。 DATA=0。 Delay(5)。 DATA=1。 Delay_10us()。 Delay_10us()。 Delay_10us()。 Delay_10us()。 DATA=1。 if(!DATA) { FLAG=2。 while((!DATA)amp。 amp。 FLAG++)。 FLAG=2。 while((DATA)amp。 amp。 FLAG++)。 COM()。 RH_data_H_temp=data。 20 COM()。 RH_data_L_temp=data。 COM()。 T_data_H_temp=data。 COM()。 T_data_L_temp=data。 COM()。 checkdata_temp=data。 DATA=1。 u8temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp)。 if(u8temp==checkdata_temp) { RH_data_H=RH_data_H_temp。 RH_data_L=RH_data_L_temp。 T_data_H=T_data_H_temp。 T_data_L=T_data_L_temp。 checkdata=checkdata_temp。 } } } 湿度 转换子程序: void read_RH(void) { RH()。 TE_RH[0]=(RH_data_H*256+RH_data_L)/100+39。 039。 TE_RH[1]=(RH_data_H*256+RH_data_L)%100/10+39。 039。 TE_RH[2]=39。 .39。 TE_RH[3]=(RH_data_H*256+RH_data_L)%100%10+39。 039。 } 21 温湿度转换 子程序: void read_TE_RH(void) { uchar Temper_shi_ge。 read_RH()。 set_Temper_chu()。 if((T_data_Hamp。 0x8f)!=0x00) //负温度 { T_data_H=T_data_Hamp。 0x7f。 TEMPER[0]=39。 39。 TEMPER[1]=(T_data_H*256+T_data_L)/100+39。 039。 TEMPER[2]=(T_data_H*256+T_data_L)%100/10+39。 039。 TEMPER[3]=39。 .39。 TEMPER[4]=(T_data_H*256+T_data_L)%100%10+39。 039。 Temper_shi_ge=(T_data_H*256+T_data_L)/100*10 + (T_data_H*256+T_data_L)%100/10。 Temper_reg[1]=Temper_chu/10+39。 039。 Temper_reg[2]=Temper_chu%10+39。 039。 } else { TEMPER[0]=(T_data_H*256+T_data_L)/100+39。 039。 TEMPER[1]=(T_data_H*256+T_data_L)%100/10+39。 039。 TEMPER[2]=39。 .39。 TEMPER[3]=(T_data_H*256+T_data_L)%100%10+39。 039。 Temper_shi_ge=(T_data_H*256+T_data_L)/100*10+ (T_data_H*256+T_data_L)%100/10。 Temper_reg[0]=Temper_chu/10+39。 039。 Temper_reg[1]=Temper_chu%10+39。 039。 } 22 if(Temper_shi_ge Temper_chu) { beep=0。 delayms(10)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。