基于单片机的温度液晶显示应用3 - 图文

更新时间:2024-05-17 13:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

内蒙古科技大学 智能仪表课程设计论文

题 目:智能温度仪表设计

学生姓名:何景锋 学 号:0867112332 专 业:测控技术与仪器 班 级:2008-3 指导教师:李刚

2011年 10 月

10 日

智能温度仪表设计

摘 要

在单片机的应用中,一个很重要的应用就是对温度进行检测。测量温度的关键是温度传感器,采用智能温度传感器以实现温度数字化,既能以数字形式直接输出被测温度值,具有测量误差小,分辨力高,抗干扰能力强,能够远程传输数据,带串行总线接口等优点。温度的数字输出显示LCD1602液晶显示器上。单片机、温度传感器DS18B20与LCD液晶显示器等电子元器件的互联,可以研制和开发出具有高性价比的新一代测温系统——基于单片机AT89S52的数字温度计。

基于单片机的数字温度计设计,即对温度进行实时测量,使用单线数字温度传感器DS18B20把温度信号直接转换成数字信号输入单片机。经单片机处理后,将实时温度显示LCD液晶显示器上。本文主要通过温度传感(DS18B20)采集温度信号,首先是对DS18B20的深入了解并根据DS18B20的内部结构来设计硬件电路和软件电路的,本系统包括温度传感器,数据传输模块,温度显示模块和温度调节驱动电路其中温度传感器为数字温度传感器DS18B20,包括了单总线数据输出电路部分。

关键词:单片机STC89C52RC 温度传感(DS18B20) LCD1602液晶显示器

内蒙古科技大学智能仪表课程设计

目录

第一章 绪论 .............................................................................................................................. 1

1.1概述 .............................................................................................................................. 1 1.2设计思路 ...................................................................................................................... 1 1.3总体设计框图 .............................................................................................................. 2 第二章 各元器件介绍 .............................................................................................................. 3

2.1 STC89C52RC简介 ........................................................................................................ 3 2.2 DS18B20单总线数字温度计温度器简介 .................................................................. 6 2.3 液晶显示模块 ............................................................................................................. 7

2.3.1 概述 .................................................................................................................. 7 2.3.2 模块引脚说明 .................................................................................................. 8 2.3.3液晶硬件接口 ................................................................................................... 8 2.3.4功能设定指令 ................................................................................................... 8

第三章 各模块电路设计及分析 .............................................................................................. 9

3.1电源电路 ...................................................................................................................... 9 3.2系统整体硬件电路设计 ............................................................................................ 10

3.2.1 主板电 ............................................................................................................ 10 3.2.2 复位电路的工作原理 .................................................................................... 10 3.2.3晶振电路 ......................................................................................................... 11 3.3 显示电路的设计 ....................................................................................................... 11 第四章 系统软件设计 ............................................................................................................ 13

4.1 软件总体模块 ........................................................................................................... 13 4.2 DS18B20数据采集及转化算法 ................................................................................ 13

4.2.2 数据采集及算法转化 .................................................................................... 14 4.3读、写时序子程序 .................................................................................................... 17 4.4 显示程序 .................................................................................................................... 18 第五章 设计总结(心得体会) ............................................................................................ 20 第六章 参考文献 .................................................................................................................... 21 附录A:系统原理框图 ........................................................................................................... 22 附录B:温度显示实物图 ....................................................................................................... 23 附录C :C语言源程序 .......................................................................................................... 24

内蒙古科技大学智能仪表课程设计

第一章 绪论

1.1概述

温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。

温度控制系统广泛应用于社会生活的各个领域,在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B20进行范围的温度检测。采用单片机来对他们控制不仅具有控制方便,简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。

1.2设计思路

先说测温部分

考虑到测温方案有很多种,包括电阻式测温、热电偶测温等等。而由于外界诸多因素的变化,由分立元件所搭建的电路会受到各种各样的干扰而导致测量结果的偏差,比如电阻会因温度升高而阻值降低,三极管在发热状态下基极电流会升高等等。这会带来

1

内蒙古科技大学智能仪表课程设计

