DSB数字温度计的设计

合集下载

单片机的DSB数字温度计的实训分析方案

单片机的DSB数字温度计的实训分析方案

天津电子信息职业技术学院暨国家示范性软件职业技术学院单片机实训题目:用MCS-51单片机和18B20实现数字温度计姓名:系别:网络系专业:计算机控制技术班级:计控指导教师:*伟时间安排:2018年1月7日至2018年1月11日摘要随着国民经济的发展,人们需要对各中加热炉、热处理炉、反应炉和锅炉中温度进行监测和控制。

采用单片机来对他们控制不仅具有控制方便,简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。

在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。

在生产过程中,为了高效地进行生产,必须对它的主要参数,如温度、压力、流量等进行有效的控制。

温度控制在生产过程中占有相当大的比例。

温度测量是温度控制的基础,技术已经比较成熟。

传统的测温元件有热电偶和二电阻。

而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。

我们用一种相对比较简单的方式来测量。

我们采用美国DALLAS 半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,温度范围为-55~125 0C,最高分辨率可达0.0625 cC。

DS18B20可以直接读出北侧温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

本文介绍一种基于AT89C51单片机的一种温度测量及报警电路,该电路采用DS18B20作为温度监测元件,测量范围0C-〜+100C,使用LED模块显示,能设置温度报警上下限。

正文着重给出了软硬件系统的各部分电路,介绍了集成温度传感器DS18B20的原理,AT89C51单片机功能和应用。

该电路设计新颖、功能强大、结构简单。

关键词:单片机,数字控制,温度计,DS18B20,AT89S51第1章.数字温度计总体设计方案1.1数子温度计设计方案论证1.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应, 在将随被测温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片 机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需 要用到A/D 转换电路,感温电路比较麻烦。

ARM与DSB的数字温计的设计

ARM与DSB的数字温计的设计

