多路智能温度测控系统设计课程设计1_第1页
多路智能温度测控系统设计课程设计1_第2页
多路智能温度测控系统设计课程设计1_第3页
多路智能温度测控系统设计课程设计1_第4页
多路智能温度测控系统设计课程设计1_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、天津理工大学 通信工程 课程设计电子技术课程设计题目:多路智能温度测控系统设计 学 院 计算机与通信工程学院 专 业 通信工程 2011年5月目 录摘要 3关键字 3前言 3一proteus内容简介4二、设计目的4三、设计内容4四、ds18b20简介5五、单片机简介9六、基本设计原理9七、设计步骤10八、proteus设计图11九、proteus仿真调试11十、软件设计13结语总结 14参考文献 14附录115附录217摘 要:本文介绍了数字温度传感器ds18b20测温的基本原理以及基于ds18b20的多点温度测量系统的设计过程,包括软件设计和硬件设计两大部分。软件部分给出了软件设计思想及软件

2、流程图,硬件部分给出了单片机、测温电路、显示电路设计。单片机使用at89c52单片机,温度传感器使用美国dallas公司最新推出的ds18b20数字式温度传感器,显示模块采用lcd显示。基于ds18b2o的多点测温系统在实际中应用广泛,测温系统简单、测温精度高、连接方便、占用口线少、转换速度快、给硬件电路设计工作带来极大的方便并且缩短了开发周期。关键词:ds18b20 多点温度测量 单片机 proteus仿真前 言随着电子技术的快速发展,我们生活中的方方面面几乎都充斥着电子产品,我们也无时无刻不享受着电子技术带给我们的便利。作为电子专业的大学生,我们应当在享受电子生活带给我们的便捷的同时,应该

3、更多的理解与思考电子产品的设计过程,并能在已有的集成芯片和单片机等微控制器的基础上,自己动手亲身体验电子设计的过程,以便于将课本上的理论实践化,做到学以致用,更好的掌握单片机等元器件的应用,锻炼独立解决问题的能力。本课程设计题目是基于ds18b20的多路智能温度测控系统设计,主要介绍了ds18b20的工作过程和原理,以及基于它的系统设计。在这个设计里,根据要求设计了两个ds18b20与单片机之间的单端口通信,可以推广到多个ds18b20。通过学习了解掌握了proteus 原理图设计及仿真方法,熟悉keil开发环境。在设计过程中参考或引用了基于proteus的电路及单片机系统设计与仿真,ds18

4、b20数据手册等参考资料以及网络上的相关资料。在此,向这些技术资料的作者表示感谢。由于设计者的学识水平有限,加之时间仓促,作品不够完善,不足之处在所难免,敬请老师指导和改正。一proteus内容简介proteus软件是英国labcenter electronics公司出版的eda工具软件。它不仅具有其它eda工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。proteus从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,

5、其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086、msp430、cortex和dsp系列处理器。它是能进行模拟电路、数字电路、模数混合电路、rs232动态仿真、i2c调试器、spi 调试器、键盘和lcd、led 系统的设计与仿真的平台。proteus 具备原理图设计、电路分析与仿真、pcb 设计功能,可以通过调入程序的编译结果. hex 或. cof 文件来调试单片机程序,还可直接嵌入到 microchip 公司的单片机调试软件 mplab ide中,进行程序的调试和仿真。二、设计目的1、掌握单片机基本编程技术及外围电路的搭

6、建2、熟练掌握ds18b20的基本操作并了解其工作原理3、熟练掌握proteus原理图设计及仿真三、设计内容1、单片机最小系统设计2、ds18b20与单片机的单口通信设计3、proteus原理图的绘制与仿真4、单片机程序编写四、ds18b20简介ds18b20数字温度计是dallas公司生产的1-wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,可以节约硬件资源,而且使用较为方便。ds18b20产品的特点 (1)只要求一个端口即可实现通信。 (2)在 ds18b20中的每个器件上都有独一无二的序列号。 (3)实际应用中不需要外部任何元器件即可实现测温。 (4)测量