测量误差,从而导致一系列负面响应。考虑到这些问题,方案最终被定在了集成温度测量传感器DS18B20上。

DS18B20是美国DALLAS公司生产的集成温度传感器。它将测温、处理及输入输出等模拟+数字电路集成在一块形似三极管的三端芯片上,体积小巧、功能强大,且数据的输入输出只需要一跟端口线,并且可在一根总线上并联多个芯片以实现多点测温。用之与单片机结合简直是温度检测的不二选择。

再显示部分。

显示部分也有许多方案可供选择,但考虑到其价格及普遍使用程度,最后放弃了LCD12864方案,改用LCD1602,采用字符型液晶显示器1602,液晶显示器以其微功耗、体积小、显示内丰富、使用方便等诸多优点,在通信、仪器仪表、电子设备等低功耗应用系统中得到越来越广泛的应用。

控制器方面,自然是使用STC89C52了,实惠够用。

1.3总体设计框图

温度计电路设计总体设计方框图如图1-1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用LCD以串口传送数据实现温度显示。

复位电路AT89C52单片机控制器晶振电路 LCD1602液晶显示DS18B20温度传感器

图1-1 总体设计框图

2

内蒙古科技大学智能仪表课程设计

第二章 各元器件介绍

2.1 STC89C52RC简介

图2-1 STC89C52RC

AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18

3

内蒙古科技大学智能仪表课程设计

脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0 口

P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的 方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1 口

P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。

P2 口

P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。

P3 口

P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。 P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能P3 口还接收一些用

4

内蒙古科技大学智能仪表课程设计

于Flash 闪速存储器编程和程序校验的控制信号。

RST

复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。

PSEN

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP

外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。 Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。

XTAL1

振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2

振荡器反相放大器的输出端。

5

内蒙古科技大学智能仪表课程设计

P3口引脚第二功能定义 标号 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

引脚 10 11 12 13 14 15 16 17 第二功能 RXD TXD /INTO /INT1 T0 T1 /WE /RD 说明 串行输入口 串行输出口 外部中断0 外部中断1 定时器/计数器0外部输入口 定时器/计数器1外部输入口 外部数据存储器写脉冲 外部数据存储器读脉冲 2.2 DS18B20单总线数字温度计温度器简介

温度作为一种最基本的环境条件参数,与工业、农业、养殖业的生产以及医学乃至人们的日常生活都是紧密相关的。因此,对于温度的测量方法与测温装置的研究就凸显得非常重要。由单片机与温度传感器构成的测温系统可广泛应用于很多领域。本文通过对单总线数字集成温度传感器DS18B20的特点、工作原理和使用方法的讨论,结合对单片机AT89S52的编程实现温度的采集。

大多单片机接口输入的信号是数字信号,或带有A/D 转换的高端单片机也可输入模拟信号。由单片机获取非电信号的温度信息,必须通过温度传感器。传统的温度测量多以热敏电阻作为温度传感器。但是,热敏电阻的可靠性较差、测量温度精度低,而且还需经A/D转换成数字信号后才能由单片机进行处理。因此,使用数字温度传感器可简化硬件设计、方便单片机读取数据、节约成本。设计单片机数字温度计需要考虑以下3 个方面:

(1)温度传感器芯片的选择;

(2)单片机和温度传感器的接口电路设计;

(3)控制温度传感器实现温度信息采集以及数据传输的软件

DS18B20 是美国达拉斯(Dallas)公司的单线数字温度传感器芯片,与传统的热敏电阻不同,DSl8B20 可直接将被测温度转换为串行数字信号,供单片机处理。通过对DSl8B20 编程可以实现9~12 位的温度读数,并可分别在93.75ms 和750ms 内完成9 位和12 位的数字量。其测温范围-55℃~+125℃,最大分辨率为0.0625℃,在-10℃~+85℃范围内其测温准确度为±0.5℃。DS18B20 具有体积小、功耗低、抗干扰能力强、

6

内蒙古科技大学智能仪表课程设计