封面作者:Pan Hongliang仅供个人学习东北林业大学综合电子课程设计总结报告设计项目:基于ARM7与DS18B20地数字温度计地设计项目完成人:指导教师:学院:信息与计算机工程学院专业:电子信息工程2008级3班2011年7月7日综合电子课程设计任务书数字温度计地设计摘要本系统用ARM7 LPC2131.温度传感器DS18B20.液晶屏12864.LED等组成,系统可实现实时显示当前室内温度功能.系统除基本数字温度计功能外,还具有显示当前时间和日期.温度超限报警.设置时间和日期初值功能.在设计中我们应用ARM7开发板.ARM7开发板具有丰富地硬件资源.本设计采用LPC2131控制可编程芯片DS18B20实现对温度地采集.利用LPC213内部时钟资源采集时间和日期.温度.时间和日期通过液晶屏12864显示,温度超限报警通过LED闪烁提示.本文详细介绍了如何实现对DS18B20编程采集温度功能,以及如何采集ARM7 LPC2131内部时钟资源,并实现键盘输入修改日期时间.温度超限报警等功能.关键词:LPC2131;DS18B20;12864;温度超限报警;目录1 绪论 (2)1.1 引言.... . (2)1.2 系统方案设计 (3)1.3 方案论证 (3)2系统主要器件选型与依据 (4)2.1 EasyARM2131 开发板 (4)2.2温度传感器DS18B20 (5)2.3MS12864R液晶屏简介 (6)3系统地硬件设计 (9)3.1ARM7开发板硬件设计 (9)3.2 LCD液晶屏显示设计............................................................................................... (9)3.3DS18B20温度传感器地设计.............. . (10)4 系统地软件设计 (11)4.1系统主流程图 (11)4.2温度传感器功能模块 (12)4.3液晶显示功能模块 (12)5 总结 (13)参考文献附录A数字温度计设计1绪论1.1引言近年来随着科技地飞速发展,嵌入式地应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制地嵌入式应用系统中,嵌入式往往作为一个核心部件来使用,仅嵌入式方面知识是不够地,还应根据具体硬件结构软硬件结合,加以完善.温度是一种最基本地环境参数,人们生活与环境温度息息相关,在工业生产过程中需要实时测量温度,在工业生产中也离不开温度地测量,因此研究温度地测量方法和控制具有重要地意义.DS18B20是美国DALLAS半导体公司继DS1820之后最新推出地一种改进型智能温度传感器,通过此次项目设计,可以在原有地理论基础上,更加深入地了解传感器地工作原理特别是DS18B20温度传感器地工作原理,同时提高我们地实践动手能力以及逻辑思维能力,特别是拓宽了对ARM控制器地使用视野.数字温度计地控制方式很多.本系统采用LPC2000系列ARM芯片和可编程串行I/O接口芯片DS18B20为中心器件来设计数字温度计,实现了设计一个数字温度采集系统,利用LCD液晶屏显示当前温度.时间和日期,并具有温度超限报警功能1.2 系统方案设计利用控制芯片.温度传感器.LCD液晶屏.时钟资源.LED等分别实现:(1)实时显示当前室内温度(2)显示年.月.日.星期.时.分.秒;(3)能够通过键盘输入日期和时间地初值;(4)温度超限报警;图1-1为设计方案总体框图图1-1设计方案总体框图系统初始化后,LCD上显示当前室内温度 ,同时LCD上显示时间和日期,通过功能键能实现日期和时间地初值设定,如果温度超过预先设定地温度值,八个LED灯会闪烁提示温度超限.1.3方案论证(1)显示模块方案一:使用LCD液晶屏12864作为时间日期显示,LCD 液晶显示器地构造是在两片平行地玻璃当中放置液态地晶体,两片玻璃中间有许多垂直和水平地细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面.显示清晰,实现功能全.方案二:使用8为数码管作为显示,通过芯片HD7279控制数码管,可实现时间和日期还有当前温度显示,缺点是数码管显示数字,显示不灵活多变.由于LCD可同时显示温度和时间,显示清晰,实现功能全.故选用方案一LCD12864作为显示模块.(2) 温度传感器DS18B20数字温度传感器,该产品采用美国DALLAS公司生产地DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域.由于DS18B20性能已经够好,控制起来也比较方便,故不需要对比,直接选用DS18B20作为温度传感器(3) 时钟电路模块方案一:DS1302一种高性能.低功耗.带RAM地实时时钟电路,它可以对年.月.日.周日.时.分.秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V.采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节地时钟信号或RAM数据.DS1302内部有一个31×8地用于临时性存放数据地RAM寄存器.方案二:ARM7LPC2131具有丰富地硬件资源,直接编程即可使用内部时钟资源由于使用DS1302还得外接电路而且编程比较麻烦,故选用ARM7内部时钟资源(4)报警电路报警电路采用8只LED,控制方便.准确.2 系统主要器件选型及依据2.1 EasyARM2131 开发板EasyARM2131 开发板是广州周立功公司设计地EasyARM 系列开发套件之一,采用了PHILIPS 公司基于ARM7TDMI-S 核.单电源供电.LQFP64 封装地LPC2131,具有 JTAG 仿真调试.ISP 编程等功能.开发板上提供了一些键盘.LED.蜂鸣器等常用功能部件,还具有RS232 接口电路. I2C存储器电路.另外,用户也可以更换兼容地CPU进行仿真调试,如LPC2132.LPC2138. LPC2142 等.灵活地跳线组合(开发板内使用地所有I/O均可断开连接),还有用户I/O接口,极大地方便了用户进行32 位ARM嵌入式系统地开发实验.EasyARM2131 实验板功能特点:* 完全自主设计地软硬件.拥有自主版权地JTAG 仿真技术;* 支持ADS1.2 集成开发环境及其PHILIPS 所有型号ARM 微控制器地仿真与开发;* 采用“主板+CPU PACK 适配器+SD 卡适配器(标准配置)+多种可选配置适配器”* 地形式构成EasyARM2131 开发套件,标准配置地CPU PACK 主芯片为LPC2131FBD;* 板上地功能部件与CPU 之间,可以使用跳线器选择连接;* 全面支持9 种型号地64 PIN 小管脚ARM7 微控制器:-LPC213x(LPC2131/2132/2134/2136/2138)-内置USB 接口地LPC214x(LPC2142/2144/2146/2148)* 多种免费商业化软件包及其详细地开发文档:* 移植μC/OS-II到ARM7 软件包* 数据队列软件包* 串口驱动软件包* MODEM接口软件包* SPI总线软件包* I2C总线软件包* ZLG/FS V1.0 版本文件管理系统软件包* ZLG/GUI图形用户界面软件包* ZLG/SD卡读写软件包* ZLG/USB固件程序及其驱动程序软件包* 多种可选配置适配器:-各种型号地CPU PACK,用户可按需求和喜好配置主ARM 芯片-MG12864 点阵图型液晶模块* 所有I/O 口全部引出,方便用户连接外部电路地开发与使用;* 可进行GPIO 地控制实验,如键盘输入.蜂鸣器控制.模拟SPI 等;* 6 个独立按键(可用于外部中断.定时器捕获输入),8 个LED 指示灯;* 具有RS232 转换电路,可与上位机进行通讯,完成UART 通讯实验;* 可以与标准串行modem 直接接口,方便远程通讯;* 具有I2C接口和SPI/SSP接口输出;* 提供基于PC 地人机界面,方便调试实时时钟.串口通信等功能;* 可进行外部中断实验,学习向量中断控制器(VIC);* 定时器控制实验,如定时控制LED.定时器捕获等;* 使用板内地CAT1025(内含复位功能),完成I2C总线地实验;* 使用74HC595 芯片,实现SPI 接口数据发送.接收实验;* A/D 转换实验;DAC 转换实验(更换CPU 为LPC2132 及以上);* 实时时钟控制实验;* WDT 及低功耗控制实验;* 54 个基础实验及其大量地中间件软件包,完整地验证了几乎所有地硬件功能资源;* 详细地配套资料(《深入浅出ARM7—LPC213x/214x》(上/下册),北航出版社,其中上册为标准配置).2.2 温度传感器DS18B20DS18B20数字温度计是DALLAS公司生产地1-Wire,即单总线器件,具有线路简单,体积小地特点.因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样地数字温度计,十分方便.DS18B20产品地特点(1).只要求一个端口即可实现通信.(2).在DS18B20中地每个器件上都有独一无二地序列号.(3).实际应用中不需要外部任何元器件即可实现测温.(4).测量温度范围在-55.C到+125.C之间.(5).数字温度计地分辨率用户可以从9位到12位选择.(6).内部有温度上.下限告警设置.DS18B20地引脚介绍TO-92封装地DS18B20地引脚排列见图1,其引脚功能描述见表1.DS18B20地使用方法由于DS18B20采用地是1-Wire总线协议方式,即在一根数据线实现数据地双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件地方法来模拟单总线地协议时序来完成对DS18B20芯片地访问.由于DS18B20是在一根I/O线上读写数据,因此,对读写地数据位有着严格地时序要求.DS18B20有严格地通信协议来保证各位数据传输地正确性和完整性.该协议定义了几种信号地时序:初始化时序.读时序.写时序.所有时序都是将主机作为主设备,单总线器件作为从设备.而每一次命令和数据地传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收.数据和命令地传输都是低位在先.DS18B20地复位时序DS18B20地读时序对于DS18B20地读时序分为读0时序和读1时序两个过程.对于DS18B20地读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上.DS18B20在完成一个读时序过程,至少需要60us才能完成.DS18B20地写时序对于DS18B20地写时序仍然分为写0时序和写1时序两个过程.对于DS18B20写0时序和写1时序地要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上地“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线.2.3 MS12864R液晶屏简介MS12864R汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵).128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM). 主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示.画面移位.自定义字符.睡眠模式等模块引脚说明电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式 11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU 到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0第二字节:(并行)8位数据地高4位—格式 DDDD0000第三字节:(并行)8位数据地低4位—格式 0000DDDD串行接口时序参数:(测试条件:T=25℃ VDD=4.5V)3硬件设计3.1 ARM7开发板硬件设计系统原理图设计如图3-1所示,ARM7 LPC213系统实现如下功能:(1)控制温度传感器DS18B20读取当前温度值;(2)控制ARM7内部时钟资源读取时间和日期;(3)控制LCD液晶屏显示当前温度.时间和日期;(4)控制LED温度超限报警.图3-1 系统原理图3.2 LCD液晶屏显示设计:LCD液晶屏显示电路如图3-2所示.该液晶可实现显示当前年.月.日.周.时.分秒和温度值,具体控制和实现方法如下:(1)ARM7地P0.0-P0.7口连接液晶屏地DBO-DB7,控制对液晶屏并行数据读和写;(2)ARM7地P0.8口连接液晶屏地RS口,控制并行地指令/数据选择信号;(3)ARM7地P0.9口连接液晶屏地R/W口,控制并行地读写选择信号;(4)ARM7地P0.10口连接液晶屏地EN口,控制并行地使能信号;;(5)ARM7地P0.11口连接液晶屏地PSB口,控制并/串行接口选择:H-并行;L-串行;(6)ARM7地P0.12口连接液晶屏地RET口,实现对液晶屏地复位,低电平有效;图3-2LCD液晶屏电路图3.3 DS18B20温度传感器地设计电路如图3-3所示,该温度传感器电路可实现对温度传感器DS18B20数据地读写,具体控制方法如下:(1) ARM7地P0.30口连接DS18B20地DQ口,控制串行数据地读和写;(2) DS18B20 地VDD连接到ARM7开发板地VDD上;(3) DS18B20 地GND连接到ARM7开发板地GND上;图3-3 温度传感器电路4 系统地软件设计4.1系统主流程图图4-1为系统主流程图,主流程图具体介绍如下:(1)系统初始化包括对DS18B20进行初始化.设定GPIO.RTC初始化.液晶屏初始化;(2)初始化之后显示当前室内温度同时显示日期和时间;(3)与此同时进行按键判断,如果有按键继续判断是什么按键,如果是修改时间按键那么修改时间;如果是修改日期按键那么修改日期.如没有按键按下,那么判断室内温度是否超过预先设定值,如果超过驱动LED闪烁报警.图4-1 系统主流程图4.2温度传感器功能模块图4-2为温度传感器功能模块流程图;图4-2 温度传感器功能模块流程图4.3液晶显示功能模块图4-3为液晶显示功能模块流程图;图4-3 液晶显示功能模块流程图5总结本系统利用控制芯片.温度传感器.LCD液晶屏.LED等分别实现:(1)实时显示当前室内温度(2)显示年.月.日.星期.时.分.秒;(3)能够通过键盘输入日期和时间地初值;(4)温度超限报警;系统设计简便.实用性强.操作简单.程序设计简便.系统不足:时间和日期初值设定中利用按键较多,此外还没有充分考虑到温度超限报警地多变性,温度报警上限不可调节,只能预先程序中设定超限报警温度值.一周地综合电子工艺课程设计结束了,可能在别人看来,这或许只是一个小地设计,可是它给于我地却不仅仅是这样,认真地做课程设计,运用ARM做一个系统地东西,我从心里给予了足够地重视.刚开始做总是出问题,多次重新分析,从细节着手寻找问题,最后找到了.发现自己想象地太多.太复杂,实际上只需要很简单地一种方法就可以地,问题解决了,也给我很多收获.我觉得自己地方法不可行,关键地原因在于自己对ARM地工作原理没有透彻地理解,所以就不能很好地理解老师地设计要求,结果就造成了很多地弯路,找不到一种合理地途径去解决问题.希望以后有机会可以多做一些这样地设计,增强自己地设计意识,加深所学地知识.参考文献[1] 郁有文传.感器原理及工程应用(第三版).西安电子科技出版社,2008.7[2] 阎石.数字电子技术基础(第四版).高等教育出版社,1998.11[3] 周立功.ARM嵌入式系统基础教程(第二版).北京航空航天大学出版社,2008.9[4] 汪建军.基于非平衡电桥地电阻数字温度计设计[J].浙江万里学院学报,2009[5] 老虎工作室.电路设计与制板protel99se典型实例.人民邮电出版社[6] 宋文绪.杨帆.传感器与检测技术[M].高等教育出版社,2004:附录A/********************************************************************** ************* 描述: **(1)此程序所有延时采用定时器做(2)开发板上地P0.30口连接温度传感器DQ口线(3)开发板上P0.0-P0.7口连接液晶屏地DBO-DB7,其他液晶口线连接详见程序中宏定义(4)如需液晶显示地更清楚,需在液晶屏上加10K电位器,调节液晶屏输入参考电压*********************************************************************** **********/#include <LPC213X.H>#define eq 1<<30#define uint8 unsigned char#define Fpclk 11059200#define key1 1<<16#define key2 1<<17#define key3 1<<18#define key4 1<<19#define key5 1<<20#define key6 1<<21int nn=0,yy=0,rr=0,zz=0,ss=0,ff=0,mm=0;/*******************定义与LCD相关地宏*******************/#define LCD_DATA 0xFF#define LCD_DI 1<<8 //与p0.8对应#define LCD_RW 1<<9 //与p0.9对应#define LCD_EN 1<<10 //与p0.10对应.#define LCD_PSB 1<<11 //与p0.11对应//电路直接拉高#define LCD_RST 1<<12 //与p0.12对应//上电自动复位,一般也可以不接*#define clear_screen 0x01#define reset_address 0x02#define set_point 0x06 // 0000_0110#define display_set 0x0c //显示设定#define cursor_shift_control 0x1c //0001_1100#define function_set 0x30 //功能设定基本指令集#define function_set_ext 0x36 //功能设定扩充指令集绘图开//#define set_CGRAM_ADD#define set_DDRAM_ADD 0x80//#define write_data_intenalRAMunsigned char digit[10]={"0123456789"}; //定义字符数组显示数字void delay1u(unsigned long t){T1PR = 0x00000000; //Load prescalerT1TCR = 0x00000003; //Reset counter and prescalerT1MCR = 0x00000003; //On match reset the counter and generate an interruptT1MR0 = t*0x0f; //Set the cycle timeT1TCR = 0x00000001; //enable timerwhile((T1IR & 0x01) == 0);T1IR = 0x01;T1TCR = 0x00000000;}/****************************************************************************** ********************************************************************************************************* ***************************//****************************************************************************** ********************************************************************************************************* ***************************/void LCD_DATA_input(){IO0DIR = IO0DIR & (~LCD_DA TA); //把p1.16-p1.23设定为输入}/****************************************************************************** ********************************************************************************************************* ***************************/void LCD_DATA_output(){IO0DIR = IO0DIR | LCD_DA TA; //设定p0.0-p0.7为输出}/****************************************************************************** ********************************************************************************************************* ***************************/void CheckState( ) //状态检查,LCD是否忙?{delay1u(200);//while(read_instruct());}/********************************************************************************************************//****************************************************************************** ***************************** 函数名称:GPIO_Init()*** 函数功能:初始化IO端口,包含一个uart0,三个按键输入,以及几个普通地输入输出端口. *** 入口参数:无*** 出口参数:无******************************************************************************* ***************************//*void GPIO_init(){PINSEL0 = 0;IO0DIR = 0xFF<<8;}*//****************************************************************************** ***************************** 函数名称:w_data(unsigned char data_Lcm)*** 函数功能:给LCD发送数据或者命令.*** 入口参数:data_Lcm*** 出口参数:无******************************************************************************* ***************************/void W_data(uint8 data_Lcm){CheckState();LCD_DATA_output();IO0SET = LCD_DI;IO0CLR = LCD_RW;IO0CLR = 0xFF;IO0SET = data_Lcm;IO0SET = LCD_EN;IO0CLR = LCD_EN;}/****************************************************************************** ***************************** 函数名称:*** 函数功能:*** 入口参数:*** 出口参数:******************************************************************************* ***************************/void W_instruct(uint8 data_Lcm){CheckState();LCD_DATA_output();IO0CLR = LCD_DI;IO0CLR = LCD_RW;IO0CLR = 0xFF;IO0SET = data_Lcm;IO0SET = LCD_EN;IO0CLR = LCD_EN;}/****************************************************************************** ***************************** 函数名称LCD_Init()*** 函数功能:初始化lcd显示屏*** 入口参数:无*** 出口参数:无******************************************************************************* ***************************/void init_lcd(void){IO0SET = LCD_RST;IO0CLR = LCD_RST;IO0SET = LCD_RST;IO0SET = LCD_PSB;IO0SET = LCD_PSB;W_instruct(function_set);W_instruct(display_set);W_instruct(clear_screen);W_instruct(reset_address);W_instruct(set_DDRAM_ADD);}/****************************************************************************** ***************************** 函数名称:*** 函数功能:写汉字到LCDx_add 显示RAM 地地址dat1/dat2 显示汉字编码指定地位置*** 入口参数:*** 出口参数:******************************************************************************* ***************************//*void display(uint8 x_add,uint8 dat1,uint8 dat2){W_instruct(x_add); //1xxx,xxxx 到地址计数器ACW_data(dat1);W_data(dat2);}*//****************************************************************************** **************************//****************************************************************************** ***/void write(unsigned char date){unsigned char i=0;for (i=8; i>0; i--){IO0DIR |= eq; //改回输出IO0SET |= eq;delay1u(2);IO0CLR = eq;if(date&0x01){IO0SET |= eq; //释放总线delay1u(80);}else{IO0CLR = eq;delay1u(80);}delay1u(30);IO0SET |= eq;delay1u(3);date>>=1;}delay1u(6);}unsigned char read(){unsigned char i=0;unsigned char date = 0;for (i=8;i>0;i--){date>>=1;IO0DIR |= eq; //改回输出IO0SET |= eq;delay1u(2);IO0CLR = eq; // 给脉冲信号delay1u(2);IO0SET |= eq;delay1u(13);IO0DIR = IO0DIR&0xBFFFFFFF; // 拉高总线输入delay1u(12);if(IO0PIN&eq)date |=0x80;delay1u(3);}return date;}unsigned char innit(){unsigned char num;IO0DIR |= eq;//稍做延时IO0CLR = eq; //将DQ拉低delay1u(600); //精确延时大于480us 480 IO0SET = eq;delay1u(30);IO0DIR &= 0xBFFFFFFF; //拉高总线输入delay1u(30);if((IO0PIN &eq) ==0){num=0;}else{num=1;}IO0SET = num;delay1u(200); //300return num;}void zhun(){innit();write(0xCC);write(0x44);delay1u(900000);innit();write(0xCC);write(0xBE);}void display_temp1(unsigned char x){int i;unsigned char a,b,c; //j,k,l分别储存温度地百位.十位和个位unsigned char k[9] = {"温度是:"};unsigned char l[16]=("数字温度计姚--连");W_instruct(0x88);for(i=0;i<9;i++)W_data(k[i]);W_instruct(0x98);for(i=0;i<16;i++)W_data(l[i]);a=x/100; //取百位b=(x%100)/10; //取十位c=x%10; //取个位W_instruct(0x8C); //写显示地址,将在第2行第7列开始显示W_data(digit[a]); //将百位数字地字符常量写入LCDW_data(digit[b]); //将十位数字地字符常量写入LCDW_data(digit[c]); //将个位数字地字符常量写入LCDdelay1u(100); //延时1ms给硬件一点反应时间}void display_temp2(unsigned char x){unsigned char t[] ={"℃"} ;//写显示地址,将在第2行第11列开始显示W_data('.');W_data(digit[x]); //将小数部分地第一位数字字符常量写入LCDW_instruct(0x8F);W_data(t[0]);W_data(t[1]);W_data(t[2]);delay1u(100); //延时1ms给硬件一点反应时间}/******************************************************************************** ************************** 函数名称:RTCInit()** 函数功能:初始化实时时钟** 入口参数:无** 出口参数:无******************************************************************************* *************************/void RTCInit (void){PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器PREFRAC = Fpclk - (Fpclk / 32768) * 32768;CCR = 0x00; // 禁止时间计数器YEAR = 2008+nn;MONTH = 04+yy;DOM = 01+rr;DOW = 4+zz;HOUR = 8+ss;MIN = 30+ff;SEC = 59+mm;CIIR = 0x01; // 设置秒值地增量产生1次中断CCR = 0x01; // 启动RTC}/******************************************************************************** ************************** 函数名称:SendTimeRtc()** 函数功能:读取RTC地时间值,并将读出地时分秒值通过串口送到上位机显示.** 入口参数:无** 出口参数:无******************************************************************************* *************************/void SendTimeRtc (void){unsigned char a,b,c,d;int datas;int times;int bak;unsigned char t[] ={"年"};unsigned char s[] ={"月"};unsigned char r[] ={"日"};unsigned char m[] ={"周"};unsigned char n[] ={"时"};unsigned char p[] ={"分"};unsigned char q[] ={"秒"};times = CTIME0; // 读取完整地时钟寄存器datas = CTIME1;W_instruct(0x80);W_data(0x02); //显示笑脸W_data(0x02); //显示笑脸bak = (datas >> 16) & 0xfff; // 获取年a=bak / 1000;bak = bak % 1000;b=bak / 100;bak = bak % 100;c=bak / 10;d=bak % 10;W_instruct(0x81);W_data(digit[a]); //将千位数字地字符常量写入LCD W_data(digit[b]); //将百位数字地字符常量写入LCD W_data(digit[c]); //将十位数字地字符常量写入LCD W_data(digit[d]); //将个位数字地字符常量写入LCD W_instruct(0x83);W_data(t[0]);W_data(t[1]);bak = (datas >> 8) & 0x0f; // 获取月a=bak / 10;b=bak % 10;W_instruct(0x84);W_data(digit[a]);W_data(digit[b]);W_instruct(0x85);W_data(s[0]);W_data(s[1]);bak = datas & 0x1f; // 获取日c=bak / 10;d=bak % 10;W_instruct(0x86);W_data(digit[c]);W_data(digit[d]);W_instruct(0x87);W_data(r[0]);W_data(r[1]);bak = (times >> 24) & 0x07; // 获取星期a=bak;W_instruct(0x90);W_data(m[0]);W_data(m[1]);W_instruct(0x91);W_data(digit[a]);bak = (times >> 16) & 0x1f; // 获取小时a=bak / 10;b=bak % 10;W_instruct(0x92);W_data(digit[a]);W_data(digit[b]);W_instruct(0x93);W_data(n[0]);W_data(n[1]);bak = (times >> 8) & 0x3f; // 获取分钟a=bak / 10;b=bak % 10;W_instruct(0x94);W_data(digit[a]);W_data(digit[b]);W_instruct(0x95);W_data(p[0]);W_data(p[1]);bak = times & 0x3f; // 获取秒钟a=bak / 10;b=bak % 10;W_instruct(0x96);W_data(digit[a]);W_data(digit[b]);W_instruct(0x97);W_data(q[0]);W_data(q[1]);}int main(){unsigned char a,b,TN,TD ;PINSEL0 = 0;PINSEL1 = 0;IO0DIR = 0x0000FFFF;IO1DIR = 0xFFFFFFFF;RTCInit();// GPIO_init();init_lcd();while(1){zhun() ;b=read();a=read();TN=a*16+b/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出地是温度地整数部分,小数部分被丢弃了TD=(b%16)*10/16;display_temp1(TN);display_temp2(TD);if(TN>=33){IO1PIN = IO1PIN ^ 0xFFFFFFFF;}else{IO1SET =0XFFFFFFFF;}if((key1&IO0PIN)==0){nn=nn+1;RTCInit();}else if((key2&IO0PIN)==0){yy=yy+1;RTCInit();}else if((key3&IO0PIN)==0){rr=rr+1;RTCInit();}else if((key4&IO0PIN)==0){zz=zz+1;RTCInit();}else if((key5&IO0PIN)==0){ss=ss+1;RTCInit();}else if((key6&IO0PIN)==0){ff=ff+1;RTCInit();}while (0 == (ILR & 0x01)); // 等待RTC增量中断ILR = 0x01; // 清除中断标志SendTimeRtc();}}版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。