7、温度范围在55c到125c之间。 (5)数字温度计的分辨率用户可以从 9位到 12 位选择。 (6)内部有温度上、下限告警设置。ds18b20的引脚介绍 to-92封装的ds18b20的引脚排列见下图 ds18b20的使用方法由于 ds18b20 采用的是 1wire 总线协议方式,即在一根数据线实现数据的双向传输,而对at89s51 单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对 ds18b20 芯片的访问。 由于 ds18b20是在一根 i/o线上读写数据,因此,对读写的数据位有着严格的时序要求。ds18b20 有严格的通信协议来保证各位数

8、据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。(此图为以下时序图的图例)ds18b20的复位时序ds18b20的读时序 对于ds18b20的读时序分为读0时序和读1时序两个过程。对于ds18b20的读时隙是从主机把单总线拉低之后,在 15us之内释放单总线,以让ds18b20把数据传输到单总线上。ds18b20进行一个读时序过程,至少需要60us才能完成

9、。(下图左边为读“0”时序,右边为读“1”时序)ds18b20的写时序 对于 ds18b20 的写时序仍然分为写0时序和写1时序两个过程。对于ds18b20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证ds18b20能够在 15us 到 45us 之间能够正确地采样io总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。(下图左边为读“0”时序,右边为读“1”时序)单片机检测到ds18b20的存在,即可向其发送rom操作命令 每一片ds18b20在其rom中都存有其唯一的64位序列号,在出厂前已写入片内rom中,主机在进入操作程序

10、前必须逐一接入18b20用读rom(33h)命令将该18b20的序列号读出并登陆。当主机需要对众多在线18b20进行操作是,首先要发出匹配rom命令(55h)之后的操作就是针对该18b20的。而所谓跳过rom命令即为:之后的操作是对所有18b20的框图中先有跳过rom,即是启动所有18b20进行温度变换之后,通过匹配rom再逐一地读回每个18b20的温度数据。在18b20组成的测温系统中,主机在发出跳过rom命令之后,再发出统一的温度转换启动码44h就可以实现所有18b20的统一转换,再经过1s后,就可以用很少的时间去逐一读取。64-bit rom数据结构图:低8位为产品类型编码(ds18b2

11、0均为10h),中间48位为每个器件唯一的序号,高8位为crc(循环冗余校验)码。ds18b20中有用于存储测得的温度值的两个8位ram存储器,编号为0号到1号。1号存储器存放温度值的符号,如果温度为负,则1号存储器8位全为1,否则全为0。0号存储器用于存放温度值的补码,lsb(最低位)的“1”表示0.5摄氏度。将存储器中的二进制数求补再转化成十进制数并处以2就得到被测温度值(-55摄氏度125摄氏度)。温度/数据转换关系转换示例五、单片机简介单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器cpu随机存储器ram、只读存储器rom、多种i/o口和中断系统、定

12、时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、a/d转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。单片微型计算机简称单片机,是典型的嵌入式微控制器(microcontroller unit),常用英文字母的缩写mcu表示单片机,它最早是被用在工业控制领域。六、基本设计原理单片机在本设计中充当了重要的角色,是整个温度测控系统的核心,作为控制中心而存在,与本设计中的另一个重要部分ds18b20进行数据通信并控制lcd液晶屏显示输出,完成了整个多点温度的测控任务,ds18b20、at89c52单片机、lcd液晶屏构成了整个多点温度测控系统。本设计共采用了2

13、片ds18b20芯片并接于p1.1口采用at89c52作为控制中心与ds18b20完成单口通信,读取ds18b20采集的温度信息,并经过处理交由1602lcd显示。本设计出于只阐述说明原理考虑只使用了2片ds18b20芯片,并外接了一个开关用于这2片芯片温度数据之间的切换。系统框图如下所示。 系统框图at89c52ds18b20ds18b20lcd1602七、设计步骤1、查阅 ds18b20芯片datasheet,熟悉其工作原理2、在proteus环境下绘制系统原理图3、在keil开发环境下编写程序4、将程序导入proteus下仿真5、根据仿真结果改写程序6、撰写设计报告八、proteus设计

14、图说明:左下角为两个ds18b20芯片,dq端同接于at89c52的p1.1口,右上角为1602lcd,p3.3口接开关,通过它的开关切换两片ds18b20之间的温度显示。九、proteus仿真调试在proteus中使用多个ds18b20 时,必须改变器件的属性,使仿真中的每个器件序列号各不相同。具体做法:右击ds18b20,选中edit properties选项,在其中改变rom serial number的值(在该对话框下还可以改变granularity的数值,即改变每次调整温度的额度)。在proteus中,可以人为改变3个字节的器件序列号。要想得到全部8个字节,一个简单的方法就是每一次总