易与微处理器连结等特点,而且它无需任何外围硬件即可方便地进行温度测量,与单片机交换信息仅需要一根I/O 口线,其读写及温度转换的功率也可来源于数据总线,而无需额外电源。另外,每片DSl8B20 都设有唯一的产品序列号,存放在它的内部ROM 中,单片机通过简单的协议就能识别这个序列号。因此,多个DSl8B20 可以挂接于同一条单线总线上,特别适合构成多点温度测控系统。

DS18B20 性能特点

(1)独特的单线接口,仅需1 个I/O 口引脚即可通信,无需变换其它电路,直接输出被测温度值的数字信号;

(2)多点(multidrop)能力使分布式温度检测应用得以简化; (3)不需要外部元件;

(4)既可用数据线供电,也可采用外部电源供电; (5)零待机功耗,不需备份电源;

(6)测量范围为-55~+125℃,固有测温分辨率为0.5℃; (7)通过编程可实现9~12 位的数字读数方式; (8)温度数字量转换时间200ms(典型值); (9)用户可定义非易失性的温度告警设置;

(10)警告搜索命令能识别和寻址温度在编定的极限之外的器件(温度警告情况); (11)应用范围包括恒温控制、工业系统、消费类产品、温度计或任何热敏系统[2]。 预处理:DS18B20 采用3 脚TO-92 封装或8 脚SOIC 封装,其外部形状及管脚如图。 图中①GND 为地,②DQ 为数据输入/输出端,该脚为漏极开路输出,常态下呈高电平,③可选用的VDD 引脚,不用时应接地。SOIC 封装的NC 为空引脚。

2.3 液晶显示模块

2.3.1 概述

显示模块采用了型号为1602的LCD。它体积小、功耗低、超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。它分为带背光和不带背光两种,基控制器大部分为HD44780.本设计中应用的是带背光的1602,带背光的比不带背光的厚,但两者在应用中并无差别。

1602LCD主要技术参数:显示容量:16×2个字符;芯片工作电压:4.5—5.5V;

7

内蒙古科技大学智能仪表课程设计

工作电流:2.0mA(5.0V);模块最佳工作电压:5.0V;字符尺寸:2.95×4.35(W×H)mm。 内含复位电路,提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM。

2.3.2 模块引脚说明

2.3.3液晶硬件接口

图2-2液晶接口

2.3.4功能设定指令

功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名 设置

DL 0=数据总线为4位 1=数据总线为8位 N 0=显示1行 1=显示2行

8

内蒙古科技大学智能仪表课程设计

F 0=5×7点阵/每字符 1=5×10点阵/每字符

第三章 各模块电路设计及分析

3.1电源电路

本设计以STC89C52RC单片机为中心,分别设计了晶振电路、LCD液晶显示电路和复位电路。

图3-1电源电路框图

图3-2 lm78稳压器

在实际应用中,应在三端集成稳压电路上安装足够大的散热器(当然小功率 的条件下不用)。当稳压管温度过高时,稳压性能将变差,甚至损坏。

当制作中需要一个能输出1.5A以上电流的稳压电源,通常采用几块三端稳压电路并联起来,使其最大输出电流为N个1.5A,但应用时需注意:并联使用的集

9

内蒙古科技大学智能仪表课程设计

成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。另外在输出电流上留有一定的余量,避免个别集成稳压电路失效时导致其他电路的连锁烧毁。

在lm78 ** 、lm79 ** 系列三端稳压器中最常应用的是TO-220 和TO-202 两种封装。这两种封装的图形以及引脚序号、引脚功能如附图所示。

图中的引脚号标注方法是按照引脚电位从高到底的顺序标注的。这样标注便于记忆。引脚①为最高电位,③脚为最低电位,②脚居中。从图中可以看出,不论正压还是负压,②脚均为输出端。对于lm78**正压系列,输入是最高电位,自然是①脚,地端为最低电位,即③脚,如附图所示。对与lm79**负压系列,输入为最低电位,自然是③脚,而地端为最高电位,即①脚。

3.2系统整体硬件电路设计

3.2.1 主板电

3.2.2 复位电路的工作原理