DSB数字温计设计与实现

DSB数字温计设计与实现

DS18B20数字温度计地设计与实现一、实验目地1.了解DS18B20数字式温度传感器地工作原理.2.利用DS18B20数字式温度传感器和微机实验平台实现数字温度计.二、实验内容与要求采用数字式温度传感器为检测器件,进行单点温度检测.用数码管直接显示温度值,微机系统作为数字温度计地控制系统.b5E2RGbCAP1.基本要求:(1>检测地温度范围:0℃~100℃,检测分辨率0.5℃.(2>用4位数码管来显示温度值.(3>超过警戒值<自己定义)要报警提示.2.提高要求(1>扩展温度范围.(2>增加检测点地个数,实现多点温度检测.三、设计报告要求1.设计目地和内容2.总体设计3.硬件设计:原理图<接线图)及简要说明4.软件设计框图及程序清单5.设计结果和体会<包括遇到地问题及解决地方法)四、数字温度传感器DS18B20由DALLAS半导体公司生产地DS18B20型单线智能温度传感器,属于新一代适配微处理器地智能温度传感器,可广泛用于工业、民用、军事等领域地温度测量及控制仪器、测控系统和大型设备中.它具有体积小,接口方便,传输距离远等特点.p1EanqFDPw1.DS18B20性能特点DS18B20地性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值<9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正地只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度地上、下限,⑥内含寄生电源.DXDiTa9E3d2.DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发地温度报警触发器TH和TL,高速暂存器.64位光刻ROM是出厂前被光刻好地,它可以看作是该DS18B20地地址序列号.64位ROM结构图如图2所示.不同地器件地址序列号不同. DS18B20地管脚排列如图1所示.RTCrpUDGiT图1 DS18B20引脚分布图5PCzVD7HxA图2 64位ROM 结构图 DS18B20高速暂存器共9个存储单元,如表所示:以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到地12位数据,存储在18B20地两个高低两个8位地RAM 中,二进制中地前面5位是符号位.如果测得地温度大于0,这5位为0,LSBMSB 8位检验CRC 48位序列号 8位工厂代码<10H )只要将测到地数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到地数值需要取反加1再乘于0.0625才能得到实际温度.jLBHrnAILg3.DS18B20控制方法DS18B20有六条控制命令,如表所示:4.DS18B20地通信协议DS18B20器件要求采用严格地通信协议,以保证数据地完整性.该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙.与DS18B20地通信,是通过操作时隙完成单总线上地数据传输.发送所有地命令和数据时,都是字节地低位在前,高位在后.xHAQX74J0Xa)复位和应答脉冲时隙每个通信周期起始于微控制器发出地复位脉冲,其后紧跟DS18B20发出地应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20地数据.在每一个时隙,总线只能传输一位数据.时序图见图3.LDAYtRyKfEb)写时隙当主机将单总线DQ从逻辑高拉到逻辑低时,即启动一个写时隙,所有地写时隙必须在60~120us完成,且在每个循环之间至少需要1us地恢复时间.写0和写1时隙如图所示.在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线.时序图见图4.Zzz6ZB2Ltkc)读时隙DS18B20器件仅在主机发出读时隙时,才向主机传输数据.所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据.所有地读时隙至少需要60us,且在两次独立地读时隙之间,至少需要1us地恢复时间.每个读时隙都由主机发起,至少拉低总线1us.在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平.若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态.DS18B20发出地数据,在起始时隙之后保持有效时间为15us.因而主机在读时隙期间,必须释放总线.并且在时隙起始后地15us之内采样总线地状态.时序图见图4.dvzfvkwMI1图3 复位和应答脉冲时隙图4 读写时序五、硬件电路设计按照系统设计功能地要求,确定系统由3个模块组成:主控制器、测温电路和显示电路.数字温度计总体电路结构框图如图5所示.rqyn14ZNXI图5 电路结构框图在硬件上,DS18B20与单片机地连接有两种方法,一种是Vcc接外部电源,GND接地,I/O与单片机地I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O.无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右地上拉电阻.EmxvxOtOco六、软件设计系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示数据刷新子程序等等.1.主程序主程序地主要功能是负责温度地实时显示、读出并处理DS18B20地测量温度值,温度测量每1s进行一次,其程序流程图如图6.SixE2yXPq5图6 主程序流程图2.读出温度子程序读出温度子程序地主要功能是读出RAM中地9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据地改写.其程序流程图如图7所示.6ewMyirQFL图7 读出温度子程序流程图3.温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换地完成.温度转换命令子程序流程图如图8所示.kavU42VRUs4.计算温度子程序计算温度子程序将RAM中读取值进行BCD码地转换运算,并进行温度值正负地判定,其流程图如图9所示.图8 温度转换命令子程序流程图图9 计算温度子程序流程图显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲区中地显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位.程序流程图如图10所示.y6v3ALoS89个人收集整理资料,仅供交流学习,勿作商业用途图10 显示数据刷新子程序流程图11 / 11。

