毕业论文(设计)
系(院) 机电院 专 业 电子信息工程
论文题目 温度测控系统的设计
学生姓名:
指导教师:
班 级:11级
学 号:
完成日期:2015 年 5月
东华理工大学长江学院毕业设计
2
东华理工大学长江学院毕业设计
温度控制系统
[摘要]本设计基于数字温度传感器DSl8B20与单片机ATS51结合实现最简温度检测和控制系统。该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,且体积小,携带方便,适用广,测量范围大。 [关键词]单片机 温度检测 温度控制
[Abstract] The design is based on the DSl8B20 which is produced by the U.S.Dallas Semiconductor company digital temperature sensor and MCU ATS51 which are used together to acheive the most simple temperature detection and control system. The systyem has simple structure , has a strong anti-interference ability and is suitable for harsh environment at the scene temperature measurement.At the same time,they are small in size, Easy to carry, Widely applicable,widely measurement range.
[Key words] Single-chip Temperature Measuring Temperature Control
目录
第一章 序言 ........................................................ 1
1.1课题背景 .................................................... 1 1.2温度检测发展过程 ............................................ 2 1.3国内外发展状况 .............................................. 3 第二章 方案论证 .................................................... 6
2.1方案比较 .................................................... 6 2.2方案的确定 .................................................. 9 第三章 系统设计 ................................................... 11
3.1 主要器件介绍 ............................................... 11 3.2 系统软件流程图 ............................................. 12 3.3系统硬件设计 ............................................... 14 第四章 Proteus的液晶温度显示器仿真设计 ............................ 11 第五章 系统实现调试 ............................................... 19
5.1分步调试 ................................................... 19 5.2 测试结果分析 ............................................... 20 5.3 调试中遇到的问题和解答 ..................................... 20 第六章 结束语 .................................................... 23 致谢 .......................................................... 27
参考文献 ....................................................... 28 附录一 系统源程序 .............................................. 29
第一章 序言
1.1 课题背景
电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么单片机技术的出现则是给现代工业控制测控领域带来了一次新的。目前,单片机在工业控制系统诸多领域得到了极为广泛的应用。特别是其中的C51系列的单片机的出现,具有更好的稳定性,更快和更准确的运算精度,推动了工业生产,影响着人们的工作和学习。
在现代社会中,温度报警装置不仅应用在工厂生产方面,其作用也体现到了各个方面,随着人们生活质量的提高,酒店厂房及家庭生活中都会见到温度报警装置,温度报警装置将更好的服务于社会.而今,数字温度计等家用电器随着生产技术的发展和生活水平的提高越来越普及,一个简单,稳定的温度报警系统能更好的适应市场。
单片微型计算机是大规模集成电路技术发展的产物,属电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点[1]。它的应用必定导致传统的控制检测技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
温度测量与控制是日常生活和工农业控制中最常碰到的问题之一,在保证产品质量、节约能源和安全生产等方面起着关键的作用,可以说它与人们的日常生活是息息相关的,因此,温度的准确测量和控制具有很大的现实意义。而在传统的温度测量系统中,往往采用模拟的温度传感器进行设计,必须经过A/D转换后才可以被微处理器识别和处理。这样的设计方法不仅对前端模拟信号处理电路提出了更高的要求,而且不具有数字通信和网络功能。
本设计基于单片机计的温度测量控制系统,是由美国Dallas半导体公司推出的数字温度传感器DSl8B20与ATS51结合实现的,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量。该系统显著的优点就是电路结构简单可靠,总的体积很小,可以随身携带,随时随地使用,测量范围比较大。
1.2 温度检测发展过程
在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度是需要测量和控制的重要参数之一。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。
采用MCS-51单片机来对温度进行检测,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的
质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。
在温度的采集上,我们用到了模拟信号转换器,通常使用一个被称为模拟/数字转换器(A/D)的电子器件,被广泛使用在电子信号处理中。它将线圈上的衰减振荡模拟波形变化量高速转换成单位时间的电压量数字信号以供MCU信息处理系统进行数字化处理,起到了将模拟信号数字化极为关键的桥梁作用。A/D转换器的速度越快,即对模拟信号的采样时间单位分得越细,图形记录就越真实。而对于波形振荡周期非常之短的线圈来说,它的电压随时间变化的速度非常之快,因而将震荡波形的模拟信号数字化变换时,要求使用变换速度非常高的A/D转换器,否则就不能正确采集、真实显示这个高速变化的波形。
另外,在温度测量中,热电偶的应用极为广泛,它具有结构简单、制造方便、测量范围广、精度高、惯性小和输出信号便于远传等许多优点。由于热电偶是一种有源传感器,测量时不需外加电源,使用十分方便,所以常被用作测量炉子、管道内的气体或液体的温度及固体的表面温度。此外,由于应用场合和测温环境的不同,在选择热电偶的分度号上是有所不同的,其原因是制作热电偶的材料不同,决定了它的特性,从而直接导致了所测温度环境的选择。
1.3 国内外发展状况
第二章 方案论证
2.1 方案比较
本文介绍了一种基于8086微处理器的温度测控系统,采用温度传感器AD590采集温度数据,用CPU控制温度值稳定在预设温度。当温度低于预设温度值时系统启动电加热器,当这个温度高于预设温度值时断开电加热器。该系统通过实验,取得了较为满意的控制效果。可应用在一些精度要求不太高的系统中。为了降低整个系统的成本,在满足性能的要求下,选择低成本器件,简化系统设计。本题设计有以下种方案考虑选择: 方案一:
采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的。而且在温度测量系统中,采用单片温度传感器,比如AD590、LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给单片机,这样就使得测温装置的结构较复杂。 方案二:
在测温系统中,传统的测温方法是将模拟信号采样进行AD转换,而为了获得较高的测温精度,就必须解决放大电路零点漂移等造成的误差补偿问题。美国DALLAS半导体公司推出的一款智能温度传感器DS18B20,与传统的测温元件相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以在93.75~750us内完成9~12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根线读写;温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无须额外电源。因而使用DS18B20可以使系统结构更趋简单,可靠性更高。它在测温精度、转换时间、传输距离、分辨率等方面都给用户的使用带来了方便,效果也更令人满意。
2.2方案确定
经过对以上两方案得分析、比较,我觉得方案二比较完善些,于是我采用方案二作为本场次设计的总体方案。
第三章 系统设计
3.1 主要器件简介
3.1 .1 ATS51的引脚说明
现在市场上的单片机种类繁多,但是由于本次设计实现的功能相对较简单,处理的数据相对较少,所以本设计选用通用型mcs-51系列8位单片机来实现,且选用Atmel公司生产地ATS51单片机,选用ATS51单片机的主要理由如下: --ISP线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离.是一个强大易用的功能。
-- 最高工作频率为33MHz,大家都知道C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。 -- 具有双工UART串行通道。
-- 内部集成看门狗计时器,不再需要像C51那样外接看门狗计时器单元电路。 -- 双数据指示器。 -- 电源关闭标识。
-- 全新的加密算法,这使得对于S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
-- 兼容性方面:向下完全兼容51全部字系列产品.比如8051,C51等等早期MCS-51兼容产品。
ATS51单片机芯片有40条引脚,其引脚示意图及功能分类[3]如图2.3所示
图1 ATS51芯片
主要引脚功能如下: VCC:供电电压。 GND:接地。
P0口:P0口是一个三态双向口。
P1口:P1口是8位准双向I/O口,内部提供上拉电阻。
P2口:P2口也是准双向口,具有高8位地址总线输出和通用I/O接口两种功能,内部提供上拉电阻。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个LSTTL门电流。
表1 P3口的引脚功能表
P3.0 RXD(串行输入口) P3.4 T0(计时器0外部输入脚) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.5 T1(计时器1外部输入脚) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) 3.1.2 DS18B20的引脚及其与单片机的连接方式:
1)引脚
·DQ为数字输入输出接口
·VDD为外接电源输入端(在寄生电源接线方式时接地,又可由外部提供电源,范围3.O~5.5 V。)
2)与单片机的连接方式
单线数字温度传感器DS18B20与单片机连接电路非常简单,引脚1(GND)接地,引脚3(VCC)接电源+5V,引脚2(DQ)接单片机输入/输出一个端口,电源+5V和信号线(DQ)之间接有一个4.7千欧的电阻。
由于每片DS18B20含有唯一的串行数据口,所以在一条总线上可以挂接多个DS18B20芯片。
外部供电方式单点测温电路如图2所示。 外部供电方式多点测温电路如图3所示。
图2 外部供电方式单点测温电路
图3 外部供电方式多点测温电路
3)DSl8B20的主要特性
·独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即实 现微处理器与DS18B20的双向通行。
·在使用中不需要任何外围元件。
·可用数据线供电,电压范围:+3.0~+5.5V。 ·测温范围:-55~+125℃,固有测温分辨率为0.5℃。 ·通过编程可实现9~12位的数字读数方式。 ·用户可自设定非易失性的报警上下限值。
·支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点 测温。
·负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 4)DS18B20的内部结构
DS18B20内部结构主要由位ROM、温度灵敏元件、内部存储器和配置寄存器四部分组成,如图4所示。
图4 DS18B20的内部结构图
·位ROM。位ROM的内容是位序列号,是出厂前被光刻好的,它可以被看做是该DS18B20的地址序列码,其作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂多个DS18B20的目的。
·温度灵敏元件。温度灵敏元件完成对温度的测量,测量后的结果存储在两个8比特的温度寄存器中,这两个温度寄存器的定义如表2和3所示。
表2 LS字节
位7 位6 位5 位4 位3 位2 位1 位0
23 22 21
20 2-1 2-2 2-3 2-4 表3 MS字节
位15 位14 位13 位12 位11 位10 位9 位8
S S S S S 26 25 24 5)DS18B20的通信协议
DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。故主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,然后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
6) DS18B20的测温原理
DS18B20的测温原理如图4所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
3.1.3 显示电路(LCD1602)
1)LCD1602:所谓的1602即是16字符*2行的字符型LCD显示器,它由32个字符点阵块组成,每个字符点阵块由5×7或5×10个点阵组成,可以显示ASCII码表中的所有可视的字符。它内置了字符产生器ROM(CGROM)、字符产生器RAM(CGRAM)和显示数据RAM(DDRAM)。1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
2)1602引脚及其具体功能如下表: 表4 1602引脚及功能
编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 编号 9 10 11 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 数据/命令选择端(H/L) 12 读/写选择端(H/L) 使能信号 Data I/O Data I/O 13 14 15 16 3)LCD1602基本操作时序:
读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字 写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:无 读数据:输入:RS=H,RW=H,E=H 输出:D0~D7=数据 写数据:输入:RS=L,RW=H,E=H 输出:无
3.2 系统软件设计流程图
本设计共分为四大部分:第一部分是LCD液晶显示程序,第二部分是DS18B20温度采集转换程序,第三部分是按键扫描程序,第四部分是输出控制程序:
程序流程图如图9所示:
开始 显示OK LCD初始读取温度写入报警上下转换、显yes 复yes no DS18B20处是否 yes yes 按键扫描 Relay OFF 报警 no 报警 未超上下限? no 达到上限? 达到下限? 显ERROR 示结束 Relay ON
图9 程序流程图
程序流程控制说明:LCD进行初始化设置,并写入报警温度上、下限值。然后对温度传感器DS18B20进行复位,检测是否存在,如果传感器没有正常工作,LCD显示屏上会显示出“ERROR”的信息,如果工作正常显示屏上将显示出“OK”。
接着读取温度数据,再经转换,由LCD显示屏显示出来。同时,不断地将实时温度与设定的报警温度上、下限值进行比较,如果超过报警上限,鸣响并开关断加热源;如果超过报警下限,鸣响并接通加热源。
由于报警温度的上、下限值的设定、查看和调整都是由按钮开关控制的,所以程序还要对按键进行扫描,如此不断循环。 部分主程序与子程序
MAIN:
ACALL SET_LCD ;LCD初始化设置子程序 ACALL WR_THL ;将报警上下线写入暂存寄存器 TOOP: ACALL RESET_1820 ;18B20复位子程序 JNB FLAG,TOOP1 ;DS1820不存在 ACALL MEU_OK ;显示\"OK\"菜单
ACALL RE_THL ;把EEROM里温度报警值拷贝回暂存器 ACALL TEMP_BJ ;显示温度标记\"C\" JMP TOOP2
TOOP1: ACALL MEU_ERROR ;显示\"ERROR\"菜单 ACALL TEMP_BJ ;显示温度标记 JMP $
;-------------------------- TOOP2:
ACALL RE_TEMP ACALL SET_DATA
ACALL TEMP_COMP ;实际温度值与标记温度值比较子程序 ACALL P_KEY ;键扫描子程序
SJMP TOOP2
;--------- 读取温度数据子程序 --------- RE_TEMP:
ACALL RESET_1820 ;18B20复位子程序 JNB FLAG,TOOP1 ;DS1820不存在 MOV A,#0CCH ;跳过ROM匹配 ACALL WRITE_1820 ;写入子程序 MOV A,#44H ;发出温度转换命令 ACALL WRITE_1820 ;调写入子程序 ACALL RESET_1820 ;调复位子程序
MOV A,#0CCH ;跳过ROM匹配 ACALL WRITE_1820 ;写入子程序 MOV A,#0BEH ;发出读温度命令 ACALL WRITE_1820 ;写入子程序 ACALL READ_1820 ;调用读入子程序 RET
3.3 系统硬件设计
3.3.1 系统整体电路图
本温度系统硬件电路是由ATS51单片机、数字温度传感器DS18B20和液晶显示以及输出控制4个模块组成的。其整体电路图如下4.1所示:
D4R4R7R47R正常C22u2D3危险X1U1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383737RR335下限温度调低3433下限温度调高322122上降温度调低232425上限温度调高26DQ27281011121314151617C3R2U2DQ4.7k3VCC50.02DQ1GNDDS18B202u2CRYSTAL19XTAL118Q1NPNXTAL2LS19RSTC11uF29PSEN30ALE31EASOUNDERR147RLCD1LM016LVSSVDDVEE12345678RSRWED0D1D2D3D4D5D6D7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC5112345671011121314 图10 整体电路图
3.3.2 单片机最小系统电路原理图
由ATS51,复位电路,时钟产生电路组成。其原理图如下: C22u2X1U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383737R35下限温度调低34333221222324252627281011121314151617C32u2CRYSTAL1918XTAL2R39RSTC11uF293031PSENALEEA上降温度调低DQR147R12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51 图11 最小系统电路原理图 3.3.3 液晶显示温度控制器原理图 液晶显示温度控制器硬件结构:单片机的P1口端口接有LCD1602模块,用来显示温度;P3.5~P3.7是液晶LCD控制引脚。 LCD1LM016LVSSVDDVEERSRWE456123
图12 液晶显示温度控制原理
71011121314D0D1D2D3D4D5D6D7 3.3.4 DS18B20与单片机接口的设计
DS18B20与单片机接口的设计:P2.5引脚与温度传感器DS18B20的信号线引脚DQ连接,作为数据总线传递控制指令,接受温度信息。
R2U2DQ4.7k321VCCDQGNDDS18B2050.0 图13 DS18B20与单片机接口的设计
3.3.5 按键的设计
按键的设计:因为只有4个按键,所以采用最简单的接法————键盘,即每个I/O口对应一个按键:P2.0~P2.3引脚分别接有S3~S6四个按钮开关的一端,另一端接地,作为温度报警的输入和调整。 下限温度调高DQ上限温度调高 图14 按键的设计
3.3.6 输出控制模块的设计
输出控制模块的设计: P0.0~P0.1引脚接有高低温报警灯,作为温度报警的显示标志,P0.3引脚接蜂鸣器,当实时温度超过设定的温度上、下限时发出鸣响声,P0.7引脚留着接继电器以控制加热设备。
D4R447RR7R正常D3危险Q1NPN47R下限温度调低R3LS1下限温度调高SOUNDER 图15 输出控制模块的设计
第四章 Proteus的液晶温度显示器仿真设计
随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够工作的温度检测和显示系统已经应用于诸多领域。传统的温度检测和显示是基于模拟传感器和LED显示技术的。传感器输出的模拟信号易受干扰,在一些温度范围内线性不好,需要进行冷端补偿或引线补偿。随着科学技术的发展,由单片集成电路构成的温度传感器的种类越来越多,测量的精度越来越高,数字温度传感器具有价格低、精度高,适于微型封装、能工作在宽温度范围内等优点,在很多应用中,数字温度传感器正开始替代传统的模拟温度传感器。另外,液晶显示器体积小,便于携带、功耗低、抗干扰能力强、信息丰富等优点,已被广泛应用在仪器仪表和控制系统中。 现代电子设计手段的发展,已由传统的手工设计阶段发展到了EDA阶段,再到虚拟设计阶段,Proteus软件就是在这大背景下应运而生的。Proteus软件是英国Labcenterelectronics公司研发的EDA工具软件,是目前最流行的嵌入式系统设计与仿真平台,它能完全脱离硬件平台进行嵌入式虚拟开发,通过各虚拟仪器构建硬件电路,调试Keil、ADS等集成开发环境中生成的软件程序,达到虚拟硬件调试系统程序的目的,为后续实际软硬件系统的设计提供实践理论依据。
1 硬件电路设计
液晶温度显示器的硬件主要有以下部分:温度检测部分、单片机最小系统、显示电路和键盘电路,如图1所示。
单片机采用美国ATMEL公司生产的低电压、高性能CMOS的MCS-51系列单片机ATC52,它片内含8 K字节可重复擦写Flash闪速存储器和256字节的RAM,片内程序存储器空间能满足本系统程序存储之需要,可省去片外EPROM程序存储器,简化系统的设计,使电路结构简洁。时钟电路中的晶振频率采用12 MHz,系统复位采用上电复位方式。系统的硬件电路如图2所示。
温度传感器采用美国Dallas公司生产的单总线(1-wire)数字温度传感器DS18B20。它的测量温度范围为-55~+125℃,在-10~+85℃范围内,精度可达±0.5℃,通过编程可以选择9~12位A/D转换精度,测温分辨率可达0.062 5℃。DS18B20耐磨耐碰,体积小,使用方便,适用于各种狭小空间。它只有3个引脚,2脚DQ是数字信息输入/输出端,3脚VCC是外部电源输入端,1脚GND是电源地。现场温度直接以“一线总线”的数字方式传输,可以提高系统的抗干扰性。DS18B20的电源供电方式有2种:外部供电方式和寄生电源方式。工作于寄生电源方式时,VDD和GND均接地,它在需要远程温度检测和空间受限的场合特别有用,但是需要强上拉电路,软件控制变得复杂,同时芯片的性能也有所降低。因此,在本设计中,采用
外接电源供方式,将DQ与P3.2相连接。
LM016L是16x2数码液晶显示器,每行可显示16个字符,共2行。LM016L的控制器为HD44780,与液晶屏集成在一起。HD44780的控制端有3个,分别是RS、读写控制端RW和使能信号E。RS=0时,配合RW实现命令读写;RS=1时,配合RW实现显示数据的读写。本系统中,单片机的P0口作为数据口,与LM016L的D0~D7连接,为保证电路能正常显示,在P0口与D0~D7之间分别连接8个上拉电阻。P2口作为LCD的控制线,P2.0~P2.2
分别连接LM016L的RS、RW和E,VDD、VSS和VEE分别接电源和地。
本显示器设置了一个检测控制开关SW1,它的高低电平信息通过P2.3传递给单片机。当单片机复位后,若SW1为ON,DS18B20检测温度信息,经过单片机处理后送LM016L显示,工作指示灯LED1亮;若SW1为OFF,则系统暂停工作,工作指示灯LED1灭。当温度传感
器DS18B20有故障无法复位时,工作指示灯LED1闪烁。
2 软件设计
系统在Keil uVision3集成开发环境编写C51程序进行软件开发,采用模块化编程方式。在硬件设计的基础上,根据DS18B20和LM016L的工作原理,软件设计主要完成以下任务:初始化DS18B20,读/写DS18B20,读取DS18B20转换后的温度值并转换,初始化LMOl6L,LM016L显示温度值等。以上各个子任务分别用相应的子程序来实现,在主程序中有序的调用
各个子程序模块,程序流程图如图3所示。
系统软件设计的重点和难点之一是传感器输出信号的读取和转换。单片机从DS18B20中读到的温度值是16位的数字信息,其中高5位是表示温度正负的符号位。数字温度值的读取
并转换成实际温度十进制值的子程序流程图如图4所示。
温度转换子程序设计如下:
在软件设计时,应严格按照DS18B20和LM016L的工作时序,设置好延时时间,否则会影响系统的实时性,即出现温度显示输出变化滞后温度输入的变化。
第五章 系统实现调试
5.1 分步调试
5.1.1 测试环境及工具
测试温度:-25~150摄氏度。(模拟多点不同温度值环境); 测试软件: protues仿真软件 测试方法:目测。
5.1.2 测试步骤
软件调试:先编写显示程序并用protues仿真软件仿真硬件的正确性,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等的编程及调试。
调试工具为Keil C51, protues。 Keil C51简介:
Keil C51是目前世界上最优秀、最强大的51单片机开发应用平台之一。它集编辑、编译、仿真于一体,支持汇编、PL/M语言和C语言的程序设计,界面友好,易学易用。它内嵌的仿真调试软件可以让用户采用模拟仿真和实时在线仿真两种方式对目标系统进行开发。软件仿真时,除了可以模拟单片机的I/O口、定时器、中断外,甚至可以仿真单片机的串行通信。 Protues ISIS简介:
Protues ISIS是是一款集单片机和SPICE分析于一身的仿真软件,功能及其强大,可以仿真、分析各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和spice电路仿结合。具有模拟电路仿真、数字电路仿真、单片机及外围电路组成的仿真等 ②支持主流单片机系统的仿真
③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,但是要支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件 ④具有强大的原理图绘制功能
2)目测:观测电路是否接错,用万用表检测电路的导通情况。
3) 使系统运行,观察系统硬件,检测是否正常(包括单片机最小系统,显示电路,温度测试电路等)。
4)采用温度传感器和温度计同时测量温度变化情况,目测显示电路是否正常。并记录温度值,与实际温度值比较,得出系统的温度指标。
5.2 测试结果分析
自检正常,各点温度显示正常;实现系统预定的功能。
因为芯片是塑料封装,所以对温度的感应灵敏度不是相当高,需要一个较短的时间才能达到稳定。
5.3 调试中遇到的问题和解答
在调试中遇到的了一些问题,在用protues仿真软件仿真的时候,系统功能没有实现,开始以为是线路问题,可是仔细查看电路连线没有问题;再检查程序,用keil逐步调试确定程序没有问题;那应该就是protues仿真软件本身的问题,向那些经验丰富的同学请教后,证实是protues软件本身存在的一些原因。最后,把程序下载到单片机上 ,接通电源,可以实现预定功能。
第六章 结束语
DS18B20集温度测量、A/D转换于一体,具有体积小、动态范围宽、测量精度高、单总线结构等特点。基于ATS51单片机和DS18B20的温度测量仪,设计简单,控制方便,测量准确,测温范围宽。利用单总线具有很强的扩展性,还可以组建多点的温度检测网络。因此,基于ATS51单片机和DS18B20的温度测量仪,具有广泛的应用前景。
在这次毕业设计过程中,我系统地学习了智能温度传感器DS18B20、Proteus仿真软件、keil C51与LCD液晶显示以及VB开发界面的相关知识。
致谢
在论文完成之际,我首先要向我教我电子信息的老师表示最真挚的谢意,同时他也是我的毕业论文指导老师。是他们将扎实的理论知识传授与我,如果没有他们的谆谆教诲就没有我这篇论文的设计思路。
当然也要感谢的是,在论文写作期间,给我很多指导和帮助的同学们,他们给我提了很多中肯的意见,并在我很多激励,让我有勇气克服了心理的压力,很好的完成了论文的文稿,虽然的写作的过程中,我遇到了很多的麻烦,但是他们都不厌其烦的帮我修改,提出了很多的建议,在这里我要忠诚的感谢他们;正是有了他的鼓励和帮助,我的毕业论文才得以顺利的完成。
到现在为止,论文基本就已经完成了,但是由于本人学识有限,以及现有知识的有限加之时间仓促,文中不免有错误和待改进之处,真诚欢迎各位老师,同学提出宝贵意见。
参考文献
[1]论文:《全数字冷库温度检测系统研究》
[2]论文:《基于单片机的烘炉温度自动检测系统的研究与设计》 [3]论文:《嵌入式中频加温监控系统的研究与应用》 [4]论文:《智能温度传感器DS18B20的原理与应用》 [5]论文:《温度传感器原理及应用》
[6]论文:《单线数字温度传感器的原理与应用》 [7]论文:《智能化集成温度传感器原理与应用》 [8] 论文:《空调温度传感器原理及故障分析》
[9]王守中.51单片机开发入门与典型事例.人民邮电出版社.2007 [10]周兴华.手把手教你学单片机.北京航空航天大学出版社.2007
[11]楼然苗,李光飞.单片机课程设计指导.北京航空航天大学出版社.2007 [12]王庆利,袁建敏. 单片机设计案例实践教程.北京邮电大学出版社2008 [13]陈小忠,黄宁,赵小侠.单片机接口技术子程序.人民邮电出版社2005
附录:#include #include sbit DQ = P2^5; //温度传送数据IO口 sbit led1 = P0^0; sbit led2 = P0^1; sbit SD = P0^2; uint temp_value; //温度值 uchar high=55,low=0x10; uchar TempBuffer[5]; /***********1602液晶显示部分子程序****************/ //Port Definitions********************************************************** sbit LcdRs sbit LcdRw sbit LcdEn sfr DBPort = P3^7; = P3^6; = P3^5; = 0x90;//sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 //内部等待函数 ************************************************************************** unsigned char LCD_Wait(void) { } //向LCD写入命令或数据************************************************************ #define LCD_COMMAND #define LCD_DATA 0 // Command 1 // Data 0x01 // 清屏 LcdRs=0; LcdRw=1; LcdEn=1; _nop_(); _nop_(); LcdEn=0; return DBPort; #define LCD_CLEAR_SCREEN #define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) { } //设置显示模式************************************************************ #define LCD_SHOW #define LCD_HIDE 0x04 //显示开 0x00 //显示关 0x02 //显示光标 0x00 //无光标 0x01 //光标闪动 0x00 //光标不闪动 LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意顺序 LcdEn=1; LcdEn=0; _nop_();//注意顺序 _nop_(); LCD_Wait(); #define LCD_CURSOR #define LCD_NO_CURSOR #define LCD_FLASH #define LCD_NO_FLASH void LCD_SetDisplay(unsigned char DisplayMode) { } //设置输入模式************************************************************ #define LCD_AC_UP #define LCD_AC_DOWN #define LCD_MOVE 0x02 0x00 // default 0x01 // 画面可平移 0x00 //default LCD_Write(LCD_COMMAND, 0x08|DisplayMode); #define LCD_NO_MOVE void LCD_SetInput(unsigned char InputMode) { } //初始化LCD************************************************************ LCD_Write(LCD_COMMAND, 0x04|InputMode); void LCD_Initial() { } //液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) { } //将字符输出到液晶显示 void Print(unsigned char *str) { } /***********ds18b20子程序*************************/ /***********ds18b20延迟子函数(晶振12MHz )*******/ void delay_18B20(unsigned int i) { } /**********ds18b20初始化函数**********************/ while(i--); while(*str!='\\0') { } LCD_Write(LCD_DATA,*str); str++; if(y==0) LCD_Write(LCD_COMMAND,0x80|x); LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); void Init_DS18B20(void) { } /***********ds18b20读一个字节**************/ unsigned char ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { } DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20); return(dat); } /*************ds18b20写一个字节****************/ void WriteOneChar(uchar dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; } } /**************读取ds18b20当前温度************/ void ReadTemp(void) { unsigned char a=0; unsigned char b=0; unsigned char t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay_18B20(100); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) delay_18B20(100); a=ReadOneChar(); //读取温度值低位 b=ReadOneChar(); //读取温度值高位 temp_value=b<<4; temp_value+=(a&0xf0)>>4; } void temp_to_str() //温度数据转换成液晶字符显示 { TempBuffer[0]=temp_value/10+'0'; //十位 TempBuffer[1]=temp_value%10+'0'; //个位 TempBuffer[2]=0xdf; //温度符号 TempBuffer[3]='C'; TempBuffer[4]='\\0'; } 前两个就是温度 void Delay1ms(unsigned int count) { } /*延时子程序*/ void mdelay(uint delay) { uint i; for(;delay>0;delay--) {for(i=0;i<62;i++) //1ms延时. {;} unsigned int i,j; for(i=0;i } void key(void) { } void charint(uchar Data) { } LCD_Write(LCD_DATA, Data/10+0x30); LCD_Write(LCD_DATA, Data%10+0x30); if((P2&0x0f)!=0x0f) { } mdelay(10); if((P2&0x0f)!=0x0f) { if((P2&0x0f)==0x07) high++; high--; low++; low--; else if((P2&0x0f)==0x0b) else if((P2&0x0f)==0x0d) else if((P2&0x0f)==0x0e) while((P2&0x0f)!=0x0f) ; } void main(void) { LCD_Initial(); P0=0; Init_DS18B20(); mdelay(3000); while(1) { GotoXY(0,0); Print(\"THE TEMP IS:\"); ReadTemp(); temp_to_str(); GotoXY(12,0); Print(TempBuffer); //显示温度 GotoXY(0,1); Print(\"High:\"); } } charint(high); GotoXY(9,1); Print(\"low:\"); charint(low); key(); if((temp_value>high)|(temp_value led1=0;led2=1;SD=1; } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务