52单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。

在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。

也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。

在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,

10

内蒙古科技大学智能仪表课程设计

甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。

按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。

3.2.3晶振电路

STC89C52虽然内部有震荡电路,但要形成时钟,必须外部附加电路。STC89C52单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。

本设计采用内部时钟方式,利用芯片内部的震荡电路,在X1、X2引脚上外接定时元件,内部的震荡电路变会产生自激震荡。本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。震荡晶体选择可在1.2MHZ到12MHZ之间选择。电容值无严格要求,但电容取值对震荡频率输出的稳定性、大小、震荡电路起震速度有少许影响,C1、C2可在20pF到100pF之间取值,但在60pF到70pF时震荡器会有较高的频率稳定性。所以在本设计中,震荡晶体选择11.0592MHZ,电容选择30pF。

3.3 显示电路的设计

液晶显示器是一种将液晶显示器件,连接器件,集成电路,PCB线路板,背光源,结构器件装配在一起的组件。

LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作时电流仅2.0mA/5.0V。通过编程实现自动关闭屏幕能够更有效的降低功耗。LCD1602分两行显示,每行可显示多达16个字符。LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制,并且还能利用空余的空间自定义字符。其接线如下图所示:

11

内蒙古科技大学智能仪表课程设计

图3-3液晶显示电路

12

内蒙古科技大学智能仪表课程设计

第四章 系统软件设计

4.1 软件总体模块

本设计单片机需要处理的信息有:温度采集、湿度采集、液晶显示、控制策略。所以程序就包括:温度采集子程序、湿度采集子程序、显示子程序、控制策略等。

主程序(控制策略)温度采集子程序温度处理子程序液晶显示子程序

图 4-1 程序模块组成图

4.2 DS18B20数据采集及转化算法

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。初始化程序如下:

13

内蒙古科技大学智能仪表课程设计

DQ置1短延时DQ置0延时450usDQ置1延时15-60usX=DQ延时至少60usX=DQ结束

图4-2 初始化程序流程图

4.2.2 数据采集及算法转化

由于DS18B20 单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要.系统对DS18B20的各种操作必须按协议进行.操作协议为:初始化DS18B20(发复位脉冲)→发ROM 功能命令→发存储器操作命令→处理数据.主机控制DS18B20完成温度转换的程序必须经过3个步骤:初始化、ROM操作指令、存储器操作指令.假设

14

内蒙古科技大学智能仪表课程设计

单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE 为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始.主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s 进行一次,流程图如下:

初始化调用子程序 NO 1秒到?YES初次上电? NO读出温度值计算处理显示数据更新发温度转换开始命令

图4—3 DS18B20温度计主程序流程图

YES

分析:

DSl8B20 可直接将被测温度转换为串行数字信号,供单片机处理。通过对DSl8B20 编程可以实现9~12 位的温度读数,并可分别在93.75ms 和750ms 内完成9 位和12 位的数字量。其测温范围-55℃~+125℃,最大分辨率为0.0625℃,在-10℃~+85℃范围内其测温准确度为±0.5℃。DS18B20采用一线总线传输的形式可以直接把数字量和STC89C52单片机进行通信译码。

15

内蒙古科技大学智能仪表课程设计

程序开始初始化,再经DS18B20、ROM操作指令识别判断,再进行存储操作指令,转化处理,读取当前温度值。

4.2.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的2字节,读出温度的低八位和高八位,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下

发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作CRC校验NO12字节完?CRC校验正确?YES移如温度暂存结束

4-4读温度程序流程图

16

内蒙古科技大学智能仪表课程设计

4.3读、写时序子程序

读写的程序是本次设计中的重点和难点,通过我们对其时序的分析,从而写出高效的程序。

图4-5 写1,0时序

图4-6 读0,1时序

17

内蒙古科技大学智能仪表课程设计

DQ=0延时15usDate&=0x01延时45usDQ=1结束

图4-7写时序子程序流程图

4.4 显示程序

此函数实现的对数码管显示的处理,其亮点在于可以直接对数码管进行操作,其