单片机与DSB的数字温度计设计方案6

单片机与DSB的数字温度计设计方案6

信息与通信工程学院课程设计项目:基于单片机的DS18B20数字温度计设计指导老师:湛腾西设计人:尹世强彭娇礼班级:电实11-1BF2018年 06月 18 日1 设计要求1.1 基本要求1、测量精度0.5℃2、范围:-50℃-110℃3、可测多点温度,演示两点以上4、LED直读显示5、可任意设计温度报警的上限与下限6、可上传通信<RS232口),也可以相互对通(485口>1.2 扩展功能温度报警,能任意设定温度范围实现声光报警;每隔10分钟记录一次温度数据,至少能查询过去10个时刻的温度情况。

2元器件清单3 总体方案设计2.1 方案论证2.1.1 方案一由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。

这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。

2.1.2 方案二考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。

另外DS18B20具有3引脚的小体积封装,测温范围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。

以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二。

图1 系统总体方框图2.2 总体设计框图本方案设计的系统由单片机系统、数字温度传感器、LED显示模块、按键控制模块、温度报警模块组成,其总体架构如图1。

3 硬件设计3.1 单片机系统1.本设计采用STC89C52单片机作为控制器,完成所有功能的控制,包括:●DS18B20数字温度传感器的初始化和读取温度值●LED数码管显示驱动与控制●按键识别和响应控制●温度设置和报警●温度值的存储和读取2.单片机系统电路原理图:图2 单片机系统原理图4.1 数字温度传感器模块4.1.1 DS18B20性能●独特的单线接口仅需一个端口引脚进行通信●简单的多点分布应用●无需外部器件●可通过数据线供电●零待机功耗●测温范围-55~+125℃,以0.5℃递增●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃●温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字●应用包括温度控制、工业系统、消费品、温度计和任何热感测系统●负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作4.1.2 DS18B20外形及引脚说明图3DS18B20外形及引脚●GND:地●DQ:单线运用的数据输入/输出引脚●VD:可选的电源引脚4.1.3 DS18B20接线原理图单总线通常要求接一个约 4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。

单片机及DSB温度传感器的数字温度计设计方案

单片机及DSB温度传感器的数字温度计设计方案

基于51单片机及DS18B20温度传感器的数字温度计设计摘要本设计采用的主控芯片是ATMEL公司的AT89S52单片机,数字温度传感器是DALLAS公司的DS18B20。

本设计用数字传感器DS18B20测量温度,测量精度高,传感器体积小,使用方便。

所以本次设计的数字温度计在工业、农业、日常生活中都有广泛的应用。

单片机技术已经广泛应用社会生活的各个领域,已经成为一种非常实用的技术。

51单片机是最常用的一种单片机,而且在高校中都以51单片机教材为蓝本,这使得51单片机成为初学单片机技术人员的首选。

本次设计采用的AT89S52是一种flash型单片机,可以直接在线编程,向单片机中写程序变得更加容易。

本次设计的数字温度计采用的是DS18B20数字温度传感器,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。

本设计根据设计要求,首先设计了硬件电路,然后绘制软件流程图及编写程序。

本设计属于一种多功能温度计,温度测量范围是-55℃到125℃。

温度值的分辨率可以被用户设定为9-12位,可以设置上下限报警温度,当温度不在设定的范围内时,就会启动报警程序报警。

本设计的显示模块是用四位一体的数码管动态扫描显示实现的。

在显示实时测量温度的模式下还可以通过查询按键查看设定的上下限报警温度。

关键词:单片机、数字温度计、DS18B20、AT89S52目录1 概述- 1 -1.1系统概述- 1 -2 系统总体方案及硬件设计- 2 -2.1 系统总体方案- 2 -2.1.1系统总体设计框图- 2 -2.1.2各模块简介- 2 -2.2 系统硬件设计- 5 -2.2.1 单片机电路设计- 5 -2.2.2 DS18B20温度传感器电路设计- 6 -2.2.3 显示电路设计- 6 -2.2.4 按键电路设计- 7 -2.2.5 报警电路设计- 8 -3 软件设计- 9 -3.1 DS18B20程序设计- 9 -3.1.1 DS18B20传感器操作流程- 9 -3.1.2 DS18B20传感器的指令表- 9 -3.1.3 DS18B20传感器的初始化时序- 10 -3.1.4 DS18B20传感器的读写时序- 10 -3.1.5 DS18B20获取温度程序流程图- 11 -3.2 显示程序设计- 12 -3.3 按键程序设计- 13 -4实物制作及调试- 14 -5电子综合设计体会- 15 -参考文献- 15 -附1 源程序代码- 17 -附2 系统原理图- 32 -1 概述1.1系统概述本系统所设计的数字温度计采用的是DS18B20数字温度传感器测温,DS18B20直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。

使用DSB温度传感器设计温度控制系统设计

使用DSB温度传感器设计温度控制系统设计

使用DS18B20温度传感器设计温度控制系统设计设计说明:1.1 使用DS18B20温度传感器设计温度控制系统1.在数码管上可显示采集到的温度(0~99.9℃)2.当温度低于27℃时,蜂鸣器开始以慢地“滴”声报警,P1.0口发光二极管闪烁,当温度继续降低并低于25℃时,蜂鸣器开始以快地“滴”声报警,P1.0和P1.1口发光二极管闪烁。

3.当温度高于30℃时,蜂鸣器开始以慢地“滴”声报警,P1.2口发光二极管闪烁,当温度继续升高并高于32℃时,蜂鸣器开始以快地“滴”声报警,P1.2和P1.3口发光二极管闪烁。

1.2 元件说明:(1)使用的元器件DS18B20:电压范围3.0~5.5V ;温度可测范围-55~+125℃;可编程分辨率为9~12位,对应的可分辨温度为:0.5℃、0.25℃、0.125℃和0.0625℃;测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

其引脚定义图如下图:(3) 硬件连接图硬件连接图如上图:1.3 工作原理首先看控制DS18B20的指令,只列举此设计用到的,如下表:原理:DS18B20测量外部温度,经过温度转换,将温度物理量转换成数字信号,再传送数据到AT89C52,AT89C52控制数码管显示及二极管、扬声器的工作,从而实现了温度在数码管上显示,还有温度范围的亮灯与报警。

1.4 C语言编程见附录1.5 实验结果可将环境温度经过DS18B20温度传感器,在数码管上显示,显示准确。

CCH 跳过ROM 44H 温度转换BEH 读暂存器附录#include<reg51.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P2^2;sbit dula=P2^6;sbit wela=P2^7;sbit beep=P2^3;uint temp;float f_temp;uint warn_l1=270;uint warn_l2=250;uint warn_h1=300;uint warn_h2=320;sbit led0=P1^0;sbit led1=P1^1;sbit led2=P1^2;sbit led3=P1^3;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87,0xff,0xef}; void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(){uint i;ds=0;i=103;while(i>0) i--;ds=1;i=4;while(i>0) i--;}bit tempreadbit(){uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8; while(i>0) i--;return(dat);}uchar tempread(){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1);}return(dat);}tempwritebyte(uchar dat) {uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0) i--;}else{ds=0;i=8;while(i>0) i--;ds=1;i++;i++;}}}tempchange(){dsreset();delay(1);tempwritebyte(0xcc); tempwritebyte(0x44);}uint get_temp(){uchar a,b;dsreset();delay(1);tempwritebyte(0xcc); tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp=f_temp+0.05; return temp;}display(uchar num,uchar dat) {uchar i;dula=0;P0=table[dat];dula=1;dula=0;wela=0;i=0xff;i=i&(~((0x01)<<(num)));P0=i;wela=1;wela=0;delay(50);}dis_temp(uint t)uchar i;i=t/100;display(0,i);i=t%100/10;display(1,i+10);i=t%100%10;display(2,i);}warn(uint s,uchar led){uchar i;i=s;beep=0;P1=~(led);while(i--){dis_temp(get_temp());}beep=1;P1=0xff;i=s;while(i--){dis_temp(get_temp());}}deal(uint t){uchar i;if((t>warn_l2)&&(t<=warn_l1)){warn(40,0x01);}else if(t<=warn_l2){warn(10,0x03);}else if((t<warn_h2)&&(t>=warn_h1)) {warn(40,0x04);}else if(t>=warn_h2){warn(10,0x0c);}else{i=40;while(i--){dis_temp(get_temp());}}}init_com(){TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xfd;TL1=0xfd;TR1=1;}comm(char *parr){do{SBUF=*parr++;while(!TI);TI=0;} while(*parr);}main(){uchar buff[4],i;dula=0;wela=0;init_com();while(1){tempchange();for(i=10;i>0;i--){dis_temp(get_temp());}deal(temp);sprintf(buff,"%f",f_temp); for(i=10;i>0;i--){dis_temp(get_temp());}comm(buff);for(i=10;i>0;i--){dis_temp(get_temp());}}}使用DS18B20温度传感器设计温度控制系统设计班级:电082班姓名:于川洋学号:33号时间:2011-11.-11。

大学设计方案—DSB温度检测系统

大学设计方案—DSB温度检测系统

所属系电子工程系专业自动化学号 01208163姓名周何聪指导教师李振东起讫日期 2011.4 --- 2011.5设计地点东南大学成贤学院东南大学成贤学院毕业设计报告(论文)诚信承诺本人承诺所呈交的毕业设计报告(论文)及取得的成果是在导师指导下完成,引用他人成果的部分均已列出参考文献。

如论文涉及任何知识产权纠纷,本人将承担一切责任。

学生签名:日期:第1页共30 页目录摘要 (3)Abstract (4)第一章绪论 (5)§1.1 系统背景 (5)§1.2 系统概述 (5)第二章方案论证 (6)§2.1 传感器部分 (6)§2.2主控制部分 (7)§2.3 系统方案 (7)第三章硬件电路设计 (8)§3.1 电源以及看门狗电路 (8)§3.2键盘以及显示电路 (10)§3.2温度测试电路 (12)§3.3 串口通讯电路 (16)§3.4 整体电路 (17)第四章软件设计 (17)§4.1 概述 (17)§4.2 主程序方案 (17)§4.3 各模块子程序设计 (19)第五章系统调试 (21)§5.1 分步调试 (21)§5.2 统一调试 (21)结束语 (22)参考文献 (23)附录一:软件流程图 (25)附录二:电路原理图 (27)致谢 (30)第2页共30 页摘要DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。

本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并给出了软件流程图。

该系统由上位机和下位机两大部分组成。

下位机实现温度的检测并提供标准RS232通信接口,芯片使用了ATMEL公司的AT89C51单片机和DALLAS公司的DS18B20数字温度传感器。

dsb汇编设计报告附电路图和程序

dsb汇编设计报告附电路图和程序

d s b汇编设计报告附电路图和程序文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]基于AT89C51单片机和DS18B20的数字温度计1课题说明随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

