毕业设计说明书
题目:基于单片机的多点温度检测设计
学 部: 电气信息学部 专 业: 电子科学与技术 班 级: 2011级(1)班 学 号: 1138340124 学生姓名:黎卫锋 指导教师:杨凤娟
二〇一五 年 五 月
摘要
在工业生产及日常生活中,多点温度检测系统的应用十分广泛,例如消防电气的非破坏性温度检测,电力设备的过热故障预知检测,空调系统的温度检测,各类运输工具组件的过热检测,医疗与诊断设备的温度测试等。针对这一情况,本文设计了一种基于ATC51单片机的温度检测系统,系统利用单片机获得温度传感器数据并与系统设计值进行比较,根据比较结果分别控制执行系统系统采用ATC51单片机视作为控裁核心,进行温度采集、信息显示及执行机构的控制。温度传感器采用Dallas半导体公司的数字传感器DSl8820。为了能够提供形象的用户显示界面,系统采用图形液晶显示模块LCDl28,显示各释字符及图形。
关键词:多点温度检测 单片机 DSl8820传感器
Abstract
In industrial production and daily life, the application of multi-point temperature detecting system is very wide, such as fire electric non-destructive testing temperature, precognition overheating fault detection of power equipment, and detect the temperature of the air conditioning system, all kinds of transport components of overheat detection, medical and diagnostic equipment, such as temperature test. Aim at this situation, this paper designs a temperature detection system based on ATC51, using single chip computer system for temperature sensor data and comparing with values of system design, according to the comparison results, respectively, to control execution system system USES ATC51 as control core, cutting temperature acquisition, information display and control of the actuator. The temperature sensor using digital sensor DSl8820 Dallas semiconductor company. In order to be able to provide the image of the user interface, the system adopts LCDl28 graphic liquid crystal display module, according to the interpretation of the basic characters and graphics.
51 single chip microcomputer temperature gathering application system used in the collection of variables, and to control other variables or action in the application system, such as collection of cold storage temperature to decide whether to open or closed refrigeration, collection of greenhouse temperature decide whether to open the Windows for ventilation. In practical application, the work is often not only use one point of temperature data as a reference, need to refer to multiple point temperature data at the same time, the need to use a multi-point temperature acquisition system to complete the corresponding work. Temperature acquisition system need to pay attention to the qualitative change of including patch number, patch distance, with sampling temperature range and accuracy. So this system need to eight distance in 10 cm points within the scope of data collection, the collection temperature range in - 30 ~ 50 ℃ range, acquisition precision of 0.5 ℃.
Keywords:Multipoint temperature detectionSCMDSl8820 sensor
目录
第一章 绪论 .......................................... 1
1.1系统背景 ....................................... 1 1.2系统概述 ....................................... 1 1.3 设计任务及方案 ................................ 1 第二章 方案论证 ...................................... 3
2.1传感器部分 ..................................... 3 2.2主控制部分 ..................................... 6 2.3系统方案 ...................... 错误!未定义书签。 2.4 数码管 ........................................ 6 第三章 硬件电路的设计 ................................ 7
3.1电源以及看门狗电路 ................................................................ 7 3.2 键盘以及显示电路 .............................. 7 3.3 温度测试电路............................................................................. 3.4 串口通讯电路................................................................................ 3.5 整体电路........................................................................................ 第四章 软件设计 ..................................... 22
4.1概述 .......................................... 22 4.2 主程序方案 ................................... 22 4.3 各模块子程序设计...................................................................... 第五章 系统调试
5.1 分步调试........................................................................................ 5.2 统一调试....................................................................................... 结束语 ............................................... 29 参考文献 ............................................. 31 附录 ................................................. 32 致谢 ................................................. 41
第一章 绪论
1.1 系统背景介绍
温度是工业生产中最常见和最基本的工业参数之一,是与人类的生活、工作关系最密切的物理量,也是各学科与工程研究设计中经常遇到和必须精确测量的物理量。而随着电子技术和计算机技术的迅速发展,特别是单片微机的发展,使传统的测量仪器在原理,功能,精度及自动化水平等方面发生了巨大的变化,使很多的传统电子仪器被相应的全新的仪器类型和测试系统体系所代替。随着电子技术以及应用需求的发展,单片机技术得到了迅速的发展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。伴随着科学技术的发展,电子技术有了更高的飞跃,我们现在完全可以运用单片机来代替人工测量,这样既省时又省力。
由于单片机具有功能强、体积小、可靠性好、和价格低廉等独特优点,且在智能仪器仪表、工业自动控制、计算机智能终端、家用电器、儿童玩具等许多方面,都已得到了很好的应用,因而受到人们高度重视,取得了一系列科研成果,成为传统工业技术改造和新产品更新换代的理想机种,具有广阔的发展前景。
51单片机温度采集应用系统常用于变量的采集,并对应用系统中的其他变量或动作进行控制,如采集冷库的温度决定是否开启或关闭制冷,采集温室的温度决定是否要开启窗户进行通风。而在实际应用中,这些工作往往不是只使用一个点的温度数据作为参考量,需要同时参考多个点的温度数据,此时需要使用一个多点的温度采集系统来完成相应的工作。温度采集系统需要关注的质变包括采集点数目、采集点距离、带采集温度范围及采集精度。因此本系统需要对8个距离在10cm范围内的点数据进行采集,其采集温度范围在-30~50℃区间,采集精度为0.5℃。
1.2 系统概述
该案由单片机、模拟温度传感器AD590、运算放大器、AD转换器、数码显示电路、集成功率放大器、报警器组成。 本方案采用模拟温度传感器AD590作为测温元件,传感器将测量的温度变换转换成电流的变化,再通过电路转换成电压的变化,使用运算放大器交将信号进行适当的放大,最
1
后通过模数转换器将模拟信号转换成数字信号,传送给单片机,单片机将温度值进行处理之后用数码显示 ,当温度值超过设置值时,系统开始报警。
1.3
1.4
1.1多点温度采集系统的工作流程图
2
图第二章 多点温度采集系统的设计思路
2.1 多点温度采集系统的工作流程
多点温度采集系统的工作流程图如图1.1所示,需要注意的是该系统并没有提供采集到的温度,来对相关量进行控制的功能。
2.2多点温度采集系统的需求分析与设计
设计多点温度采集系统,需要考虑如下几个方面
(1)需要一个能将温度数据转换为采集数据的传感器,其相关指标必须符合采集系统的需求
(2)传感器和51单片机通过任何方式来进行数据交换 (3)需要一个能显示温度数据的显示模块 (4)需要设计合适的点片机软件
2.3单片机应用系统的温度采集方法
单片机应用系统对于温度信号采集有两种常见的方法:
(1)数字温度传感器采集。通常利用两个不同温度系数的晶振控制两个计数器进行计数,利用温度对晶振精度影响的差异测量温度。
(2)PT铂电阻采集。利用PT金属在不同温度下的电阻值和不同原理来测量温度。
两种采集方法的比较参见表2.2
3
表2.2数字温度传感器和PT铂电阻的比较
需要注意的是PT铂电阻根据温度变化的只是其电阻值,所以在实际使用过程中,需要额外的辅助器件将其转换为电压信号,并且通过调整后送到模/数字转换器件。
才能让51单片机进行处理,其组成如图2.3所示
图2.3使用PT铂电阻来测量温度
在多点温度采集系统中,选择了使用1-wire总线接口的温度传感器DS18B20来测量温度,这是因为系统对采集精度要求不高,而且温度传感器没有额外的附加器件,比较方便和51单片机连接。
2.4 1-wire总线的工作原理
多点温度采集系统的51单片机使用1-wire总线和温度传感器DS18B20进行数据交互,该总线是美国达拉斯公司推出的一种总线接口技术,其技术特点是只用一根数据线,既传输时钟,也传输数据,且数据通信是双向的,还可以利用该总线给器件完成供电任务。1-wire总线具有占用I/O资源少,硬件简单的优点,在一条1-wire总线上可以挂接多个器件。这些器件既可以是主机器件。图2.4是使用1-wire总线来扩展多个51单片机系统外围器件的结构示意图。
4
图2.4使用1-wire总线扩展51单片机系统外围器件的结构示意图 1-wire总线的接口器件通过一个漏极开路的三态端口连接到总线上,这样使得器件在不使用总线时可以释放信号线,以便于其他器件使用总线。于是漏极开路,所以1-wire要在总线上上拉一个5千欧左右的电阻到VCC,并且在使用寄生方式供电时,为了保证器件在所有工作状态下都有足够的电量,在总线上还必须提供一个MOSFET管,以存储电能。
寄生供电方式是指1-wire总线器件不适用外接电源,直接使用数据信号线作为电能传输信号线的供电方式。
1-wire总线的工作流程包括总线初始化、发送ROM命令+数据,以及发送功能命令+数据三个步骤,除了搜索ROM命令和报警搜索命令之后不能发送功能命令+数据,而是要重新初始化总线之外,其他总线操作过程必须完成这三个步骤。
总线初始化过程由主机发送的总线复位脉冲和丛机响应的答应脉冲组成,后者是通知主机该总线上有准备就绪的丛机信号。每个1-wire总线器件都有自己的地址,这是唯一一个位数据,用于标示该器件的种类。ROM命令是和ROM代码相关的一系列命令,用于操作总线上的指定外围器件,ROM命令还可以检测总线上有多少个外围器件,以及这些外围器件的种类和是否有器件处于报警状态。ROM命令一般有5种,这些命令的长度都为一个字节,即8位。1-wire总线ROM命令的具体说明如图2.5所示
5
图2.51-wire总线ROM命令的具体说明
在主机发送完ROM后,发送需要操作的具体器件的功能命令+数据,即可以对指定的具体器件进行操作。
2.2 主控制部分 2.4 数码管
数码管也称LED数码管,晶美、光电、不同行业人士对数码管的称呼不一样,其实都是同样的产品。
数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,多一个小数点显示;按显示可分为1位、2位、3位、4位、5位、6位、7位等数码管。
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,
6
相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮[9]。
第三章 多点温度采集系统的硬件电路的设计
3.1 多点温度采集系统的硬件模块划分
多点温度采集系统的硬件模块划分如图3.1所示。
图3.1多点温度采集系统的硬件模块 如下
他由51单片机、显示模块和DS18B20模块组成,其各个部分详细说明(1)51单片机:多点温度采集系统的核心控制器。
7
(2)DS18B20温度采集模块:采集当前各个点的温度数据。 (3)1602液晶显示器:显示用户当前各个采集点的温度信息。
3.3.1 51单片机
ATC51单片机是宏晶科技推出的新一代超强抗干扰、高速、低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,最新的D版本内部集成MAX810专用复位电路。引脚图如图3.2所示
图3.2 AT51引脚
。
VCC :电源 GND :地
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
8
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为ATC51特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。 引脚号第二功能如表3.1所示
表 3.1 引脚号第二功能
P3.0 P3.1 P3.2 P3.3 P3.4 RXD(串行输入) TXD(串行输出) INT0(外部中断0) INT1(外部中断1) T0(定时器0外部输入) 9
P3.5 P3.6 P3.7
T1(定时器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器写选通) RST:复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端[4]。
3.3.2 DS18B20传感器
DS18B20是拉达斯(Dallas)公司出品的数字温度传感器,其使用1-wire总线接口,该器件的主要技术特点如下。
(1)工作电压范围广。3~5.5V,并且可以使用寄生电容供电方式。 (2)集成度高。所有的应用模块都集中在一个和普通三极管大小相同的芯片内,应用过程中不需要任何外围器件,使用1-wire总线接口和51单片机进行数据通信。
(3)温度测量范围大。可测量温度区间为-55~125℃,其中在-10~85℃的区间内测量精度为0.5℃。
(4)测量分辨率可变。测量分辨率可以设置为9~12位,对应的最小温度刻度为0.5℃、0.25℃、0.125℃、0.0625℃.
(5)转换速度快。在9为精度时最快,耗时93.75ms,在12位精度时则需要750ms。
(6)支持多个设备。支持在同一条1-wire总线上接挂多个DS18B20器件形成多点测试,在数据传输过程中可以跟随CRC校验。 DS18B20引脚封装结构 如图3.3所示
10
图3.3 DS18B20的引脚封装图
(1)VCC:电源输入引脚,如果使用寄生供电方式,该引脚直接链接到GND。
(2)GND:电源地引脚。
(3)DQ:数据输入/输出引脚。
DS18B20内部有一个位的ROM空间用于存放序列号,序列号由8位产品种类编号(0x28)、48位产品序列号和8位CRC校验位组成,每一个DS18B20都有一个唯一的序列号,可用于区别其他的DS18B20。
DS18B20可以将温度转换成两个字节的数据,可以配置设定为9~12为精度,表10.7是12位精度的数据存储结构,其中S为符号位,当温度高于0℃是S为0,此后11位数据直接乘以温度分辨率0.0625,则为实际温度;当温度低于0℃是S为1,此时后11位数据为温度数据的补码,需要取反加一之后再乘与温度分辨率才能得到实际的温度。
DS18B20的温度分辨率只和采样的精度位数有关,9位采样精度时对应的分辨率为0.5℃,10位为0.25℃,11位为0.125℃,12位为0.625℃。用两
11
个字节的转换结果乘以对应的分辨率就可以得到温度值,但是需要注意的是采用的精度数越高,则需要采样的时间就越长,其内部存储格式参见表3.2。
表3.2 DS18B20的温度数据存储结构
DS18B20内部集成了一个有9个字节的ROM,其内部结构件见表3.3
表3.3 DS18B20的高速缓存内部结构
DS18B20高速缓存中的配置寄存器用于设置DS18B20的工作模式及采样精度,其内部结构见表3.4,其中TM位用于切换DS18B20的测试模式和正常工作模式,在芯片出场时该位置被置0,即设置到了正常工作模式。
表3.4DS18B20配置寄存器的内部结构
配置寄存器中的R1和R0位用于设置DS18B20的采样精度。见表3.5
表3.5DS18B20的采样精度设置
1-wire总线的工作流程包括总线初始化、发送ROM命令+数据及发送功能命令+数据3个步骤,其中功能命令由具体的器件决定,用于对器件内部进行具相应功能的操作,DS18B20的功能命令见表3.6
12
表3.6DS18B20的功能命令列表
DS18B20的详细操作步骤如下: (1)复位1-wire总线;
(2)当同一条总线上存在多个DS18B20时匹配ROM,否则跳过; (3)设置DS18B20的警报温度上下限; (4)启动采集并且等待采集结束; 读取温度数据低位,读取温度高位。
3.3.3 1602液晶显示器
在单片机系统中应用晶液显示器作为输出器件有以下几个优点: (1)显示质量高。由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。
(2)数字式接口。液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
(3)体积小、重量轻。液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
(4)功率消耗小。相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器件小很多。液晶显示模块介绍
13
液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件.英文名称叫“LCD Module”,简称“LCM”,中文一般称为“液晶显示模块”。实际上它是一种商品化的部件.根据我国有关国家标准的规定:只有不可拆分的一体化部件才称为“模块”,可拆分的叫作“组件”。所以规范的叫法应称为“液晶显示组件”。但是由于长期以来人们都已习惯称其为“模块”。 一、数显液晶模块
这是一种由段型液晶显示器件与专用的集成电路组装成一体的功能部件,只能显示数字和一些标识符号。段型液晶显示器件大多应用在便携、袖珍设备上。由于达些设备体积小,所以尽可能不将显示部分设计成单独的部件,即使一些应用领域需要单独的显示组件,那么也应该使其除具有显示功能外,还应具有一些信息接收、处理、存储传递等功能,由于它们具有某种通用的、特定的功能而受市场的欢迎。常见的的数显液晶显示模块有以下几种。 1.计数模块
这是一种由不同位数的七段型液晶显示器件与译码驱动器,或再加上计数器装配成的计数显示部件。它具有记录、处理、显示数字的功能。目前我国市场上能够见到的主要产品有由CD4055译码驱动器驱动的单位液晶显示器件显示模块,以及由ICM72ll,ICM7231,ICM7232,CDl43,UPDl45001,HD44100等集成电路与相应配套的液晶显示器件组装成的4位、6位、8位、10位、12位、16位计数模块.在选用这类计数模块时必须注意以下几点: (1)弄清功能:虽说都叫“计数模块“,但其中大部分并不能直接计数。它们的输人端口有的仅是BCD码接口形式,有的是BCD码加选通端输人接口形式,还有的是可直接与串行、并行口相接的接口形式等等,如需要计算或记录一串数字,还必须配置相应的电路,当然也有将计数电路配好在模块上的产品。 (2)认准结构:液晶显示器件有不同的安装方法和安装结构。固此,在选用时要注意其结构特点,一般来说,这种计数模块大都由斑马导电橡胶条、塑料(或金属)压框和PCB板将液晶显示器件与集成电路装配在一起而成。其外引线端有焊点式、插针式、线路板插脚式几种。 (3) 注意电源:一台设备应该尽量使用统一的电源,常见的液晶显示器件计数模块有单电源型和双电源型,有5V和9V等不同规格。 2.计量模块
这是一种有多位段型液晶显示器件和具有译码、驱动、计数、A/D转换功能的集成电路片组装而成的模块。由于所用的集成电路中具有A/D转换功能,所以可以将输入的模拟量电信号转换成数字量显示出来。我们知道任何物理量,甚至化学量(如酸碱度等)都可以转换为模拟电量,所以只要配上一定的传感器,这种模块就可以实现任何量值的碉量和显示,使用起来十分方便。计量模块所用的集成电路型号主要有ICL7106、ICL7116、ICL7126、ICL7136、ICL7135、ICL7129等,这些集成电路的功能、特性
14
决定了计量模块的功能和特性。作为计量产品,按规定必须进行计量鉴定。经计量部门批准在产品上贴有计量合格证。 3.计时模块
计时模块将液晶显示器件用于计时历史最久,将一个液晶显示器件与一块计时集成电路装配在一起就是一个功能完整的计时器。声于它没有成品钟表的外壳,所以称之为计时模块。计时模块虽然用途很广,但通用、标准型的计时模块却很难在市场上买到,只能到电子钟表生产厂家去选购或定购合适的表芯,计时模块和计数模块虽然外观相似,但它们的的显示方式不同,计时模块显示的数字是由两位一组两位一组的数字组成的.而计数模块每位数字均是连续排列的。由于不少计时模块还具有定时、控制功能,因此这类模块可广泛装配到一些加电、设备上,如收录机、CD机、微波炉、电饭煲等电器上。 二、液晶点阵字符模块
它是由点阵字符液晶显示器件和专用的行、列驱动器、控制器及必要的连接件,结构件装配而成的,可以显示数字和西文字符。这种点阵字符模块本身具有字符发生器,显示容量大,功能丰富。一般该种模块最少也可以显示8位1行或16位l行以上的字符。这种模块的点阵排列是由5×7、5×8或5×11的一组组像素点阵排列组成的。每组为1位,每位间有一点的间隔,每行间也有一行的间隔,所以不能显示图形,其规格主要如右表所示: 一般在模块控制、驱动器内具有已固化好192个字符字模的 字符库CGROM,还具有让用户自定义建立专用字符的随机存储器CGRAM,允许用户建立8个5×8点阵的字符。 三、点阵图形液晶模块
这种模块也是点阵模块的一种,其特点是点阵像素连续排列,行和列在排布中均没有空隔。因此可以显示了连续、完整的图形。由于它也是有X-Y矩阵像素构成的,所以除显示图形外,也可以显示字符。
1.行、列驱动型 这是一种必须外接专用控制器的模块,其模块只装配有通用的行、列驱动器,这种驱动器实际上只有对像素的一般驱动输出端,而输入端一般只有4位以下的数据输入端、移位信号输人端、锁存输人端、交流信号输人端等,如HD44100,IID66100等.此种模块必须外接控制电路,如HD61830,SEDl330等才能与计算机连接.该种模块数量最多,最普遍。虽然需要采用自配控制器,但它也给客户留下了可以自行选择不同控制器的自由.
2.行、列驱动-控制型 这是一种可直接与计算机接口,依*计算机直接控制驱动器的模块。这类模块所用的列驱动器具有I/O总线数据接口,可以将模块直接挂在计算机的总线上,省去了专用控制器,因此对整机系统降低成本有好处。对于像素数量不大,整机功能不多,对计算机软件的编程又很熟悉的用户非常适用。不过它会占用你系统的部分资源。
3.行、列控制型 这是一种内藏控制器型的点阵图形模块。也是比较受
15
欢迎的一种类型.这种模块不仅装有如第一类的行、列驱动器,而且也装配有如T6963C等的专用控制器。这种控制器是液晶驱动器与计算机的接口,它以最简单的方式受控于计算机,接收并反馈计算机的各种信息,经过自己的信息处理实现对显示缓冲区的管理,井向驱动器提供所需要的各种信号、脉冲,操纵驱动器实现模块的显示功能。这种控制器具有自己一套专用的指令,并具有自己的字符发生器CGROM.用户必须熟悉这种控制器的详细说明书,才能进行撮作。这种模块使用户摆脱了对控制器的设计、加工、制作等一系列工作,又使计算机避免了对显示器的繁琐控制,节约了主机系统的内部资源。
本次系统设计主要采用1602液晶显示器。 一、液晶驱动IC基本特性
1、具有低功耗、供应电压范围宽等特点。
2、具有16common和61segment输出,并可外接驱动IC扩展驱动。
3、具有2560位显示RAM(DD RAM),即80×8×4位
4、具有与68系列或80系列相适配的MPU接口功能,并有专用的指令集,可完成文本显示或图形显示的功能设置
LCD12232液晶模块基本特性
视域尺寸:60.5×18.0mm(12232-1/-2),.8×18.3mm(12232-3) 显示类型:黄底黑字
LCD显示角度:6点钟直观
驱动方式:1/32 duty,1/6 bias 连接方式:导电胶条,铁框
● 补充说明:模块外观尺寸可根据用户的要求进行适度调整
LCD12232液晶模块电气特性 (测试条件 Ta=25,Vdd=5.0±0.25V) 1、输入高电平(Vih):3.5Vmin 2、输入低电平(Vil):0.55Vmax 3、输出高电平(Voh):3.75Vmin 4、输出低电平(Vol):1.0Vmax 5、工作电流:2.0mAmax
LCD12232液晶模块工作参数
1、逻辑工作电压(VDD-VSS):2.4~6.0V 2、LCD驱动电压(Vdd-Vlcd):3.0~13.5V
3、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温)
4、保存温度(Tstg):-10~70℃ 5、驱动电流:最大240微安。
LCD12232液晶模块分为20脚封装或18脚封装,引脚功能如下
16
VDD:逻辑电源正 GND(VSS): 逻辑电源地 VO(VEE):LCD驱动电源
RESET:复位端,对于68系列MPU:上升沿(L-H)复位,且复位后电平须保持为高电(H);对于80系列MPU:下降沿(H-L)复位,且复位后电平须保持为低电平(L)。
E1:读写使能。对于68系列MPU,连接使能信号引脚,高电平有效; 对于80系列MPU,连接/RD引脚,低电平有效。
E2:同E1引脚。
/RD:读允许,低电平有效。 /WR:写允许,低电平有效。
R/W:读写选择,对于68系列MPU,高电平时读数据,低电平时写数据; 对于80系列MPU,低电平时允许数据传输,上升沿时锁定数据。
A0:数据/指令选择,当为高电平:数据D0-D7将送入显示RAM当为低电平:数据D0-D7将送入指令执行器执行。
D0-D7:数据输入输出引脚。
LCD12232液晶模块包括14条指令
2、工作原理
基于ATC51单片机数字测速仪电路的工作原理:电源电路为单片机以及其他模块提供标准5V电源;震荡模块为单片机提供时钟标准,使系统各部分能协调工作;复位电路模块为单片机提供复位功能;单片机作为主控制器,根据输入信号对系统进行相应的控制;显示模块用来显示具体的速度测量的结果,它会记录被测物体8秒通过两次的速度;发光二极管可以通过发光的形式显示被测物体的通过情况[10]。
第四章键盘及显示电路
4.1 显示部分
此多点温度测量电路的显示电路采用4位共阳LED数码管,从P1口输出段码,列扫描用P2.0—P2.3口来实现,列驱动用8550三极管,以实现LED的动态扫描。。
17
图 3-1 测速电路
4.2 数码管介绍
数码管介绍 有荧光七段数码管或是七段发光二极管(LED)数码管,还有液晶(LCD)显示七段数码管。七段数码分别由a、b、c、d、e、f、g七段组成。要显示什么字型,通过译码驱动电路使相应发光段发光,完成显示。不同发光段可以组成0-9中的任何数字,如要显示2,选通a、b、d、e、g段即可。 LED七段发光二极管显示,它可直接显示出译码器输出的十进制数,它具有共阳接法和共阴接法两种。共阳接法就是把发光二极管的阳极都连在一起接到高电平上,共阴接法则相反,它是把发光二极管的阴极都连在一起接地。七段显示器的内部LED接法和外引线排列分别如图
图4.1数码管内部LED接法
18
图4.2七段发光二极管(LED)数码管外引线排列
4.2报警电路
温度报警电路采用NPN三极管、电阻和蜂鸣器组成。在设定报警温度后,超出温度范围时,由报警电路实现报警功能。
图4.3报警电路图
4.2 振荡电路设计
单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶
19
振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作以提供稳定、精确的单频振荡。
单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。 晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供[11]。
振荡电路接在单片机XTAL1和XTAL2脚,XTAL1和XTAL2是的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。本设计采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL1、XTAL2 的引脚上外接定时元件,一个石英晶体振荡器和两个电容,内部振荡器便能产生自激振荡。STCC51RC最高支持33MHz的晶振,为使单片机处理数据的速度尽量快,这里选用12MHz的晶振。 如图3-2所示。
图 3-2 振荡电路
3.2.3复位电路设计
20
当外部晶振大于10MHz时,单片机需要外部复位电路。当程序跑飞或死机时,就需要进行复位。STCC51RC单片机的复位引脚是RST脚,当出现两个机器周期以上的高电平时,单片机就执行复位操作。如果RST 持续为高电平,单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和手动按键电平复位。
上电自动复位是通过外部复位电路给电容C充电嫁给RST引脚一个短的高电平信号,此信号随着Vcc对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C的充电时间。因此为保证系统能可靠地复位,RST引脚上的高电平必须维持足够长的时间。
手动按键电平复位是通过RST端经电阻与电源Vcc接通来实现,当按下按键时,RST就能接收到高电平信号,继而实现复位。本设计采用手动按键电平复位[12]。如图3-3所示。
图 3-3 复位电路
3.3 温度测试电路 3.4 串口通讯电路 3.5
整
体
电
路
21
第四章 软件设计
4.1概述
基于ATC51单片机数字测速仪的程序流程图。其中初始化包含了对定时器的选用个初始值的设置。然后通过霍尔传感器感应脉冲,记录所感应到的脉冲数最后通过数码管显示。如图4-1所示。
N
Y
数码管显示
图 4-1 数字测速仪的程序流程图
脉冲计数加1 有无脉冲 初始化 开始 4.2 主程序方案
对软硬件部分有了初步的设计后,便需要开始进行软件的编写调试硬件电路的仿真了,系统的仿真对于系统设计来说非常有必要,只有系统的仿真成功之后才能进一步焊接出我们需要的硬件电路。
4.2.1 系统软件的调试
对于系统的软件这一部分我们采用C语言来进行编写,写出来的源代码我们通过keil-c来进行调试,检查是否有语法上的错误或警告等。软件部分的调试,显示的是分别进行了编译、连接和运行操作后的结果。如图4-2所示。
22
图 4-2 keil-c编译
4.2.2 系统硬件的仿真
完成的系统软件的调试并且没有错误警告之后,我们要进行的是硬件的仿真,在硬件仿真中我们需要用到的是protues仿真软件,之所以选择这个仿真软件,是因为protues里面可以仿真单片机部分。在仿真开始之前,先在protues里面画好单片机和显示部分的硬件电路图,其电路图如图4-3所示。
图 4-3 整体电路图
23
在这个硬件仿真电路中,因为设计的是利用霍尔传感器进行测量,而其中的霍尔元器件在库里面是找不到的,所以这里的仿真只能用一个脉冲发生器来替代霍尔传感器,这个脉冲发生器可以产生任意频率的脉冲信号,让我们可以进行多次不同输入的测试,来确定电路的正确性。
连接好硬件电路后,在图中的单片机ATC51中导入刚刚所生成的junxun001.hex文件,在脉冲发生器中输入频率为1Hz时,频率所设定的值如图4-4所示,然后再运行则数码管显示一定的数值,这就可以看做是8秒内小磁钢切割霍尔元器件的速度仿真。如图4-4所示。
图 4-4 输入频率1Hz脉冲
则仿真结果的显示,如图4-5所示。
图 4-5 频率为1Hz时测得的速度
24
从图中所显示出的数据看来,单片机的处理部分和显示部分是没有问题的,是可靠且行得通的硬件电路部件,但是为了进一步体现其正确性,我通过更改脉冲发生器的频率对它们进行比较,具体的仿真结果分别如。
当频率更改为1.1Hz时,如图4-6所示。
图 4-6 输入频率1.1Hz脉冲
则仿真的结果也随之发生改变,如图4-7所示。
图 4-7 频率为1.1Hz时测得的速度
25
当频率更改为1.2Hz时,如图4-8所示。
图 4-8 输入频率1.2Hz脉冲
则仿真结果再次发生改变,如图4-9所示。
图 4-9 频率为1.2Hz时测得的速度
26
通过整个硬件电路的仿真以及设置不同频率后仿真结果的比较,基本上可以确定电路的显示和单片机部分都是能够正常切正确工作的;仿真没有问题之后,接着就可以进行元器件的焊接,然后对焊接出来的成品进行硬件的调试。
4.2.3 系统硬件的调试
将元器件全部焊接到电路板上后,检查一下整个电路有木有出现虚焊、漏焊以及带有正负极的元器件接反等现象,在检查一切无误后,便可以开始通电进行测试。
图4-10为最终焊接出来的实物的正面,图4-11是实物的反面,由于自己对PCB元器件布线的生疏,所以产生了几根跳线,但并不影响整个电路及测试结果。
图 4-10 实物图正面
图 4-11 实物图反面
27
电路通电后,D1灯点亮,数码管点亮,因为没有小磁钢切割,所以数码管显示0000,D2灯也是灭的。如图4-12所示。
图 4-12 通电后的电路板
当小磁钢靠近霍尔元器件时,D2灯被点亮,因没有移动小磁钢进行切割,所以数码管上依旧是0000,数值没有出现任何变化。如图4-13所示。
图 4-13 小磁钢靠近霍尔元件时
28
围绕霍尔传感器滑动小磁钢时,每当小磁钢划过霍尔开关,霍尔开关便输出一个脉冲,然后根据所编程序计算出单位时间的脉冲数,最后在数码管上显示,说明调试成功。如图4-14所示。
图 4-14 小磁钢对霍尔元件进行切割
4.3 各模块主程序设计
29
第五章 系统调试
5.1 分部调试 5.2 统一调试
结束语
本次基于ATC51单片机的数字测速仪设计是采用霍尔传感器的测量方法,通过小磁钢在霍尔传感器周围来回切割,产生脉冲信号,然后将产生的脉冲信号送入单片中计数,最后计算出脉冲数并通过数码管用四位数字显示出来。数字测速设计中的关键问题,就是采集样本的问题,所以设计中的采样源为一块小磁钢,不仅降低成本、方便携带、环保,还可以做到只要通电就能实现测速的效果。
通过本次毕业设计,让我重新认识到了自己对曾经所学知识掌握不牢固带来的种种坏处,深深自责,当然经过这次毕业设计,让我在理论知识跟动手实践能力更强了,做事的逻辑性也加强了不少,了解常用数字测速的各种方法,及各自的优缺点,通过相互的比较,确定设计方案,并对所用传感器进行选型,同时加以电路的设计与分析,完成设计任务;知识上的收获虽然重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次毕业设计必将成为我人生旅途上一个非常美好的回忆。
30
参考文献
[1] 李建忠.单片机原理及应用.西安: 西安电子科技大学出版社,2002. 106-155
[2] 蓝江桥,曹汉房.现代数字电路设计.北京: 高等教育出版社,2006. 55-70
[3] 张鹏,王雪梅.单片机原理与应用实例教程.北京: 海洋出版社,2008. 221-226
[4] 刘同法.单片机C语言编程基础与实践. 北京: 北京航空航天大学出版社,2009.84-94
[5] 杨居义,杨晓琴,王益斌等.单片机课程设计指导.清华大学出版社,2009.135-141
[6] 宋戈.51单片机应用开发范例大全.北京: 人民邮电出版社,2010. 133-139
[7] 周润景.单片机电路设计、分析与制作,北京: 机械工业出版社.2010.-85
[8] 陈梓城,汪临伟,胡敏敏.实用电子电路域调试: 模拟电路.北京:中国电力出版社,2011.120-155
[9] 陆利忠.电子线路与电子系统.北京: 国防工业出版社.2013.111-136 [10] 元增民,张文希.单片机原理与应用基础.国防科技大学出版社,2006.205-266
[11] 谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.23-108
[12] D Shen,P W Lehn.Fixed-frequency Space Vector Modulation Control for Three-phase Four-leg Active Power Filters.IEE Proe. 2002,(4).268-274
31
附录
1、系统原理图及PCB
32
33
2、程序代码 #include //==============主函数================ void main() { } time0_int0_init();//定时器0和外部中断0的初始化 while(!TR0) //上电一直未切割时就显示 0.0.0.0 { init_display(); } while(1) { } if(!change)//按下切换按键显示里程 { } delay1m(5); if(!change) { flag = ~flag; } while(!change); //===============定时器0中断函数================ void time0_interrupt()interrupt 1 { TL0 = (65536 - 5000) % 256;// 12M晶振,5ms定时 TH0 = (65536 - 5000) / 256; display_function(); time_counter++; time_counter8++; 34 { } if(time_counter8 >= 1600)//大于8s没切割,车子视为停下了,速度 为:0,但里程还记着 } time_counter8 = 0; speed = 0;//速度为 0 point1 = 0; buf1[3] = speed%10;buf1[2] = speed/10%10; buf1[1] = speed/100%10;buf1[0] = speed/1000%10; //===================外部中断0中断函数====================== void int0_interrupt()interrupt 0 { external_counter++; { if(external_counter ==1 )TR0 = ~TR0;//第一次切割打开定时器0 if(external_counter == 65535)external_counter = 0; time_counter8 = 0; //只要8秒内有切割,车子就任在运行 if(external_counter % 2 == 0)//切割2次 更新下速度 //*5是因为 中断一次是5MS if(flag1==0){speed =((ulong)(36000)*zhouchang)/(time_counter * 5);flag1=1;} else if(flag1==1){speed =((ulong)(36000)*2*zhouchang)/(time_counter * 5);}//速度:单位为 m/h ,*1000的目的是不出现浮点数 数 if((speed >= 100)&&(speed < 1000)) //100 ---- 1000 3位整{ point1 = 1;buf1[3] = speed%10;buf1[2] = speed/10%10; buf1[1] = speed/100%10;buf1[0] = 0;} else if((speed >= 1000)&&(speed < 10000)) //1000 ---- 10000 35 4位整数 } { s = (ulong)external_counter * zhouchang; //里程:单位为 cm if((s >= 1000)&&(s < 10000)) { point2 = 1; // 0.012 001212 buf2[3] = s/100%10;buf2[2] = s/1000%10; buf2[1] = 0;buf2[0] = 0;}// 4位整数 else if((s >= 10000)&&(s < 100000)) { point2 = 1; buf2[3] = s/100%10;buf2[2] = s/1000%10; buf2[1] = s/10000%10;buf2[0] = 0;}// 5位整数 { point1 = 1;speed = (uint)speed; buf1[3] = speed%10;buf1[2] = speed/10%10; buf1[1] = speed/100%10;buf1[0] = speed/1000%10;} else if((speed >= 10000)&&(speed < 100000)) //10000 ----{ point1 = 2; buf1[3] = speed/10%10;buf1[2] = speed/100%10; buf1[1] = speed/1000%10;buf1[0] = speed/10000%10;} else if((speed >= 100000)&&(speed < 1000000)) //100000 ------ { point1 = 3; buf1[3] = speed/100%10;buf1[2] = speed/1000%10; buf1[1] = speed/10000%10;buf1[0] = speed/100000%10;} time_counter = 0; - 100000 5位整数 1000000 6位整数 if(external_counter % 8 == 0)//每切割8次 更新下里程 0.123 012345 36 } else if((s >= 100000)&&(s < 1000000)) { point2 = 1; buf2[3] = s/100%10;buf2[2] = s/1000%10; buf2[1] = s/10000%10;buf2[0] = s/100000%10;} // 6位 整数 1.234 1234 56 else if((s >= 1000000)&&(s < 10000000)) { point2 = 2; buf2[3] = s/1000%10;buf2[2] = s/10000%10; buf2[1] = s/100000%10;buf2[0] = s/1000000%10;}// 7 1234 567 else if((s >= 10000000)&&(s < 100000000)) { point2 = 3; buf2[3] = s/10000%10;buf2[2] = s/100000%10; buf2[1] = s/1000000%10;buf2[0] = s/10000000%10;} // 1234 5678 } 位整数 8位整数 //===========开电源就显示的数据,初始显示速度============= void init_display() { uchar i; for(i = 0;i < 4;i++) { wei = bitcode[num - 1]; led = display1[buf1[num--]]; delay1m(4); if(num == 0)num = 4; } } //==============显示函数================ void display_function() { 37 if(flag == 0)//显示速度 { switch(point1) { case 0:wei = bitcode[num-1];led = display1[buf1[num- 1]];num--;break;//速度显示 0 case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num--;} else { wei = bitcode[num-1];led = display1[buf1[num-1]];num--;}break;//最高位小数点亮 case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num--;} else { wei = bitcode[num-1];led = display1[buf1[num-1]];num--;}break;//第二高位小数点亮 case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num--;} else { wei = bitcode[num-1];led = display1[buf1[num-1]];num--;}break;//第三高位小数点亮 { } default:break; } if(num == 0)num = 4; else if(flag == 1)//显示里程 switch(point2) { case 0:wei = bitcode[num-1];led = display1[buf2[num- 1]];num--;break;//里程显示 0 case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num--;} 38 else { wei = bitcode[num-1];led = display1[buf2[num-1]];num--;}break;//最高位小数点亮 case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num--;} else { wei = bitcode[num-1];led = display1[buf2[num-1]];num--;}break;//第二高位小数点亮 case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num--;} else { wei = bitcode[num-1];led = display1[buf2[num-1]];num--;}break;//第三高位小数点亮 } } default:break; } if(num == 0)num = 4; //===========定时器0和外部中断0的初始化函数=========== void time0_int0_init() { TMOD |= 0x01; } TMOD &= 0xfd;//定时器0工作于方式1 TL0 = (65536 - 5000) % 256;//12M晶振,5ms定时 TH0 = (65536 - 5000) / 256; IT0 = 1;//外部中断0,负跳变触发方式 TR0 = 0; ET0 = 1; EX0 = 1; EA = 1; //===============ms 级延时函数=================== void delay1m(uchar x) { 39 uchar i,j; for(i=0;i 40 致谢 这次毕业设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和思考的能力。在设计的过程中可以说是困难重重,毕竟要一个人独自去完成做所有的设计,还有制作、焊接到最后的调试,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,导致绕了很多弯路。 本设计是在我的指导老师赵玲峰老师的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从毕业设计题目的选择到设计最终的完成,赵老师都始终给予我细心的指导和不懈的支持。在此向老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢在一起愉快地度过四年大学生活的各位同学,尤其是我的同宿舍同学,在我遇见困难、遇到瓶颈时,正是有了你们的无私的帮助和支持,我才能克服一个一个的困难和疑惑,直至毕业设计的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入毕业设计的构思到论文最终顺利的完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意! 41 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务