1、多路温度测量系统设计微型计算机原理与接口技术 设计性实验报告 实验题目:多路温度测量系统设计院 (系): 电子工程系班 级:姓 名:学 号:指导教师:报告页数: 28 页成 绩设计性实验任务及评语院(系):电子工程系 教研室:电子信息工程教研室学 号学生姓名专业班级设计(论文)题目多路温度测量系统设计设计(论文)任务设计任务:设计一个温度测量控制系统,以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20为核心,设计一个结构简单、测温准确、具有一定控制功能的智能温度控制器。设计要求:1)单个温度传感器,采用液晶屏幕LCD1602 输出测量的温度值,温度显示精度为0.1度。2)
2、增加温度报警功能,可以通过按键设置一个报警温度,当用DS18B20测得的温度超过预设值,用一个红色的LED灯闪烁报警。3)增加1个温度传感器,使得1条总线上可以同时读取到2个温度传感器的温度值并将其同时显示在液晶屏幕上,液晶屏幕可以清楚地区分2个温度传感器的温度值。指导教师评语及成绩成绩: 指导教师签字: 2011 年 6月 目 录摘要一、 绪论1、 课题研究的背景和意义2、 设计性实验的主要要求及任务二、系统方案实现三、主要硬件介绍1、 DS18B202、 AT89C513、 LCD1602四、软件介绍 1、MedWin V3.0 2、Proteus五、硬件设置六、软件设置 1、 功能概述
3、2、 系统软件流程图 3、 具体程序 七、实验结果 1、 电路仿真图 2、 功能结果图八、总结参考文献摘要本文基于DS18B20设计了一种温度数据采集系统,系统主要由单片机电路和一个DS18B20 数字传感器构成。软件方面,我们采用keil软件对程序进行编写以及调试,硬件方面,我们通过Proteus软件对硬件电路进行仿真以及测试,该系统结构简单,功耗较低,测温范围为- 55 + 125,通过LCD1602显示所测温度。同时,可以实现高低温报警,若所测温度超出设定范围,相关器件就会自动报警。我们也可以通过对按键的处理来调节上下线报警温度。该系统硬件分为3部分:DS18B20 温度测量模块、单片机
4、模块、PC 机与单片机通讯接口电路。系统的测温精度可以达到0.5 ,并且能稳定的与单片机和PC 机通讯。AbstractBased on DS18B20 designed a temperature data acquisition system, the system mainly by the microcontroller circuit and a digital sensor DS18B20 composition. Software, we use keil software program writing, and debugging, hardware, our softwar
5、e through the Proteus hardware simulation and testing, the system is simple, low power consumption, temperature range - 55 125 , shows the measured temperature through the LCD1602. At the same time, can achieve high and low temperature alarm, if the measured temperature exceeds the setting range, th
6、e device will automatically alert relevant. We can also handle on the button to adjust the temperature on the alarm off the assembly line. The system hardware is divided into three parts: DS18B20 temperature measurement module, the microcontroller module, PC machines with MCU interface circuit. Syst
7、em, temperature measurement accuracy can reach 0.5 , and can be stable with the microcontroller and PC-machine communication.关键词:DS18B20、LCD1602、高低温报警一、绪论1、课题研究的背景和意义在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越重要。在工业生产的很多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简单和灵活性大等优点,而
8、且可以大幅度提高被控温度的技术指标,从而大大提高产品的质量和数量。因此,单片机对温度的控制问题是工业生产中经常会遇到的控制问题。目前应用的温度检测系统大多采用由模拟温度传感器、多路模拟开关、AD转换器及单片机等组成的传输系统。这种温度采集系统需要大量的测温电缆,才能把现场传感器的信号送到采集卡上安装和拆卸繁杂,成本也高。同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也比较大,不利于控制者根据温度变化及时做出决定。针对这种情况,本文提出一种采用数字化单总线技术的温度采集系统,并利用Proteus和medwin v3.0软件对设计电路进行综合虚拟仿真,实现了温度实时测量和显示。2、本设计的主
9、要要求1. 测量温度范围:-55+125;2.精度:0.1;3.超限报警功能; 4.高低温报警温度设定二、系统方案实现系统主要由硬件和软件两大部分构成,当接收到系统发出的温度转换命令后, DS18B20开始进行温度转换操作并把转化后的结果放到16 位暂存寄存器中的温度寄存器内, 然后与系统进行数据通信, 系统将温度读出并驱动LED 数码管显示。如果温度值低于设定下限值或高于设定上限值, 则自动启动报警装置。由于DS18B20 单总线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。该系统结构图 图1三、主要硬件介绍 1、DS18B20 DSl820数字温度计是美国Dallas公司生
10、产的数字温度计,它提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线。DSl820的电源可以由数据线本身提供而不需要外部电源。因为每一个DSl820在出厂时已经给定了唯一的序号,因此任意多DSl820可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。DSl820的测量范围从-55到+125,增量值为0.5,可在l s(典型值)内把温度变换成数字。每一个DSl820包括一个唯一的64位长的序号,该序号值存放在DSl820内部的ROM(只读存贮器)中。开始8位是产品类型编码(DSl820
11、编码均为10H)。接着的48位是每个器件唯一的序号,最后8位是前面56位的CRC(循环冗余校验)码。图2为DS18B20的实物图。 图2 温度/数据关系(表1) 2、AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
12、ATC9C51实物图如图3。主要参数如下: 与MCS-51产品指令系统完全兼容4k字节可重擦写Flash闪速存储器1000次擦写周期全静态操作:0Hz24MHz三级加密程序存储器1288字节内部RAM32个可编程IO口线2个16位定时计数器6个中断源可编程串行UART通道低功耗空闲和掉电模式 图3 3、LCD1602 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。体积小、重量轻液晶显示器通过显示屏上的电
13、极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。LCD1602的实物图如图4,主要参数如下: 显示容量:162个字符 芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm 图4四、软件介绍 1、medwin v3.0 MedWin 是万利电子有限公司Insight 系列仿真开发系统的高性能集成开发环境。集编辑、编译/ 汇编、在线及模拟调试为一体,VC 风格的用户界面,内嵌自主版权的宏汇编器和连
14、接器,并完全支持Franklin/Keil C 扩展OMF 格式文件,支持所有变量类型及表达式,配合Insight 系列仿真器,是开发80C51 系列单片机的理想开发工具。 2、Proteus Proteus是英国Labeenter electronics公司研发的EDA工具软件。Proteus不仅是模拟电路、数字电路、模数混合电路的设计与仿真平台,更是目前世界最先进、最完整的多种型号微控制器系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整电子设计与研发过程。Proteus产品系列也包含了革命性的VSM技
15、术,可以对基于微控制器的设计连同所有的外围电子器件一起仿真。 五、硬件设计系统硬件设计包括温度采集设计、控制电路设计、通信接口电路设计。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和单片机构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制
16、,而且体积小,硬件实现简单,安装方便。该系统利用单片机控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。DS18B20温度传感器的1脚接地, 2脚作为信号线,与单片机的P3.3管脚相接;3脚接电源,显示电路采用LCD屏。六、软件设计1 功能概述本系统的软件由C语言编写,程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值。 2 系统软件流程图 七、实验结果:1、电路仿真图2、功能结果图 1、正常显示,LCD显示温度的阈值,同时显示DS18B20所测温度,如下: DS18B20 温度: LCD显示温度: LE
17、D报警灯不亮:2、低温报警, LED报警灯亮,如下: DS18B20 温度: LCD显示温度: LED报警灯亮: 3、高温报警,高温LED报警灯亮,如下: DS18B20 温度: LCD显示温度: LED报警灯亮: 八、总结 经过一周多的设计以及调试,实现实验的部分设计要求,能读出并显示DS18B20采集的温度,并且能够实现高低温报警,能通过对按键的处理来调节高低温报警温度,使得1条总线上可以同时读取到2个温度传感器的温度值并将其同时显示在液晶屏幕上,液晶屏幕可以清楚地区分2个温度传感器的温度值。我在这为期一周多的设计性实验中,我们在老师的指导下,只有把所学的理论知识与实践相结合起来,从理论中
18、得出结论,从而提高自己的实际动手能力和独立思考的能力。我希望自己能在今后的深入学习中设计出更好的,力求创新,努力地提升自己,寻求更大的进步!最后用一句话来结束吧。“实践是检验真理的唯一标准”。参考文献1、马建国、孟宪元.电子设计自动化技术基础.清华大学出版 ,2004 2、姜威.实用电子系统设计基础,2008 3、姜威.单片机系统的PROTEUS设计与仿真 ,2007 4、张毅坤、陈善久.单片微型计算机原理及应用.西安电子科技大学 出版社,20035、李华.MCS51系列单片机实用接口技术.北京航空航天大学出版 社,20016、潭浩强.C语言程序设计.清华大学出版社,2001附录:程序#inc
19、lude#include#define uint unsigned int#define uchar unsigned char#define data 1000sbit LEDCLK=P34;sbit LEDDIN=P23;sbit lcd_en=P22;sbit lcd_rw=P23;sbit lcd_rs=P24;sbit key0=P10;sbit key1=P11;sbit led=P17;#define lcd_date P0uchar code lcdtable=0123456789- ;uchar code error12=no facility;uchar rom_id38=
20、0x28,0x56,0x04,0x00,0x00,0x00,0x0,0x9d,0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e;uchar dispbuf8;uchar dispbuf18;uint data1=50000;uchar tem1,tem2,temt1,temt2;uint temper1;/温度寄存器uint temper11;uint temper22;uint temper2;uint tempert1;/温度阀值R-minuint tempert2;/温度阀值R-maxuint tempert11;uint tempert22;#define
21、 NOP3() _nop_();_nop_();_nop_()sbit DQ=P32;bit flag_init;/DS18B20是否存在标志/* 延时函数*功能: 可随意设置延时时间,延时时间为(tt*9+16)us.晶振为12MHz*/void delay_us(unsigned int tt) while(tt-) ; /* 延时函数*功能: 可随意设置延时时间,延时时间为tt ms.晶振为12MHz*/void delay_ms(unsigned int tms) unsigned char i; while(tms-) for(i=123;i0;i-) ;void close_led
22、() uchar i; for(i=8;i0;i-) LEDCLK=0; LEDDIN=1; _nop_(); LEDCLK=1; _nop_(); void Write_com(uchar com) lcd_rs=0; lcd_date=com; delay_ms(2); lcd_en=1; delay_ms(2); lcd_en=0;void Write_dat(uchar dat) lcd_rs=1; lcd_date=dat; delay_ms(2); lcd_en=1; delay_ms(2); lcd_en=0;void lcd_init() lcd_rw=0; lcd_en=0;
23、 delay_ms(15); Write_com(0x38); delay_ms(5); Write_com(0x38); delay_ms(5); Write_com(0x38);/显示模式设置 Write_com(0x08);/显示关闭 Write_com(0X01);/清屏 Write_com(0x06);/显示光标移动设置 Write_com(0X0c);/显示开及光标设置/*DS18B20初始化*/void reset() flag_init=1; EA=0; DQ=1; NOP3(); DQ=0; delay_us(60);/480960us 556 DQ=1; delay_us(
24、5);/60us flag_init=DQ; delay_us(25);/241us EA=1;/*写一个字节函数*/void Write_Byte(uchar dat) uchar i; DQ=1; EA=0; for(i=8;i0;i-) DQ=0; DQ=(bit)(dat&0x01); delay_us(5);/61us DQ=1; dat=1; EA=1;/*读数据函数*/uchar Read_Byte() uchar i,date; date=0; DQ=1; EA=0;/关中断 for(i=8;i0;i-) DQ=0; date=1; DQ=1; NOP3(); if(DQ) d
25、ate|=0x80; delay_us(5);/61us EA=1;/开中断 return(date);void match_rom(uchar x) uchar i; EA=0; reset(); Write_Byte(0x55); for(i=0;i8;i+) Write_Byte(rom_idxi); EA=1;void get_tem() uchar teml,temh; reset(); Write_Byte(0xcc); Write_Byte(0x44);/启动温度转换 delay_ms(800);/750ms match_rom(0); Write_Byte(0xbe);/读取温
26、度转换结果 teml=Read_Byte(); temh=Read_Byte(); temper11=(temh*256+teml); if(temper11&0x8000) temper1=(temper11+1)*0.625; tem1=1; else temper1=(temh*256+teml)*0.625; tem1=0; match_rom(1); Write_Byte(0xbe);/读取温度转换结果 teml=Read_Byte(); temh=Read_Byte(); temper22=(temh*256+teml); if(temper22&0x8000) temper2=(
27、temper22+1)*0.625; tem2=1; else temper2=(temh*256+teml)*0.625; tem2=0; update() if(tem1) dispbuf0=10; if(temper1/100) dispbuf1=temper1/100; else dispbuf1=11; dispbuf2=temper1%100/10; dispbuf3=temper1%10; else if(temper1/1000) dispbuf0=temper1/1000; dispbuf1=temper1%1000/100; else dispbuf0=11; if(temper1/100) dispbuf1=temper1/100; else dispbuf1=11; dispbuf2=temper1%100/10; dispbuf3=temper1%10; if(tem2) dispbuf4=10; if(temper2/100) dispbuf5=temper2/100; else dispbuf5=11; dispbuf6=temper2%100/10; dispbuf7=temper2%10; else if(temper2/1000) dispbuf4=temper2/1000; dispbuf5=temper2%1000/100; else
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1