本设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。

通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。

该器件可直接向单片机传输数字信号,便于单片机处理及控制。

另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

2 实现方法采用数字温度芯片DS18B20 测量温度,输出信号全数字化。

采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。

采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。

该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。

该系统扩展性非常强。

该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。

系统框图如图1所示。

图1 DS18B20温度测温系统框图3 硬件设计3.1 单片机最小系统设计3.1.1 电源电路图2 电源电路3.1.2 振荡电路与复位电路图3 振荡电路图4 复位电路3.2 DS18B20与单片机的接口电路图5 DS18B20与单片机的接口电路3.3 PROTEUS仿真电路图图6 PROTEUS仿真电路图4 软件设计系统程序主要包括主程序、读取温度子程序、数据转换子程序、显示数据子程序等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机原理及应用课程设计报告书题目:DS18B20数字温度计的设计姓名学号:李泽123621046熊侃123621042龚元123621038专业班级:信本一班指导老师:王耿设计时间: 2015年6月一、课题介绍本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器18B20,单片机AT89S52,,四位共阴极数码管一个,电容电阻若干。

18B20支持“一线总线”接口,测量温度范围-55°C~+125°C 。

在-10~+85°C 范围内,精度为±0.5°C 。

18B20的精度较差为± 2°C 。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。