本身是个两变量函数,第一个变量是要开通的位选,第二个变量是要显示的数据,这样我们可以直接方便而又简单直观的对数码管进行操作。程序流程图如下。

18

内蒙古科技大学智能仪表课程设计

送位选位选值左移N位送断码N=2NP0.7=0延时1us关断位选结束

图12 显示数据刷新流程图

19

内蒙古科技大学智能仪表课程设计

第五章 设计总结(心得体会)

这是第二次进行课程设计,有了上次的经验,明白在课程设计中分工合作非常重要,这样才不会浪费时间,也能在合作中展示个人能力。由于我个人比较对软件感兴趣,因此,在初次讨论分组的时候选择了负责软件部分——程序的编写。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,我们都知道在编写程序之前,最重要的画程序流程图。流程图反应了程序的思想,结构,步骤。而画流程图必须要了解硬件设计者的想法以及设计方案。因此在开始的时后,我主要是与负责硬件部分的同学沟通,了解和分析他们的设计思路以及实现的功能。这时初步的流程图即可绘制出来。接下来就是构思详细的流程图。由于我们使用的52系列单片机,是学习中经常使用的芯片,比较熟悉。因此结合设计好的Protel图,将使用到的引脚摘出来,结果了解分析,清楚了本次编写程序时主要用到的单片机的I/O口,定时器/计数器等功能。此时主程序的流程图就很容易绘制出来了。本次课程设计使用了传感器——DS18B20。由于这两种传感器都可以通过电路直接输给单片机数字信号,不用使用AD,这就使得程序简单一些了。DS18B20内置ROM区,在工作之前要求单片机写数据,而且时序要求严格,才能读出数据。第一次接触这个传感器,认真学习搜集来的资料,结合本次设计的需要,在已有的程序基础进行修改。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。在这次设计过程中培养了我们的团队协作精神,便于我们走到工作岗位后能很快适应工作环境。

20

内蒙古科技大学智能仪表课程设计

第六章 参考文献

[1]邱关源.电路 第五版.高等教育出版社.

[2]田立,代方震.2007. 51单片机C语言程序设计快速入门.北京.人民邮电出版社 [3]李朝青.2005.单片机原理及接口技术(第3版).北京.北京航天航空大学出版社. [4]康华光.陈大钦.1999.电子技术基础模拟部分(第4版).北京.高等教育出版社. [5]康华光.邹寿彬.2000电子技术基础数字部分(第4版).北京.高等教育出版社. [6]郭天祥.编著.51单片机C语言教程——入门,提高,开发.拓展全攻略 [7]李忠国.陈刚.编著.单片机应用技能实训

[8]刘南平.主编.朱凤芝.欧触灵.副主编.现代电子设计与制作技术 [9]胡宴如.主编. 高频电子线路

[10]杨翠南.杨碧石.主编 . 数字电子技术与逻辑设计教程 [11]DS18b20数据手册。

[12]余发山,王福忠.单片机原理及应用技术.徐州:中国矿业大学出版社,2003 [13]陈权昌 李兴富 单片机原理及应用. 广东:华南理工大学出版社,2007 [14]黄智伟. 凌阳单片机课程设计指导.北京:北京航空航天大学出版社,2006年 [15]李光飞 .单片机课程设计实例指导 .北京:北京航空航天大学出版,2004 [17] 张友德.单片微型机原理、应用与实践[M].上海:复旦大学出版社,1992 [18] 李华.MCS-51系列单片机实用接口技术[M],北京:北京航空航天大学出版社 [19]求是科技. 单片机典型模块设计实例导航. 北京:人民邮电出版社. 2005.8 [20]徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社. [21]孙余凯. 精选实用电子电路260例. 北京:电子工业出版社. 2007.6 [22]殷春浩, 崔亦飞. 电磁测量原理及应用. 徐州:中国矿业大学出版社. 2003.7 [23]《LCD1602A数据手册》

21

附录A:系统原理框图

内蒙古科技大学智能仪表课程设计

22

内蒙古科技大学智能仪表课程设计

附录B:温度显示实物图

23

