多路温度采集系统设计.doc_第1页
多路温度采集系统设计.doc_第2页
多路温度采集系统设计.doc_第3页
多路温度采集系统设计.doc_第4页
多路温度采集系统设计.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

学 号 11780128天津城建大学信息处理系统综合设计设计说明书多路温度采集系统设计起止日期: 2014 年 12 月 29 日 至 2015 年 1 月 23 日学生姓名卫瑞鑫班级11信科1班成绩指导教师(签字)计算机与信息工程学院2015年 1月 23日天津城建大学课程设计任务书2014 2015 学年第 一 学期 计算机与信息工程 学院 电子信息科学与技术专业 1 班级课程设计名称: 信息处理系统综合设计 设计题目: 多路温度采集系统设计 完成期限:自 2014 年 12 月 29 日至 2015 年 1 月 23 日共 4 周设计依据、要求及主要内容(可另加附页):一、课程设计的目的通过对课程设计任务的完成,使学生掌握单片机控制系统硬件设计和基本的编程方法,了解温度测量的工作原理,既巩固所学的基础理论知识, 又为学生日后从事开发设计奠定基础。 二、课程设计的内容及要求 选择合适的器件,了解温度测量的工作原理,进行温度测量系统的软、硬件设计,要完成1、单片机最小系统设计。2、多路温度采集、显示电路设计。3、编写温度测量程序。4、书写设计说明书。三、参考资料:1、 何立民. MCS-51单片机应用系统设计 . M 北京航天航空大学出版社2、 张开如. 自动控制原理. M北京大学出版社.3、 赵新民. 智能仪器设计基础 M哈尔滨工业大学出版社指导教师(签字): 系 主 任(签字): 批准日期: 2014 年 12 月18日 目录第1章 设计原理11.1 设计原理11.2系统方案1第2章 硬件电路的设计22.1 硬件电路整体设计22.2 单片机的介绍2 2.2.1单片机的功能2 2.2.2 单片机内部结构22.3最小系统设计32.4显示电路42.5 传感器接口电路5第3章系统程序设计73.1 程序整体设计思路73.2设计总流程83.3读取温度流程93.4系统延时设计93.5 显示温度程序设计93.6读温度程序设计10第4章 设计结果及分析114.1设计结果114.2结果分析12总结13参考文献14附录一15附录二26第1章 设计原理1.1 设计原理 本次课程设计是以STC12C5A60S2作为主控芯片,设计利用LCD1602实现时间和多路(8路)温度信息显示。主要是实现两部分的功能:一是利用多个DS18B20温度传感器提供温度信息,单片机分别读取各传感器温度信息并显示;二是扩展DS12C887外围电路,实现时间信息显示。 本系统采用的是八个温度传感器DS18B20,在出厂时,每一个DS18B20都有它自身的编号并且是每一个都是不同的,这就为这个系统的成功实现提供了可能。由于DS18B20是单总线结构,只有一条数据线与单片机相连,它的数据传输只能是一位一位的,唯一序列号的存在就使单片机能够通过这组序列号识别是哪个传输的温度,这样就相当于把八个温度传感器编号为1和2,3,4,5,6,7,8,通过多路开关CD4051,接入单片机,单片机就能识辨出来是哪个传出来的温度,然后经运算处理后在LCD1602上显示出来,根据屏幕显示时间的不同,我们就能识别不同地方的温度,这就是总体的设计思路。1.2系统方案 图1 系统框图第2章 硬件电路的设计2.1 硬件电路整体设计 硬件电路是实现各项功能的基础,如果硬件电路设计不好,即使程序编的再好,方案再合理也不可能实现,所以硬件电路设计是至关重要的。本系统用到的硬件主要有STC12C5A60S2单片机,LCD1602液晶显示器,DS12C887时钟芯片以及两个DS18B20温度传感器。将它们通过导线按照原理连接好线,这样基本的硬件电路就完成了,硬件电路如附录二图所示。2.2 单片机的介绍2.2.1单片机的功能(1)8位CPU4kbytes程序存储器(ROM) (52为8K)(2)128bytes的数据存储器(RAM) (52有256bytes的RAM)(3)32条I/O口线111条指令,大部分为单字节指令(4)21个专用寄存器(5)2个可编程定时/计数器5个中断源,2个优先级(52有6个)(6)一个全双工串行通信口(7)外部数据存储器寻址空间为64kB(8)外部程序存储器寻址空间为64kB(9)逻辑操作位寻址功能双列直插40PinDIP封装(10)单一+5V电源供电 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M12M。2.2.2 单片机内部结构.一个8 位的中央处理器 CPU(又称为微处理器)有 128字节 的片内数据存储器RAM。.4KB片内 程序存储器ROM或EPROM.片内 18个 特殊功能寄存器(SFR).4个8位 的并行输入输出I/O口(PIO).1个 串行口I/O(SIO/UART)完成单片机与其他微机的之间的串行通信.2/3个16位 定时器/计数器(TIMER/COUNTER).可处理 5个中断源,两级可程序优先级的中断系统图2单片机的内部结构图2.3最小系统设计 最小的单片机系统如图所示,由复位电路,振荡电路和单片机3个部分组成。复位电路给单片机提供完整可靠的复位信号,用以保证单片机在复位后能够进入完全的复位状态。图3最小系统电路图2.4显示电路 工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)。 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 图4 LCD-1602连线图2.5 传感器接口电路 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 技术性能描述、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 、测温范围 55+125,固有测温误差(注意,不是分辨率,这里之前是错误的)1。、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。、工作电源: 3.05.5V/DC (可以数据线寄生电源) 、在使用中不需要任何外围元件、 测量结果以912位数字量方式串行传送 、不锈钢保护管直径 6 、适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。图5 DS18B20连线图2.6 多路开关 CD4051相当于一个单刀八掷开关,开关接通哪一通道,由输入的3位地址码ABC来决定。INH”是禁止端,当 “INH”=1时,各通道均不接通。此外,CD4051还设有另外一个电源端VEE,以作为电平位移时使用,从而使得通常在单组电源供电条件下工作的 CMOS电路所提供的数字信号能直接控制这种多路开关,并使这种多路开关可传输峰峰值达15V的交流信号。例如,若模拟开关的供电电源VDD=5V,VSS=0V,当VEE=5V时,只要对此模拟开关施加05V的数字控制信号,就可控制幅度范围为5V5V的模拟信号。 . 使用十六进制代码就可以对CD4051进行操作了。比如说P1=0X07,这样CD4051就选择的是7号(二进制111)通道了。如果在八个通道输入一模拟量,在输出端将输出什么,输入什么是自己设定。第3章系统程序设计3.1 程序整体设计思路 全部控制程序实际上分为若干模块:LCD-1602显示程序,DS18B20温度传感器读序列码程序,DS18B20读取温度程序以及DS12C887时钟显示程序。在已有程序的基础上添加的主要由两部分:DS18B20读序列码程序和两个DS18B20温度显示程序。B设计说明:该系统是依据DS18B20的单总线结构,对它初始化后发送读序列码指令(0x33h),然后DS18B20会一位一位的将其内部ROM中的64位序列码发送到单片机接收口,然后单片机将序列码储存在数组中,发向LCD-1602的数据控制口,经过代码转换,在屏幕上显示出一个温度传感器的序列码,这样读序列码的程序就算完成了。接下来就进行两个温度的显示,首先将用读序列码程序读出的两组序列码存入两个数组中,然后现将温度传感器复位,接着发送匹配指令(0x55),把上面的序列码发送到ROM进行匹配,这相当于给两个温度传感器编号,等编完号后再次匹配命令和序列码,这样就确定温度传感器,紧接着读取各个温度传感器的温度值,并让其先是在指定位置,这样温度显示程序基本就算完成了。3.2设计总流程 图 6 流程图3.3读取温度流程 图7 读取温度流程图3.4系统延时设计MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。延时子程序模块:/*延时n微秒程序*/void DelayXus(WORD n) while(-n);3.5 显示温度程序设计/*显示温度程序*/void crt_wendu(BYTE line,column) read_wendu(); ah=temperature14; al&=0x0f; ah=ah|al; al=temperature0&0x0f; if (ah&0x80)!=0) if (al=0) ah=ah;ah=ah+1;else ah=ah;al=al;al=al+1;al&=0x0f;wen_val=ah*(-1.0)+al*(-0.0625); else wen_val=ah*1.0+al*0.0625; set_display_place(line,column); crt_r(wen_val,1); write_data(0x20);本程序是根据一个8位可以存储两个数字的特点,通过留取高四位的数据,并将其右移四位,这样就取出高四位的数,然后再将原数的低四位取出,这样存在一个8位存储器中的两个数就被取出来,然后依次取出后面的数,这样序列码就会被全部取出来。3.6读温度程序设计/*读取温度程序*/void read_wendu() BYTE i;DS1820_Reset(); /复位DS1820_WriteData(0xcc); /跳过ROM 命令DS1820_WriteData(0x44); /温度转换命令DS1820_Reset(); /复位DS1820_WriteData(0xcc); /跳过ROM 命令DS1820_WriteData(0xbe); /读DS1820 温度暂存器命令for (i=0;i0;i-)DS1820_DQ = 0; /拉低总线,产生写信号 DelayXus(4); /延时4us DS1820_DQ = wData&0x01; /发送1 位 DelayXus(60); /延时60us,写时序至少要60us DS1820_DQ = 1; /释放总线,等待总线恢复 wData=1; /准备下一位数据的传送 /*从DS1820 中读出数据*函数名称:DS1820_ReadData()*/BYTE DS1820_ReadData()BYTE i,TmepData;for (i=8;i0;i-)TmepData=1;DS1820_DQ = 0; /拉低总线,产生读信号 DelayXus(4); /延时4us DS1820_DQ = 1; /释放总线,准备读数据 DelayXus(8); /延时8 微秒读数据 if (DS1820_DQ = 1)TmepData |= 0x80;DelayXus(60); /延时60us DS1820_DQ = 1; /拉高总线,准备下一位数据的读取. return (TmepData);/返回读到的数据 /*延时n微秒程序*/void DelayXus(WORD n) while(-n);/*读取温度程序*/void read_wendu() BYTE i;DS1820_Reset(); /复位DS1820_WriteData(0xcc); /跳过ROM 命令DS1820_WriteData(0x44); /温度转换命令DS1820_Reset(); /复位DS1820_WriteData(0xcc); /跳过ROM 命令DS1820_WriteData(0xbe); /读DS1820 温度暂存器命令for (i=0;i2;i+)temperaturei=DS1820_ReadData(); /采集温度DS1820_Reset(); /复位,结束读数据/*显示温度程序*/void crt_wendu(BYTE line,column) read_wendu(); ah=temperature14; al&=0x0f; ah=ah|al; al=temperature0&0x0f; if (ah&0x80)!=0) if (al=0) ah=ah;ah=ah+1;else ah=ah;al=al;al=al+1;al&=0x0f;wen_val=ah*(-1.0)+al*(-0.0625); else wen_val=ah*1.0+al*0.0625; set_display_place(line,column); crt_r(wen_val,1); write_data(0x20);/*Function name: write_cmd Descriptions: 向lcd输入指令 */void write_cmd(BYTE cmd) BYTE dl;do dl=rd_com; while(dl&0x80)!=0);/判忙 wr_com= cmd; Delay(1);/*Function name: write_data Descriptions: 写入数据 */void write_data(BYTE dat)BYTE dl;do dl=rd_com; while(dl&0x80)!=0);/判忙 wr_data= dat; Delay(1); /*Function name: write_string Descriptions: 写入字符串 */void write_string(BYTE *s) while(*s != 0) /0为字符串结束标志 write_data(*s); s+; /*Function name: set_display_placeDescriptions: 设置字符的显示位置 */void set_display_place(BYTE line,column) BYTE address; if(line = 1) address = 0x80 + column; else if(line = 2) address = 0xc0 + column; write_cmd(address); /*Function name: 将字符串写到指定的位置 Descriptions: 将字符串显示在lcd的特定位置 */void write_string_lcd(BYTE line,column,unsigned char *string) set_display_place(line,column); write_string(string); Delay(1);/*Function name: 将字符写到指定的位置 Descriptions: 将字符串显示在lcd的特定位置 */void write_data_lcd(BYTE line,column,dat) set_display_place(line,column); write_data(dat); Delay(1);/*液晶模块初始化*/void lcd_init(void) write_cmd(0x38);/ write_cmd(0x38);/ write_cmd(0x06);/ write_cmd(0x0c);/ write_cmd(0x01);/*显示长整型数据*/void crti(unsigned long dat) BYTE dhi,dli,ddi,dei;unsigned long datah;unsigned long datal;datah=dat;dhi=0;if (datah=10)dodatah/=10;dhi+;while(datah=10);datah=dat;ddi=dhi;for (dli=0;dlidhi;dli+)datal=1;for (dei=0;deiddi;dei+)datal*=10;datah=dat/datal;dat=dat%datal;datah+=0x30;write_data(datah);ddi-;dat+=0x30;write_data(dat);elsedat=dat+0x30;write_data(dat); /*浮点数显示*/void crt_r(float x,unsigned char N) BYTE dli; unsigned int dath; unsigned int datl; unsigned int dat; if (x0) dat=0x2e; write_data(dat); Delay(1); dat=1; for (dli=0;dliN;dli+) dat*=10; dath=(int)(x*dat)-dath*dat; for (dli=1;dli=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x2d;write_data(dli);dli=Day;dhi=dli & 0xf0; dhi=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x20;write_data(dli);write_data(dli);write_data(dli);dli=Hour;dhi=dli & 0xf0; dhi=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Minute;dhi=dli & 0xf0; dhi=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Second;dhi=dli & 0xf0; dhi=4;dhi+

温馨提示

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

评论

0/150

提交评论