本次数字温度计的设计共分为五部分,主控制器,LED 显示部分,传感器部分,复位部分,时钟电路。

主控制器即单片机部分,用于存储程序和控制电路;LED 显示部分是指四位共阳极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路。

测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。

本设计能完成的温度测量范围是-55°C~+128°C ,由于能力有限,不能实现报警功能。

二、方案论证方案一: 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,感温电路比较麻烦。

方案设计框图如下:方案二:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

三、系统软硬件设计1、硬件设计按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。

数字温度计总体电路结构框图所示:单片机的选择单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

复位电路设计单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用6.8KΩ的阻值,电容采用电容值为10μ的电解电容。

电路图如下:温度显示电路DS18B20AT89C52主控制器显示电路扫描驱动四位共阳极数码管,能够显示小数和负温度。

零下时,第一个数码管显示负号。

当温度超过99.9时,四个数码管全部亮。

列扫描用P3.0~P3.3口来实现,列驱动用9012三极管。

电路图如下:温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

电路图如下:系统总电路图如下:2、软件设计主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。

主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。

温度测量每1S进行一次。

主流程图如下:调用显示程序初始化1s到?N YYN 初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。

在读出时须进行CRC计算温度子程序并进行温度值正负的判定。

显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。

系统所运用的功能介绍:DS18B20与单片机之间采用串行通信的方式进行数据读写系统的调试及性能分析:硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。