15、线上只连接一个器件,利用0x33读器件序列号的命令在程序中得到完整的器件序列号。将测试序列号的程序烧入proteus下at89c51中,程序中定义通信端口为p1.1只需将ds18b20依次与单片机连接即可。并在运行中点击菜单项debug,选中watch window,按alt+a,即出现图1所示对话框,在name项中输入a,在address项中输入0x08,点击add,在watch window窗口中即可看到序列号低八位的值。然后依次输入0x090x0f,再点击done键,即可获得所有64位序列号。所得序列号如图2所示(本设计共用了两个ds18b20)。测试程序详见附录1 程序中包含向ds18

16、b20发送一个字节,读取一个字节,以及ds18b20的初始化等子程序。 图 1图 2 十、软件设计1、软件流程图判断k=1?读取1st ds18b20lcd显示读取2nd ds18b20lcd显示初始化ds18b20开始是否主程序流程图 ds18b20读取温度流程图开始初始化ds18b20跳过读序列号操作匹配rom启动温度转换读序列号匹配rom读取温度寄存器 2、关键模块说明本程序由主函数main.c 、 头文件ds18b20.h 、 lcd1602.h (为便于调用特将其编为.h文件)三部分组成。主函数main.c中处理了由ds18b20采集的温度信息并交由1602lcd显示,并设置了一个开

17、关,当打开开关显示1st的温度,闭合开关显示2nd的温度。ds18b20.h 是ds18b20的驱动程序,包含了ds18b20的初始化函数、读写一个字节的函数、匹配rom函数、温度读取函数。lcd1602.h是1602lcd的驱动程序,包含了lcd初始化等程序,使用时只需在主程序中调用gotoxy()函数即可让lcd1602显示字母数字等信息。具体程序见附录2。结语总结 在本次课程设计中,我对于芯片的学习能力有了一定了提高,对于初次接触的ds18b20芯片能通过阅读它的数据手册了解其使用方法,并付诸于软件编程思想。在设计中碰到了一些困难,如在实现多个ds18b20的单总线通信时,遇到了编程上的

18、瓶颈,接着又在proteus仿真中遇到了不会读取ds18b20的序列号的困难,幸而被一一克服,才得以完成本设计最终的仿真实现。第一次亲自动手编写此类较为冗长的程序,将所学的c语言运用到实际,才发现实践总是高于理论的,在实际应用中总会出现困难。在完成本设计后,本人感觉工程设计能力有较大的提升,培养了系统的思维能力,总之得到了很好的锻炼。参考文献1、 唐颖. 单片机原理与应用及c51程序设计.北京:北京大学出版社,20082、 周润景.张丽娜.基于proteus的电路及单片机系统设计与仿真.北京:北京航空航天大学出版社,2006附录1ds18b20 rom系列号测试程序#includesbit d

19、q = p11; /定义通信端口 unsigned char a8;/延时程序void delay_18b20(unsigned int i) while(i-);/初始化函数init_ds18b20(void) unsigned char x=0; dq = 1; /dq复位 delay_18b20(4); /稍做延时 dq = 0; /单片机将dq拉低 delay_18b20(100); /精确延时 大于 480us dq = 1; /拉高总线 delay_18b20(40); /读一个字节 readonechar(void)unsigned char i=0;unsigned char

20、dat = 0;for (i=8;i0;i-) dq = 0; / 给脉冲信号 dat=1; dq = 1; / 给脉冲信号 if(dq) dat|=0x80; delay_18b20(10); return(dat);/写一个字节 writeonechar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)dq = 0;dq = dat&0x01; delay_18b20(10); dq = 1; dat=1; void main(void) unsigned char i;init_ds18b20(); writeonechar(0x

21、33);for(i=0;i8;i+)ai=readonechar();/将rom序列号存入a中 附录2主程序1、main.c#include#include#includeunsigned char tempbuffer6;sbit k=p30;void delay(unsigned int i) while(i-);void main(void) unsigned int temp;init_ds18b20();delay(5000); while(1) if(k=1)/打开开关显示1st ds18b20 temp = readtemperature(1); if(flag_negative

