ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:225.59KB ,
资源ID:6881861      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6881861.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的多点温度采集与记录系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的多点温度采集与记录系统.docx

1、基于单片机的多点温度采集与记录系统 多点温度采集与记录系统1、引言 4二、硬件设计 5三、软件设计 9四、总结 11五、参考文献 12六、程序附录 13一、引言 温度(K)是一个和人们生活环境有着密切关系的物理量,也是一种在生产、科研、生活中需要测量和控制的重要物理量。在工、农业生产和日常生活中,占据着极其重要地位。工业发展与是否能掌握温度有着密切的联系。在冶金、钢铁、石化、水泥、玻璃、医药等行业都与之有关,可以说几乎80%的工业部门都不得不考虑温度对自身系统的影响。本设计是基于单片机的多点温度采集系统设计,多点温度测量显示是近几年的研究课题,随着传感技术与通讯技术的发展,单片机的出现,温度测

2、量仪器应运而生,最近几年的研究更是迅速。采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。因此,本课题的研究在实际应用中意义十分重大。2、硬件设计2.1总体方案硬件设计主要是温度测量模块的容,本设计由AT89C51单片机,LCD1602液晶显示屏,DS18B20温度传感器,以及DB9通信接口。一共包括三大模块:控制模块,温度采集模块,温度显示模块。总体

3、方案如下图所示: 1.1 系统总方案图2.1.1 控制模块功能控制模块在系统的功能是控制温度采集模块完成温度采集并将采集到的温度读入控制模块的数据寄存器,再将从温度采集模块读取的温度数据写入显示模块并控制显示模块完成温度的显示。其中主控单位是AT89C52。2.1.2 温度采集模块功能温度采集模块的主要功能是通过温度传感器感应温室温度并转化成模拟信号,通过转化模块将模拟信号转化成数字信号,并存取温度数据。本设计采用2个DS18B20温度传感器,温度传感器DS18B20采用的电压是部电压,大小为5V,一个引脚接地,一个引脚接+5V电源,中间的引脚是数据的输入输出口。由于每个单片机开发板上有两个温

4、度传感器,所以一个传感器的输出是P1.4,另一个传感器的输出是P1.5。使用时将一个传感器接到单片机的18b20接口,接口的1脚接18b20的地端,接口的3脚接18b20的电源,另一个温度传感器的电源接到P0.0口,数据读写端接到P1.5口,地端接到单片机的接地端,下面是温度传感器DS18B20的时序图。图1.2 温度传感器DS18B20时序图2.1.3 温度显示模块功能温度显示模块的主要功能是在控制模块的控制下将控制模块写入的数据显示在液晶屏上,便于读取温度数值。显示模块采用LCD1602液晶屏。1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读

5、写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。以下具体阐述这三个管脚:RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。R/W为读写选择,高电平进行读操作,低电平进行写操作。E端为使能端,后面和时序联系在一起。除此外,D0D7分别为8位双向数据线。其操作时序如下图所示:图1.3 LCD1602时序图2.1.4温读报警模块温度报警模块主要由2个led灯组成,当温度的采集值高于设定的温度上限或者低于设定的温度下限时,led灯将由暗变亮进行报警,此时此时设计者就可以改变室外的温度满足温度的需求,此报警简单易懂,可操作性强。2、硬件电路仿真根据设计

6、的总方案在pretues中仿真,其结果如图所示;图1.4硬件电路仿真当温度超过高于设定的温度上限(此处设定38)或者低于下限(此处设定12)时,led灯发生报警。其仿真图如下所示:图1.3 温度报警显示3、软件设计 软件设计包括下位机编程和PC机编程,下位机编程完成ds18b20的温度采集、数据处理、数码管显示,串口中断处理及硬件初始化,通信协议的制定及数据的收发。通过串口通信将温度数据在上位机上面显示,并且编译VB程序,实现报警显示。上位机程序工程:图3.1上位机工程显示当温度1是35,温度计2是13时:当温度1是39,温度计2是11时:4、总结通过这次课程学习制作,令我学到了很多东西受益匪

7、浅,仿佛又经历了一次系统学习,在作做课程前,我的导师也要求我做一些温度采集的设计,我一直在查找相关资料,这次的设计让我对多点温度采集的知识了解了许多,同时也上位机编程有了初步的概念。一直来认为做这些设计没什么困难,但在实际运作过程中才清楚地认识到自己的不足和短练,端正了学习态度。这次设计使我加深巩固了基础知识,更加深刻的把握到基础知识的重要,提高了动手和实际解决问题的能力,提高了对问题整体规划的意识。能把握重点设计的核心,并提高查阅资料的能力,培养了团队合作精神和人际交往能力。由于本人水平有限,难免有考虑不足之处,所以恳请老师同学们批评指正。5、参考文献1谭浩强C程序设计,清华大学2童诗白模拟