软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。

本程序采用单片机汇编或C语言编写用Keil C51编译器编程调试。

软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成。

性能测试可用制作的温度机和已有的成品温度计同时进行测量比较。

由于DS18B20的精度很高,所以误差指标可以限制在0.5℃以内。

另外,-55~+125℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。

四、课程设计体会本次的课程设计使我们进一步巩固了书本上的知识,做到了学以致用。

这是我们第二次自己动手设计的电路,通过系统仿真软件protues和编译软件keil,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现,如温度上下限设置。

由于protues并不是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了大量的时间在网上查找,今后应该在这方面多多努力。

最后一步的焊接硬件也遇到了不少麻烦,P0端口没有加上拉电阻,P1端口没有加电阻导致数码管不亮或者亮度不够。

总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。

其次,要学以致用,理论联系实际,这样才会取得事半功倍的效果。

附件:DS18B20温度计C程序#include "reg51.h"#include "intrins.h"#define Disdata P1#define discan P3#define uchar unsigned char#define uint unsigned intsbit DQ=P3^7;sbit DIN=P1^7;uint h;uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x 07,0x08,0x08,0x09,0x09};//uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x bf};/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};uchar data temp_data[2]={0x00,0x00};uchar data display[5]={0x00,0x00,0x00,0x00,0x00};void delay(uint t){for(;t>0;t--);}scan(){char k;for(k=0;k<4;k++){Disdata=dis_7[display[k]];if(k==1){DIN=0;}discan=scan_con[k];delay(90);discan=0xff; }}ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0;delay(50);DQ=1;delay(6);presence=DQ;}delay(45);presence = ~DQ;}DQ=1;}void write_byte(uchar val){uchar i;for (i=8; i>0; i--){DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_(); DQ = val&0x01;delay(6);val=val/2;}DQ = 1;delay(1);}uchar read_byte(void){uchar i;uchar value = 0;for (i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ = 0;_nop_();_nop_();_nop_();_nop_();DQ = 1;_nop_();_nop_();_nop_();_nop_();if(DQ)value|=0x80;delay(6);}DQ=1;return(value);}read_temp(){ow_reset();write_byte(0xCC);write_byte(0xBE);temp_data[0]=read_byte();temp_data[1]=read_byte();ow_reset();write_byte(0xCC);write_byte(0x44);}work_temp(){uchar n=0;if(temp_data[1]>127){temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1 ;}display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); display[3]=display[4]/100;display[1]=display[4]%100;display[2]=display[1]/10;display[1]=display[1]%10;if(!display[3]){display[3]=0x0A;if(!display[2]){display[2]=0x0A;}} if(n){display[3]=0x0B;}//负温度时最高位显示"-"}main(){Disdata=0xff;discan=0xff;for(h=0;h<4;h++){display[h]=8;} ow_reset();write_byte(0xCC);write_byte(0x44);for(h=0;h<500;h++){scan();}while(1){read_temp();work_temp();for(h=0;h<500;h++){scan();}}}实物图照片:。

相关文档
最新文档