根据C51的DS18B20多点测温系统_第1页
根据C51的DS18B20多点测温系统_第2页
根据C51的DS18B20多点测温系统_第3页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、* *基于 C51 的 DS18B20多点测温系统2013-07-22目录摘要 .3第一章 绪论 .41.1开发背景及意义 .4第二章系统硬件设计 .52.1 单片机 . 5* *2.2 DS18B20温度测量模块62.3 液晶显示模块92.4 串口通讯模块11第三章系统软件设计113. 1 系统初始化123.2 温度测量程序12第四章系统仿真调试134.1 系统仿真调试13附录16* *摘要本文介绍了基于温度传感器DS18b20与AT89C52单片机组成的多点温度分布式测温系统。设计了其系统构成和软件方案。该系统面向实际需求,设定DS18b20温度范围为-55+125,采用LCD1602液晶

2、显示屏,显示两路温度传感器的测量温度值。同时通过串口通讯与 PC 机进行通讯。传输采集到的温度值。实际应用表明。该系统结构简单,抗干扰能力强,适合于恶劣环境下现场温度的测量,可应用于仓库测温、楼宇空调控制和生产过程监控等领域。关键词: DS18b20 ,分布式, 1602串口通* *第一章绪论1.1开发背景及意义温度的测量和控制在储粮仓库、智能楼宇空调控制及其他的工农业生产和科学研究中应用广泛。传统的温度检测是使用诸如热电偶、热电阻、半导体pn 结之类的模拟传感器,经信号取样电路、放大电路和模数转换电路处理,获取表示温度值的数字信号,再交由微处理器。因为检测环境复杂,测量点多,信号传输距离远及

3、各种干扰的影响,使得传统测量系统的稳定性和可靠性下降。近年来随着单片机的发展和传感器技术的革新,温度检测领域也完成了从模拟信号到数字信号的转变。DS18b20温度传感器的广泛应用更是推动了这一领域的发展。另外液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点在各类仪表和显示系统中得到越* *来越多的应用,现在也是单片机应用设计中最常用的信息显示模块。综合以上产品的发展特点,希望温度检测系统在未来的发展中有更广阔的应用空间并且具有更好的现场测量优越性。第二章系统硬件设计本系统通过DS18B20温度传感器采集温度值,经由单片机处理由液晶显示模块显示当前温度值,并经过串口通信将温度传送到P

4、C 上2.1单片机本系统采用AT89C52单片机作为微处理器。AT89C52单片机是ATMEL 公司 89 系列单片机的一种8 位 Flash 单片机。它最大的特点是片内含有8k 可重复编程的Flash 存储器,可* *进行 1000次的擦写操作。另外AT89c52单片机采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,并且其兼具省电耐用、性能稳定的特点,因此成为单片机市场的主流产品。本系统采用晶振根据需要确定系统工作频率为11.0592Mhz。图 2.1 单片机结构图2.2 DS18B20温度测量模块DS18b20是美国 DALLAS 公司推出的

5、单总线数字化测温集成电路,它具有独特的单线接口方式,将非电模拟量温度值转换为数字信号串行输出仅需占用1 位 I/O端口,能够直接读取被测现场的温度值。它体积小,电压适用范围宽(3v5v ),且可通过编程实现912位的温度读数, 即具有可调的温度分辨率,因此实用性和可靠性较高,应用广泛。 以下是 DS18b20的内部结构图* *图的内部结构图DS18B20有 4 个主要的数据部件: 64 位激光 ROM 。 64 位激光 ROM 从高位到低位依次为8 位 CRC、48 位序列号和8位家族代码 (28H) 组成。 温度灵敏元件。 非易失性温度报警触发器TH 和 TL 。可通过软件写入用户报警上下限

6、值。 配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DS18B20在按此寄存器中的分辨率将温度转换成相应精度的数值。DS18B20的测温范围为 -55 +125 ,在 -10 +85 范围内,精度为电压低于3.4v 时精度误差较大。0 工作时0.5 。在根据其时序特点以下是DS18B20与AT89C52单片机构成的温度监测系统如下* *+5VCC1R4DQ2100 KDQDS18B20GND3DS18B20图温度监测系统DS18b20的典型应用在本系统中两个温度传感器与单片机连接方式如下:图传感器与单片机连接* *本系统为多点温度测试。DS18B20采用外部供电方式,理论上可以在一根数