22、_number)tempbuffer0=-; else tempbuffer0=+; tempbuffer1=temp/1000+0;/百位数 tempbuffer2=temp%1000/100+0;/十位数 tempbuffer3=temp%100/10+0;/个位数 tempbuffer5=temp%10+0;/小数位 tempbuffer4=.; /小数点 lcd_initial(); gotoxy(0,0); print( 1st ds18b20); gotoxy(0,1); print(temp:); gotoxy(5,1); print(&tempbuffer0); gotoxy(

23、11,1); print( cent); delay(50000); else /闭合开关显示2nd ds18b20 temp = readtemperature(2); if(flag_negative_number)tempbuffer0=-; else tempbuffer0=+; tempbuffer1=temp/1000+0;/百位数 tempbuffer2=temp%1000/100+0;/十位数 tempbuffer3=temp%100/10+0;/个位数 tempbuffer5=temp%10+0;/小数位 tempbuffer4=.; /小数点; lcd_initial();

24、 gotoxy(0,0); print( 2nd ds18b20); gotoxy(0,1); print(temp:); gotoxy(5,1); print(&tempbuffer0); gotoxy(11,1); print( cent); delay(50000); 2、ds18b20.h#ifndef _ds18b20_h_#define _ds18b20_h_sbit dq = p11; /定义通信端口 unsigned char flag_negative_number = 0;/负数标志unsigned char code str1=0x28,0x30,0xc5,0xb8,0x

25、00,0x00,0x00,0x8e;unsigned char code str2=0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9;/晶振11.0592mhz void delay_18b20(unsigned int i) while(i-);/初始化函数init_ds18b20(void) unsigned char x=0; dq = 1; /dq复位 delay_18b20(4); /稍做延时 dq = 0; /单片机将dq拉低 delay_18b20(100); /精确延时 大于 480us dq = 1; /拉高总线 delay_18b20(40);

26、 /读一个字节 readonechar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) dq = 0; / 给脉冲信号 dat=1; dq = 1; / 给脉冲信号 if(dq) dat|=0x80; delay_18b20(10); return(dat);/写一个字节 writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0x01; delay_18b20(10); dq = 1; dat=1; /匹

27、配rommatchrom(unsigned char a) char j; writeonechar(0x55);/发送匹配rom命令 if(a=1) for(j=0;j8;j+) writeonechar(str1j);/发送18b20的序列号,先发送低字节 if(a=2) for(j=0;j8;j+) writeonechar(str2j);/发送18b20的序列号,先发送低字节 /读取温度readtemperature(unsigned char z)unsigned char a=0;unsigned char b=0;unsigned int t=0; init_ds18b20();

28、writeonechar(0xcc); /跳过读序号列号的操作init_ds18b20();if(z=1)matchrom(1); /匹配rom 1if(z=2)matchrom(2); /匹配rom 2writeonechar(0x44);/*启动温度转换*/delay_18b20(5);init_ds18b20(); writeonechar(0xcc);/读序列号init_ds18b20(); if(z=1)matchrom(1); /匹配rom 1if(z=2)matchrom(2);/匹配rom 2 writeonechar(0xbe); /读取温度寄存器等(共可读9个寄存器) 前两

29、个就是温度a=readonechar();b=readonechar();/启动下一次温度转换init_ds18b20();writeonechar(0xcc); / 跳过读序号列号的操作writeonechar(0x44); / 启动温度转换t=b;t0x0fff) t=t+1;flag_negative_number = 0xff;t=t*0.625; /有效位到小数点后2位return(t);#endif3、lcd1602.h#ifndef lcd_char_1602_2005_4_9#define lcd_char_1602_2005_4_9#include /port definit

30、ionssbit lcdrs= p20;sbit lcdrw= p21;sbit lcden = p22;sfr dbport = 0x80;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.数据端口/内部等待函数unsigned char lcd_wait(void)lcdrs=0;lcdrw=1;_nop_();lcden=1;_nop_();/while(dbport&0x80);/在用proteus仿真时,注意用屏蔽此语句,在调用gotoxy()时,会进入死循环, /可能在写该控制字时,该模块没有返回写入完备命令,即dbport&0x80=0x80 /实际硬件时打开此语句lcden=0;return dbport;/向lcd写入命令或数据#define lcd_command0 / command#define lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光标返回原点void lcd_write(bit style, unsigned char input)lcden=0;lc

温馨提示

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

评论

0/150

提交评论