内蒙古科技大学智能仪表课程设计

附录C :C语言源程序

#include

#define uchar unsigned char #define uint unsigned int

sbit lcden=P1^2; sbit lcdrw=P1^1; sbit lcdrs=P1^0; sbit DQ=P1^6;

uint f,xx,tt,temp,mark=0; //定义整型温度数据 float ftemp; // 定义浮点型温度数据

void delay(uint z) {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); }

//1602 部分

void write_com(uchar com) //写指令 {

lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_data(uchar date) //写数据 {

lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; }

void init() //初始化 {

lcdrw=0; lcden=0;

write_com(0x38); //显示模式:设置16X2显示,5X7点阵,8位数据接口

24

内蒙古科技大学智能仪表课程设计

write_com(0x0c); //设置光标的显示和闪烁 write_com(0x06); //设置光标的自动位移 write_com(0x01); //清屏

write_com(0x80); //数据指针初始化 }

void hzkdis(unsigned char *s) { while(*s) { write_data(*s); s++; } }

void in_ch(int i,int temp) //int转化为char {

uchar xx[10]={0},aa[3]={0},bb[2]={0}; for(;i>0;i--)

{xx[i-1]=temp+48;temp/=10;} aa[0]=xx[0];aa[1]=xx[1];bb[0]=xx[2]; if(mark==1) hzkdis(\ hzkdis(aa);hzkdis(\ if(mark==0)

{write_data(0XDF); delay(10);

write_data(0x43); } else write_data(0x43); }

//18B20部分

void dsreset() //DS18B20复位 {

uint i; DQ=0;

i=240;while(i>0) i--; DQ=1;

i=8;while(i>0) i--; }

bit temprbit() //读一位数据 {

uint i; bit dat; DQ=0;i++;

DQ=1;i++;i++; dat=DQ;

i=8;while(i>0) i--; return(dat);

25

内蒙古科技大学智能仪表课程设计

}

uchar temprby() // 读一字节数据 {

uchar i,j,dat; dat=0;

for(i=1;i<=8;i++) {

j=temprbit();

dat=(j<<7)|(dat>>1); }

return(dat); }

void temprwby(uchar dat) //写一个字节数据 {

uint i;uchar j;bit tb; for(j=1;j<=8;j++) {

tb=dat&0x01; dat>>=1;

if(tb) //写1 {

DQ=0;i++;i++;DQ=1; i=8;while(i>0) i--; }

else //写0 { DQ=0;i=8;while(i>0) i--;DQ=1; i++;i++; } } }

void tempchange() {

dsreset(); delay(1);

temprwby(0xcc);// 跳过读ROM temprwby(0x44); // 温度转换命令 }

uint gettemp() // 读取寄存器中温度数据 {

uchar a,b; dsreset(); delay(1);

temprwby(0xcc);

26

内蒙古科技大学智能仪表课程设计

temprwby(0xbe); //从寄存器读数据 a=temprby(); //读低八位 b=temprby(); //高八位 temp=b; temp<<=8; temp|=a;

ftemp=temp*0.0625; //温度在寄存器中为12位,分辨率为0.0625°

temp=ftemp*10+0.5; //乘以10表示小苏点后只取1位,加0.5是四舍五入 mark=0;

return temp; }

uint fgettemp() // 负温度 {

uchar a,b; dsreset(); delay(1);

temprwby(0xcc);

temprwby(0xbe); //从寄存器读数据 a=temprby(); //读低八位 b=temprby(); //高八位 temp=b; temp<<=8; temp|=a;

temp=~temp+1;

ftemp=temp*0.0625; //温度在寄存器中为12位,分辨率为0.0625° temp=ftemp*10; //乘以10表示小数点后只取1位,加0.5是四舍五入 mark=1;

return temp; }

void main() {

init(); //初始化LCD屏 while(1)

{ tempchange(); xx=gettemp(); if(xx<=1250)

tt=gettemp(); else tt=fgettemp();

write_com(0x80+0x05); in_ch(3,tt); } }

27

本文来源:https://www.bwwdw.com/article/dxq7.html

Top