8、电子技术基础(第四版),高等教育3恢先、黄辉先单片机原理及应用,人民邮电4何立民单片机高级教程-应用于设计(第二版),航空航天大学5蔡单片机控制实习与专题制作,航空航天大学6伏加、林峰Visual Basic程序设计教程(第4版),邮电大学6、程序附录单片机c语言代码:#include #include /标准输入输出#include#define uchar unsigned char#define uint unsigned int;#define ulong unsigned long;/*/* 定义端口 */*/#define Data P0/数据端口sbit RS = P24; /P

9、in4sbit RW = P25; /Pin5sbit E = P26; /Pin6sbit DQ=P13;/ds18b20 端口sbit DQ1=P14;/ds18b20 端口 改动sbit D0=P16;sbit D1=P15;/*/* 全局变量 */*/uint temp=0,temp1=0;float t0,t1;float high=38,low=12,change=0;unsigned char point_flag=0,key_flag=0;unsigned char receive5;unsigned char receive_no=0;unsigned char receiv

10、e_flag=0;char Text= ;uchar code TPoint16=0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9 ;/* 函数声明 */*/*/* 微秒延时函数 */*/void DelayUs(unsigned char us)/delay us unsigned char uscnt; uscnt=us1; /*12MHz频率*/ while(-uscnt);/*/* 毫秒函数声明 */*/void DelayMs(unsigned char ms) while(-ms) DelayUs(250); DelayUs(250);

11、DelayUs(250); DelayUs(250); /*/* 1602写入命令函数 */*/void WriteCommand(unsigned char c) DelayMs(5);/操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;/*/* 1602写入数据函数 */*/void WriteData(unsigned char c) DelayMs(5); /操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;/*/* 1602写入字节函数 */

12、*/void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos=0x10) p=pos+0xb0; /是第二行则命令代码高4位为0xc else p=pos+0x80; /是第二行则命令代码高4位为0x8 WriteCommand (p);/写命令 WriteData (c); /写数据/*/* 1602写入字符串函数 */*/void ShowString (unsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i0;i-)

13、DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(5); return(dat);unsigned char ReadOneChar1(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ1 = 0; / 给脉冲信号 dat=1; DQ1 = 1; / 给脉冲信号 if(DQ1) dat|=0x80; delay(5); return(dat);/*/* 18b20写一个字节 */*/void WriteOneChar(unsigned char

14、 dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; delay(5);void WriteOneChar1(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ1 = 0; DQ1 = dat&0x01; delay(5); DQ1 = 1; dat=1; delay(5);/*/* 18b20读取温度 */*/unsigned int ReadTemperature(void) unsigned ch

15、ar a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0xCC); / 跳过读序号列号的操作 WriteOneChar(0x44); / 启动温度转换 delay(200); Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); /低位 b=ReadOneChar(); /高位 b=8; t=a+b; return(t);unsign

16、ed int ReadTemperature1(void) unsigned char a=0; unsigned int b=0; unsigned int t=0; Init_DS18B201(); WriteOneChar1(0xCC); / 跳过读序号列号的操作 WriteOneChar1(0x44); / 启动温度转换 delay(200); Init_DS18B201(); WriteOneChar1(0xCC); /跳过读序号列号的操作 WriteOneChar1(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar1(); /低位 b

17、=ReadOneChar1(); /高位 b4; TempL=TPointtemp&0x0F; TempH1=temp14; TempL1=TPointtemp1&0x0F; if(t0high) D0=0; else D0=1; if(t1high) D1=0; else D1=1; SBUF=0xff;/校验 while(!TI); TI=0; SBUF=TempH; while(!TI); TI=0; SBUF=TempL; while(!TI); TI=0; SBUF=TempH1; while(!TI); TI=0; SBUF=TempL1; while(!TI); TI=0; SB

18、UF=(int)wendu; while(!TI); TI=0; SBUF=(int)(wendu*10)%10; while(!TI); TI=0; SBUF=(int)high; while(!TI); TI=0; SBUF=(int)(high*10)%10; while(!TI); TI=0; SBUF=(int)low; while(!TI); TI=0; SBUF=(int)(low*10)%10; while(!TI); TI=0; ShowString(0,Text); if(key_flag=0) sprintf(Text,%d.%d%cC,%d.%d%cC ,TempH,TempL,0xdf,TempH1,TempL1,0xdf);/打印输出第二行信息 else sprintf(Text,U:%d.%d%,D:%d.%d% ,(int)high,(int)(high*10)%10,(int)low,(int)(l

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1