7、据总线上挂 256 个 DS18B20 ,但实际应用中发现,如果挂接20 个以上的DS18B20就会产生功耗问题。另外单总线长度也不宜超过0.5M ,否则会影响到数据的传输。在本电路板的设计中考虑到初步实践的准确性,暂使用2 个 DS18B20分别连接单片机的p2.6 口。对 DS18B20的设计,需要注意以下问题( 1)对硬件结构简单的单线数字温度传感器DS18B20进行操作,需要用较为复杂的程序完成。 编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。尤其在使用DS18B20的高测温分辨力时,对时序及电气特性参数要求更高。( 2)实际应用时,要注意单

8、线的驱动能力,不能挂接过多的DS18B20 ,同时还应注意最远接线距离。另外还应根据实际情况选择其接线拓扑结构。2.3液晶显示模块本系统使用的是1602 液晶显示模块。1602 液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧、位数多、程序简单的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。根据显示内容可以分为字符型液晶,图形液晶。 根据显示容量又可以分为单行16 字,2 行16字,两行20 字等等。在本系统中使用的是字符型两行16 字液晶显示器。在与单片机连接时使用接口电路(排针)相连,为并行通信。以下是1602 液晶显示器外型图和液晶显示的典型应用。* *图液晶显示器外形1602

9、液晶显示采用标准的16 脚接口,其中: (模块背面有标注)图串口通讯第 1 脚: VSS 为地电源第 2 脚:VDD 接 5V 正电源第 3 脚: V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影” ,使用时可以通过一个 10K 的电位器调整对比度第 4 脚: RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚: RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址;当RS 为高电平、 RW 为低电平时可以写入数据。* *第 6 脚: E 端为使能端,当

10、 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714 脚: D0 D7 为 8 位双向数据线。第 15 16 脚:空脚1602 液晶模块内部的字符发生存储器(CGROM) 已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII 码兼容。2.4 串口通讯模块UART 是一种通用串行数据总线 ,用于异步通信 。该总线双向通信,可以实现全双工传输和接收。 实现单片机和PC 机的通讯工作, 接一个 MAX232实现电平转化。 电路图如下:第三章系统软件设计图 3 系统流程图整个系统的功能是由硬件

11、电路配合软件来实现的,当硬件基本定型后, 软件的功能也就* *基本定下来了。 本系统主程序主要包括三个子程序,分别为液晶显示子程序,温度测量子程序,串口通讯子程序。主体软件架构如左图:3. 1 系统初始化系统初始化主要包括UART 初始化,液晶显示初始化,温度传感器初始化。UART 初始化包括定义定时器/ 计数器和串行口的工作方式,定义 T1 为自动重装8 位计数器。液晶显示初始化主要是确定液晶显示器的工作方式、显示开关、光标开关等。温度传感器初始化包括一个由总线控制器发出的复位脉冲和跟有其后由传感器发出的存在脉冲。 存在脉冲是让总线控制器知道DS18b20在总线上且已准备好操作。一个复位脉冲

12、跟着一个存在脉冲表明DS18b20已经准备好发送和接收数据。以下是初始化序列图。图初始化序列图3.2温度测量程序温度测量程序主要是DS18b20与单片机之间的ROM 操作命令和DS18b20的数据读* *写操作命令。当单片机对DS18B20进行初始化,检测到一个存在脉冲后,发出匹配ROM 命令,然后发送 ROM 码。图DS18b20 基本工作流程第四章系统仿真调试4.1系统仿真调试在 keil 开发环境下不能进行有效的仿真调试,所以在系统中采用protues单片机仿真工具进行仿真调试。下图为protues仿真读取温度后在LCD1602液晶屏上的显示结果。* *图 4.1.1 protues 仿

13、真图上位机用串口调试软件来仿真,安装了虚拟串口驱动软件和PROTEUS 进行调试仿真。虚拟串口驱动软件用了VSPD软件。 VSPD 软件在 Window操作系统上增加了一对在逻辑上交叉相互的虚拟串口,使串口调试助手能够和PROTEUS 中的单片机串口相连。VSPD 软件界面如下:* *图软件界面串口仿真结果如下:在串口调试助手上显示两个温度传感器采集到的温度* *图温度传感器采集附录温度采集体统原理图PCB 图* *源代码1602 函数部分:#define Port P1sbit RS = P20;/ 定义端口sbit RW = P21;sbit E =P22;/*微秒延时函数*/void d

14、elay_us(unsigned int n) /延时如果需要高精度延时if (n = 0)return ;while (-n);/*/*毫秒函数声明*/*/void delay_ms(unsigned char i)* *unsigned int b;while(i-)for (b = 1; b 1000 ; b+) ;/*/*写入命令函数*/*/void LCD_write_com(unsigned char com)RS=0;RW=0;E=1;Port = com;delay_us(10);E=0;/*/*写入数据函数*/*/void LCD_write_Data(unsigned ch

15、ar Data)* *RS=1;RW=0;E=1;Port = Data;delay_us(10);E=0;/*/*写入字符串函数*/*/void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)if (y = 0)LCD_write_com(0x80 + x);elseLCD_write_com(0xc0 + x);while (*s)* *LCD_write_Data( *s);s+;/*/*初始化函数*/*/void LCD_init(void)delay_ms(40);LCD_write_com(0x38);

16、/* 显示模式设置*/delay_ms(5);LCD_write_com(0x38);delay_ms(5);LCD_write_com(0x38);delay_ms(5);LCD_write_com(0x38);LCD_write_com(0x08);/* 显示关闭*/LCD_write_com(0x01);/* 显示清屏*/LCD_write_com(0x06);/* 显示光标移动设置*/delay_ms(5);* *LCD_write_com(0x0C);/* 显示开及光标设置*/*函数名:Display_F函数说明:打印整数型数据,没有地址传入参数:用于Display_float使用传

17、出参数:无返回值:无*/void Display_F(unsigned int num)unsigned charsever_num6,i = 0;if(num = 0)LCD_write_Data(0x30);elsewhile(num != 0)* *sever_numi+ = num % 10 + 0x30 ;num /= 10 ;while(i-)LCD_write_Data(sever_numi);delay_us(500);/*函数名:Display_float函数说明:打印浮点型数据,传入参数:打印地址x,y, 数据 num ,小数点后面打印length位传出参数:无返回值:无*

18、/voidDisplay_float(unsignedcharx,unsignedchary,floatnumf,unsignedcharlength)unsigned long Int_num;unsigned inttemp = 1;* *unsigned char i = 0;for (i = 0 ; i 0;z-)for(b=1;b0;b-)for(a=2;a0;a-);void delay(unsigned int z)/延时函数uchar x,y;for(x=z;x0;x-)for(y=101;y0;y-);/DS18B20函数部分 /void dsinit()/DS18B20初始

19、化dat=1;dsdelay(4);dat=0;/ 给一个脉冲信号dsdelay(50);/低脉冲信号要保持480us 960usdat=1;/拉高* *dsdelay(9);/略微延时delay(1);uchar read()/DS18B20读一个字节uchar i,k;for (i=8;i0;i-)dat = 0; /给脉冲信号k=1;/将读到的一位数向后移一位dat = 1; /给脉冲信号if(dat)k|=0x80;/如果读到的是1,则,k 和0x80进行或运算,首位变成1dsdelay(4);/每位读取中间间隔大于1usreturn(k);void write(uchar date)

20、/DS18B20 写一个字节uchar i,k;k=date;for(i=0;i=1;dsdelay(1);float read_tempe(uchar num)/从DS18B20存储器中读书温度int t;float tt;uchar a,b,i;dsinit();/每次对DS18B20输入指令都要先进行初始化操作write(0x55);/写序号列号for (i = 0 ; i 8 ; i+)write(xlnumi);write(0x44); /启动温度转换dsinit();* *write(0x55);/写序号列号for (i = 0 ; i 8 ; i+)write(xlnumi);w

21、rite(0xBE); /读取温度寄存器等(共可读9 个寄存器)前两个就是温度a=read();/读出温度的低八位b=read();/读出温度的高八位t=b;t=8;/t是 int , 16 位,讲高八位移到前面t=t|a;/将温度的高位与低位合并if (b & 0x80 )= 0)/判断正负温度tt=t*0.0625;/将带有小数点位的十六进制数化为十进制flag = 0;elsett=(t + 1 )* 0.0625;flag = 1;return(tt);* *UART 函数部分:void InitUART(void)/UART初始化TMOD = 0X20; /11.0592M 9600SCON = 0X50;TH1 = 0xfd;TL1 = 0xfd;PCON = 0X00;EA=1;ES=1;TR1 = 1;void Send(unsi

温馨提示

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

评论

0/150

提交评论