毕业设计
基于单片机的温度报警系统设计
学校: 专业: 班级; 姓名:
摘 要
近年来随着计算机与控制技术的蓬勃发展与广泛应用,人们从中受益良多,生活中也随处可见电子产品,自动化,智能化成为发展趋势,而以单片机为核心的应用正在不断地走向深入,同时带动传统控制检测的日新月益。本设计论述了一种以STC89C51单片机为控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并可设置温度上下限值,实现对环境温度测量并在超出范围的情况下发出警告。系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括STC89C51单片机最小系统,测温电路、LCD 液晶显示电路以及报警电路等。系统程序主要包括主程序,读出温度子程序,计算温度子程序、按键处理程序、LCD 显示程序以及数据存储程序等。
关键词:STC89C51单片机;DS18B20;LCD 显示电路
Abstract
In recent years, along with the computer and control technology of booming development and wide application, people benefit a lot from it, life also can be seen everywhere electronic products, automation, intelligent become development trend, and with the single chip processor as the core application is continuously to the deepening, and push the traditional control examination on the new victims. This design is discussed in STC89C51 micro control is a control unit, with the temperature sensor DS18B20 for the temperature control system. The control system can store related temperature data real-time and set up and down temperature limits, and to realize the environment temperature measurement and beyond the scope of the warning. The system design of the related hardware circuit and related applications. The hardware circuit STC89C51 mainly includes single chip minimize system, temperature measurement circuit, LCD display circuit, alarm circuit, etc. System program mainly includes the main program, read the temperature procedure, the calculation of temperature procedure, key processing program, LCD display procedures and data storage procedures, etc. key words :STC89C51 single-chip microcomputer ; DS18B20 ; LCD display circuit
1 绪论
1.1 课题的背景及其意义
二十一世纪是科技高速发展的信息时代,电子技术、单片机技术更是得到广泛的应用,伴随着科学技术的发展,需要对仪器设备的各种参数进行测量。而温度涉及到生活生产的各个方面,应运而生温度测量控制也成为了生活生产中关注的热点,对温度的控制在各行各业中也发挥着重要的作用。例如在工业生产之中,利用测量与控制温度来保证生产的正常运行;在农业中,用于保证蔬菜大棚的恒温生产;更具体点在生活中冰箱,空调等都需要对温度进行实时控制。
温度是表征物体冷热程度的物理量,温度测量则是工农业生产过程中一个很重要而普遍的参数。温度的测量及控制对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位。而且随着科学技术和生产的不断发展,温度传感器的种类还是在不断,从而满足生产生活中的各种需要。
单片机温度测量控制系统中的关键是测量温度、控制温度,从而达到各种需求。因此,单片机温度测量则是对温度进行有效的测量,并且能够在工业生产中得到了广泛的应用,尤其在电力工程、化工生产、机械制造、冶金工业、无线控制等重要工业领域中,扮演着重要角色。在日常生活中,也可广泛实用于空调器、电加热器等各种家居电器。
1.2 课题研究的内容及要求
我的毕业设计的题目是基于单片机的温度控制报警系统设计。它是多种技术知识的结合,不仅涉及到硬件的设计,还需要软件编程,同时还要兼顾到精度、测量误差、稳定性等各种因素。电路板是从电子市场买来,要自己亲手焊接,这就要考虑如何布线,来达到外观美观,功能实现的目标。经过查阅资料发现许多应用场合原来就有测温仪器,只是随着对生产质量与生产需要的要求在不断地提高、升级。其中,有部分应用场合对精度提高的幅度要求也不是特别高。因此,为了提高性价比,我所设计的系统提出在原有设计的基础上进行一些简单的修改,以此为出发点,主要阐述的是温度测量自动报警系统的实现方法。
本文所要研究的课题是基于单片机的温度报警系统设计,主要是介绍了对环境温度的测量、显示、控制及报警,实现了动态温度的实时显示。温度控制部分,提出了用AT89C51单片机、DS18S20、及LCD 显示的硬件电路完成对环境温度的实时检测及显示,利用DS18S20与单片机连接由软件与硬件电路配合来实现,超出设定的上下限温度,报警系统就自动报警。控制器是用89C51单片机,适合于应对多点的温度测控系统,可直接将温度转化成串行数字信号供微机处理,而且每片DS18S20都有唯一的产品号,可以一并存入其ROM 中,以便在构成大型温度测控系统时在单线上挂接任意多个DS18S20芯片。从DS18S20读出或写入DS18S20信息仅需要一根口线,其读写及其温度变换功率来源于数据总线,该总线本身也可以向所挂接的DS18S20供
电。同时DS18S20能提供九位温度读数,它无需任何外围硬件即可方便地构成温度检测系统。而且利用本次的设计主要实现温度测试,温度显示,温度门限设定,超过设定的门限值时自动启动自动报警等功能。而且还要以单片机为主机,使温度传感器通过一根口线与单片机相连接,再加上温度控制部分和人机对话部分来共同实现温度的监测与控制。
1.3 课题的研究方案
温度控制系统是比较常见和典型的过程控制系统。温度是工业生产过程中重要的被控参数之一,当今计算机控制技术在这方面的应用,已使温度控制系统达到自动化、智能化,比过去单纯采用电子线路进行PID 调节的控制效果要好得多,可控性方面也有了很大的提高。
本设计方案很简单,采用了STC89C51单片机系统来实现。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。单片机系统可以用液晶屏幕来显示环境温度的实际值,能用键盘输入设定上下线值。本方案选用了STC89C51芯片,本身存储器已够用,不需要外扩展存储器,可使系统整体结构大为简单从而大大提高了系统的智能化。
2 电路设计的理论基础
2.1 系统设计的框架
本课题设计的是一种以STC89C51单片机为主控制单元,以
DS18B20为温度传感器的温度控制报警系统。该控制系统可以实时存储相关的温度数据。其主要包括:电源电路、温度采集电路、按键处理电路、LCD 显示电路、报警电路以及单片机基本电路。下图(图2-1)为设计框架图。
2.2 单片机发展史
单片机根据其基本操作处理的二进制位数主要分为:4位单片机、8位单片机、16位单片机和32位单片机。
单片机的发展史可大致分为4个阶段。
第一阶段(1974年--1976年):单片机初级阶段。因工艺限制,单片机采用双片的形式而且功能比较简单。1974年12月,仙童公司推出了8位的F8单片机,实际上只包括了8位CPU 、64B RAM 和2个并行口。
:
第二阶段(1976年--1978年):低性能单片机阶段。1976年,Intel 公司推出的MCS--48单片机(8位单片机)极大地促进了单片机的变革和发展;1977年,GI 公司推出了PIC1650,但这个阶段的单片机仍然处于低性能阶段
第三阶段(1978年--1983年):高性能单片机阶段。1978年,Zilog 公司推出了Z8单片机;1980年,Intel 公司在MCS--48单片机的基础上推出了MCS--51系列,Motorola 公司推出了6801单片机,这些产品使单片机的性能及应用跃上了一个新的台阶。此后,各公司的8位单片机迅速发展起来。这个阶段推出的单片机普遍带有串行I/O口、多级中断系统、16位定时器/定时器,片内ROM 、RAM 容量加大,且寻址范围可达64KB, 有的片内还带有A/D转换器。由于这类单片机的性能价格比高,所以被广泛应用,是目前应用数量最多的单片机。
第四阶段(1983年--现在):8位单片机巩固、发展及16位单片机和32位单片机推出阶段。16位单片机的典型产品为Intel 公司生产的MCS--96系列单片机。而32位单片机除了具有更高的集成度外,其数据处理速度比16位单片机提高许多,性能比8位、16位单片机更加优越。20世纪90年代是单片机制造业大发展的时期,这个时期的Motorola 、Intel 、ATMEL 、德州仪器(TI )、三菱、日立、Philips 、LG 等公司也开发了一大批性能优越的单片机,极大地单片机的应用。近年来,又有不少新型的高集成度的单片机产品涌现出来,出现了单片机丰富多彩的局面。目前,除了8位单片机得到广泛用用上的展表明,80C51可能最终形成事实上的标准MCU 芯片。
2.3 STC89C51系列单片机介绍
2.3.1 STC89C51特性
STC89C51是一种带4K 字节闪烁可编程可擦除只读存储器
(FPEROM —flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。而AT89C2051是一种带2K 字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
·与MCS-51 兼容
·4K 字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32位可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2.3.2 STC89C51系列引脚功能
STC89C51有40引脚双列直插(DIP )形式。其逻辑引脚图如图2-2。
图2-2 STC89C51引脚图
各引脚功能叙述如下:
1.电源和晶振
VCC (40脚)——接+5V电源
GND (20脚)——接数字地
XTAL1(19脚)——片内震荡器反相放大器和时钟发生器电路的输入端
XTAL2(18脚)——片内震荡器反相放大器的输出端
2.I/O(4个口,32根)
P0口——P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口——P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。P2口——P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,
P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
P3口——P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。
同时,P3口也可作为STC89C51的一些特殊功能口,如下表所示: 口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
3.控制线(共4根)
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器
(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET ;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
3 硬件电路设计
3.1 电源电路
工作原理:220V 交流市电经过电源变压器变换成交流低电压,再经过桥式整流电路D2~D5和滤波电容C5的整流和滤波,在三端稳压器LM7805的Vin 和GND 两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化) 。此直流电压经过LM7805的稳压和C7的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压。本稳压电源可作为TTL 电路或单片机电路的电源。三端稳压器是一种标准化、系列化的通用线性稳压电源的集成电路,其具有体积小、成本低、性能好、工作可靠、使用简捷方便等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。电源电路图如图3-1。
图3-1 电源电路
LM7805简介:LM7805是一种常用的三端稳压器,一般使用的是TO-220封装,能提供DC 5V的输出电压,应用范围极广,内含过流过热及调整管的保护电路和过载保护电路。带散热片时能持续提供1A 的电流。电子制作中经常采用。但当稳压管温度过高时,稳压性能将变差,甚至损坏。
其外形引脚如图3-2。
图3-2 LM7805引脚图(管脚图)
3.2 温度传感器电路
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,使用方便,封装形式多样,适用于各种狭小空间设备的数字测温和控制领域。
DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。超小的体积,超低的硬件开销,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎,DS18B20的优势更是我们学习单片机技术和开发温度相关小制作不二的选择,其技术性能描述为:
① 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
② 测温范围 -55℃~+125℃,固有测温分辨率0.5℃。 ③ 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个, 实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④ 工作电源: 3~5V/DC
⑤ 在使用中不需要任何外围元件
⑥ 测量结果以9~12位数字量方式串行传送
⑦ 温度数字量转换时间200ms(典型值)
⑧ 用户可定义的非易失性温度报警设置
其外形如图3-3所示。
图3-3 传感器外形图
本设计采用一线制数字温度传感器DS18B20来作为本课题的温度传感器。传感器信号经4.7K 的上拉电阻直接接到单片机的P2.0管脚上。
DS18B20温度传感器只有三根外接线:单线数据传输总线DQ ,外供电源线VDD ,共用地线GND 。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD 接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度的转换,相应的完成温度转换所需时间也较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另外一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间会较短。
工作原理及其应用:DS18B20温度检测与数字数据的传输集成于一个芯片之上。其工作一个周期可以分为二个部分,即温度检测与数据处理。18B20有三种形态的存储资源,分别是ROM ,RAM ,EEPROM 。 ROM 只读存储器,共64位,用于存放DS18B20ID 编码,其前八位是单线系列编码(DS18B20的编码是19H ),后面48位是芯片唯一的序列号,最后的八位是以上56位的CRC (冗余校验码)。其数据在出厂时设置,不由用户更改。
RAM 数据暂存器,用于数据计算和数据存取,数据在掉电后消失,DS18B20共9个字节的RAM ,每个字节为八位,第1,2字节是温度转换后的数据值信息,第3,4字节是用户EEPROM (常用于温度报警值的存储)的镜像。在上电复位时,其值将被刷新。第5个字节则是用户第3个EEPROM 的镜像。第6,7,8个字节则是计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是温度转换、计算的暂存单元,第9个字节是前八个字节的CRC 码。
EEPROM是非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据。DS18B20共3位EEPROM ,并在RAM 上都存在镜像,以方便用户操作。
我们在读温度之前都必须进行复杂的且精准的时序处理,因为DS18B20硬件简单,从而导致软件的巨大开销,也是尽力减少有形资产化为无形资产的投入。
控制器对DS18B20的操作流程:
1.复位 :首先我们必须对DS18B20进行复位,复位就是由控制器给DS18B20单总线至少480us 的低电平信号,当DS18B20接到此复位信号后,回发一个芯片的存在脉冲。
2.存在脉冲 :在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15--60us 后接受存在脉冲,存在脉冲为一个60--240us 的低电平信号。至此,通信双方已达成了基本的协议,接下来将会是控制器与DS18B20的数据通信,如果复位低电平的时间不足或是单总线断路都不会接收到存在脉冲。
3.控制器发送ROM 指令:双方打完招呼后就要进行交流了,ROM 指令共5条,每一个工作周期只能发送一条,ROM 指令分别是读ROM 数据,指定匹配芯片,跳跃ROM ,芯片搜索,报警芯片搜索。ROM 指令为八位长度,功能是对片内的64位光刻ROM 进行操作。其主要目的是为了分别总线上挂接的多个器件并做处理,一般情况下,直挂一个DS18B20的就跳过ROM 指令,此处并不是不发送ROM 指令,而是用一条特有的一条“跳过指令”。
4.控制器发送存储器操作指令:在发送ROM 指令之后,接着就发送存储器操作指令。操作指令同样为八位,共六条,分别为写RAM 数据,读RAM 数据,将RAM 数据复制到EEPROM ,温度转换,将EEPROM 中报警值复制到RAM ,工作方式切换。存储器操作指令是命令DS18B20做什么样的工作,是芯片控制的关键。
5.执行或数据读写:这个操作要视存储器操作指令而定。
在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,其接口电路如图3-4所示。
图3-4 温度传感器电路
3.3 显示电路
1602字符型LCD 通常有14条引脚线或16条引脚线的LCD ,多出来的2条线是背光电源线其各引脚介绍如表3-1。
表3-1 LCD引脚说明
引脚
1
2
3 符号 VSS VDD V0
4
5
6
7
8
9
10
11
12
13
14
15
16 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 BL+ BL- 功 能 说 明 接 地 接 电 源 (+5 V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,使用时可以通过一个10K 的电位器调整对比度 RS 为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器 R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作 使 能 端 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 背 光 电 源 正 极 背 光 电 源 负 极
本设计显示电路采用1602液晶显示,其电路图如下(图3-5):
图 3-5 显示电路
3.4 报警电路
报警电路采用简单的发光二极管与蜂鸣器组合电路,当温度超出上下门限值时,二极管发光,同时蜂鸣器鸣响。其电路图如图3-6:
图 3-6 报警电路
3.5 复位电路
本设计所用复位电路与其他单片机所用电路类似,为电容式复位,其电路图如下(图3-7):
图3-7 复位电路
4 软件设计
系统的软件主要是采用C 语言,对单片机进行编程实现各种功能。当然,也可以采用汇编语言,但程序设计较麻烦,本设计采用C 语言来编程,主程序对模块进行初始化,而后调用读温度、处理温度、显示、键盘,报警等模块。用的是循环查询方式,来显示和调节温度,主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值并负责调用各子程序, 其程序流程如图4-1系统程序流程图。
图4-1系统程序流程图
4.1 按键处理子程序
按键处理子程序主要是负责参数的设置,主程序每循环一次都要对按键进行扫描, 判断是否有输入键按下则进行一系列的按键输入操作。其程序流程框图如图4-2所示。
图4-2温度转换流程图
5 系统调试及结论分析
单片机应用系统组装后,便可进行调试,其主要任务是排除硬件故障,并完善其硬件结构,试运行所设计的程序,一一排除程序错误之处,并优化程序的结构,使系统达到设计的期望值。
5.1 硬件调试
单片机应用系统的硬件和软件调试是交叉进行的,但通常是先排除仿真时明显的硬件故障,尤其是电源故障,才能安全地进行仿真,进一步进行硬件及软件综合调试。
5.1.1 硬件电路故障及解决方法
1.错线、开路、短路:由于电路图设计错误和焊接过程中的工艺性错误所造成的错线、开路、短路等故障,例如电源电路正负极相连、虚焊、漏焊等。本设计在焊接时就出现过错焊,漏焊现象。
解决方法:在画原理图时仔细检查、校正,在焊接时注意连接好即可解决。
2.元器件损坏:由于对元器件使用要求的不熟悉及制作调试过程中操作不当操作等致使器件损坏。
解决方法:在设计过程中要明确各元器件的工作条件,严格按照制作要求进行操作,在焊接过程中,注意温度的控制,损坏的元器件要及时更换,以免影响电路功能的实现。
3.电源故障:设计中存在电源故障,即电源不能正常工作,上电后将造成元器件损坏,从而影响整个电路。电源的故障包括:电压值不符和设计要求,变压器功率不足,内阻大,负载能力差,电源电压不稳定等等。
解决方法:电源必须单独调试好以后,测量准确稳定后才能加到系统中。
5.1.2 硬件调试方法
本设计调试过程中所用的调试方法静态测试法。
在加电之前,首先用万用表等仪表工具,根据硬件电器原理图和装配图仔细检查线路的正确性,并核对元器件的型号、规格、大小和安装是否符合要求。应特别注意电源的走线,防止电源之间的短路,第二步是加电后检查各个元件上引脚的电位是否正常,尤其应注意单片机插座上的各点电位,若有高压,联机时将会损坏元件。
5.2 软件调试
在完成了各个模块的程序的调试工作以后,便可与硬件结合进行系统的综合调试。综合调试一般采用全速断点运行方式,这个阶段的主要工作社排除系统中遗留的错误以提高系统的动态性能以达到期望值。在综合调试的最后阶段,使系统全速运行目标程序,实现了预定功能指标后,便可将软件固化,然后再运行固化的目标程序,成功后目标系统便可脱机运行。一般情况下,这样的一个应用系统程序就算是研制成功了。
6 总结与展望
6.1 总 结
毕业设计做结束后,也就意味着我们的大学生活接近尾声了,学无止境,我们的学习并没有结束,以后要学的还有很多,在本次设计中,使我更懂得了学习的重要性,同时,也是我们所学得到了实践。再设计中,有很多东西都是现学现用,感觉到今后还有很多要学习,本文用STC89C51单片机作为控制器,温度信号通过温度传感器传输给单片机,通过单片机分析计算,输出显示并响应报警。通过这次设计,使我有很深的感触:科学技术发展迅猛无比,尤其以单片机为核心的技术在未来社会发展中一定会起着十分重要的作用。本次设计主要分为两部分,软件程序设计和硬件电路板设计。软件设计包括用单片机C 语言控制系统。硬件设计包括绘制电路原理图,元件焊件、再做硬件测试,调节,直至最后成功。通过这些都使我对采用单片机设计方法有了更深的理解,同时也让我把所学的知识在实践中得到锻炼,基本上做到了理论与实践相结合。此次设计无论从专业知识、动手能力,都使我受益匪浅。其中,这与老师和同学的热心帮助是分不开的。大学生活虽然快要结束了,但我们的学习并没有结束,只有通过不断努力的学习,用知识充实自己的大脑,才能在未来社会有一席之地,才能为社会的发展做出自己应有的贡献。
6.2 展望
单片机改变着我们的生活,纵观各个领域,各行各业,从飞机上各种仪表的控制到导弹的导航,从计算机的通讯与数据输入输出,到工业自动化过程的实现,以及我们生活中广泛使用的各种电子产品等等,这些都离不开单片机。相信,以后单片机会得到更为广泛的应用。
目前,测温控温系统得到了很快的发展,近几年,国内也涌现出许多高精度的温度控制系统,但相对于用户来说,价格还是有点高。而由于竞争越来越激烈,现在企业发展的趋势是如何有效的提高生产效率,降低生产成本。寻求性能可靠、价格低廉,且应用广泛的元器件是生产过程的首先要考虑和解决的问题,因此像本设计这种控制简单、价格低廉的控制系统会有很好的发展前景,并且在此设计基础之上,还可扩展出其他应用功能,所以学好单片机技术也十分重要。 通过本次的设计,使我感觉到单片机的应用会越来越广泛,并将深入到各个领域,自动化、智能化是其发展趋势,学好单片机及其与其它软件相结合技术必有光明前途。
参考文献
[1] 张毅刚,彭喜元,彭宇. 单片机原理及应用[M].高等教育出版社,2010年5月.
[2] 曹巧媛主编. 单片机原理及应用. 第二版. 北京:电子工业出版社.
[3] 何力民. 单片机高级教程. 北京:北京航空大学出版社.
[4] 金发庆. 传感器技术与应用. 北京机械工业出版社.
[5] 薛弘晔. 计算机控制技术. 西安电子科技大学出版社.
[6] 谭浩强.C 程序设计[M].清华大学出版社.
[7] 康华光. 电子技术基础. 高等教育出版社 .
[8] 华成英,童诗白主编. 模拟电子技术基础[M].高等教育出版社.
[9] 阎石. 数字电子技术基础[M].第五版. 高等教育出版社,2005.
[10] 史久贵. 基于Altium Designer 的原理图与PCB 设计[M].机械工业出版社,2011.
附录
1:系统原理图
2:实物图
3:系统相关程序
#include
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit dq=P2^0; //位声明
sbit beep=P1^1;
sbit d=P1^0;
sbit k1=P1^2;
sbit k2=P1^3;
sbit k3=P1^4;
sbit lcden=P2^6;
sbit lcdrw=P2^5;
sbit lcdrs=P2^4;
uchar code str[]="OK";
uchar code str0[]="TOO HIGH!";
uchar code str1[]="TOO LOW!";
uchar code str2[]="SET";
uchar code str3[]="MAX:";
uchar code str4[]="MIN:";
uchar temp,flag1,flag2,max,min;
void write_com(uchar); //液晶写命令子程序 void write_data(uchar); //液晶写指令子程序 void delay_(uint); //一微秒延时程序
void init_d(); //ds18b20初始化子程序 void delay(uint); //一毫秒延时子函数
void write_byte(uchar); //ds18 b20写字节子程序 uchar read_t(); //检测温度程序
uchar read_byte(); // ds18 b20读字节子程序 void display(); //显示温度子程序 void write_str(uchar *); //向液晶内写入字节 void display_max(); //显示最大值子程序 void display_min(); //显示最小值子程序 void main()
{
max=40; min=20; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(1); while(1
while((flag1==0)&&(flag2==0)) { write_com(1); temp=read_t(); display(); write_com(0x80+9); write_data('C'); if(temp>max) { beep=0; d=0; write_com(0x80+0x40+4); write_str(str0); delay(200); } else if(temp
{ { if((flag1==0)&&(flag2==0)) flag1=1; else if((flag1==1)&&(flag2==0)) } flag1=0; flag2=1;
else
{
flag1=0;
flag2=0;
}
while(!k1); //松手检测 write_com(1);
}
}
}
while((flag1==1)&&(flag2==0))
{
beep=1;
d=1;
write_com(0x80+1);
write_str(str2);
write_com(0x80+6);
write_str(str3);
write_com(0x80+14);
write_data('C');
write_com(0x80+0x40+6);
write_str(str4);
write_com(0x80+0x40+14);
write_data('C');
display_max();
display_min();
while((flag1==1)&&(flag2==0))
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
max++;
if(max==61)
max=min+5;
display_max();
}
}
if(k3==0)
{ delay(5); if(k3==0) { while(!k3); max--; if(max==(min+4)) max=60; display_max(); } } if(k1==0) { delay(5); //消抖 if(k1==0) { if((flag1==0)&&(flag2==0)) flag1=1; else if((flag1==1)&&(flag2==0)) { flag1=0; flag2=1; } else { flag1=0; flag2=0; } while(!k1); //松手检测 write_com(1); } } } } while((flag1==0)&&(flag2==1)) { beep=1; d=1;
write_com(0x80+0x40+1);
write_str(str2); write_com(0x80+6); write_str(str3); write_com(0x80+14); write_data('C'); write_com(0x80+0x40+6); write_str(str4); write_com(0x80+0x40+14); write_data('C'); display_max(); display_min(); while((flag1==0)&&(flag2==1)) { if(k2==0) { delay(5); if(k2==0) { while(!k2); min++; if(min==(max-4)) min=0; display_min(); } } if(k3==0) { delay(5); if(k3==0) { while(!k3); min--; if(min==255) min=max-5; display_min(); } } if(k1==0) { delay(5); //消抖
if(k1==0)
{
if((flag1==0)&&(flag2==0)) flag1=1;
else if((flag1==1)&&(flag2==0)) {
flag1=0;
flag2=1;
}
else
{
flag1=0;
flag2=0;
}
while(!k1);
write_com(1);
}
}
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init_d() //ds18b20初始化
{
uchar n;
dq=1;
delay_(8);
dq=0;
delay_(80);
dq=1;
delay_(8);
n=dq;
delay_(4);
} 松手检测 //
void delay_(uint t) //一微妙延时 {
while(t--);
}
void write_com(uchar com) //写命令 {
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar da) //
{
lcdrs=1;
P0=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_byte(uchar dat) //
{
uchar i;
for(i=0;i
{
dq=0;
dq=dat&0x01;
delay_(4);
dq=1;
dat>>=1;
}
delay_(4);
} 写数据 读字节
uchar read_byte() //写字节
{
uchar i,value;
for(i=0;i
{
dq=0;
value>>=1;
dq=1;
if(dq)
value|=0x80;
delay_(4);
}
return value;
}
uchar read_t() //读温度 {
uchar a,b;
init_d();
write_byte(0xcc);
write_byte(0x44);
delay_(300);
init_d();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b
b+=(a&0xf0)>>4;
return b;
}
void display() //显示
{
write_com(0x80+6);
write_data(0x30+(temp/10)); write_com(0x80+7);
write_data(0x30+(temp%10)); }
void write_str(uchar *p)
{
while(*p)
write_data(*p++);
}
void display_max() //显示最高值 {
write_com(0x80+11);
write_data(0x30+(max/10)); write_com(0x80+12);
write_data(0x30+(max%10)); }
void display_min() //显示最小值 {
write_com(0x80+0x40+11);
write_data(0x30+(min/10)); write_com(0x80+0x40+12);
write_data(0x30+(min%10)); }
致谢
本论文写作已接近尾声,在此很感激那些曾帮助我的人,感谢他们对我的悉心指导和帮助。在本次设计中,我的导师***老师给我很多帮助,写作的过程中给予了我许多指导,给我提出了一些宝贵的建议,至此, 向恩师致以最真挚的感谢和最崇高的敬意!
同时也很感谢帮助我的同学,一些不懂的问题在他们提示下都一一化解,他们在平时的学习和生活中他们给予了我无私的关怀和帮助,在此表示我最诚挚的谢意。
毕业设计
基于单片机的温度报警系统设计
学校: 专业: 班级; 姓名:
摘 要
近年来随着计算机与控制技术的蓬勃发展与广泛应用,人们从中受益良多,生活中也随处可见电子产品,自动化,智能化成为发展趋势,而以单片机为核心的应用正在不断地走向深入,同时带动传统控制检测的日新月益。本设计论述了一种以STC89C51单片机为控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并可设置温度上下限值,实现对环境温度测量并在超出范围的情况下发出警告。系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括STC89C51单片机最小系统,测温电路、LCD 液晶显示电路以及报警电路等。系统程序主要包括主程序,读出温度子程序,计算温度子程序、按键处理程序、LCD 显示程序以及数据存储程序等。
关键词:STC89C51单片机;DS18B20;LCD 显示电路
Abstract
In recent years, along with the computer and control technology of booming development and wide application, people benefit a lot from it, life also can be seen everywhere electronic products, automation, intelligent become development trend, and with the single chip processor as the core application is continuously to the deepening, and push the traditional control examination on the new victims. This design is discussed in STC89C51 micro control is a control unit, with the temperature sensor DS18B20 for the temperature control system. The control system can store related temperature data real-time and set up and down temperature limits, and to realize the environment temperature measurement and beyond the scope of the warning. The system design of the related hardware circuit and related applications. The hardware circuit STC89C51 mainly includes single chip minimize system, temperature measurement circuit, LCD display circuit, alarm circuit, etc. System program mainly includes the main program, read the temperature procedure, the calculation of temperature procedure, key processing program, LCD display procedures and data storage procedures, etc. key words :STC89C51 single-chip microcomputer ; DS18B20 ; LCD display circuit
1 绪论
1.1 课题的背景及其意义
二十一世纪是科技高速发展的信息时代,电子技术、单片机技术更是得到广泛的应用,伴随着科学技术的发展,需要对仪器设备的各种参数进行测量。而温度涉及到生活生产的各个方面,应运而生温度测量控制也成为了生活生产中关注的热点,对温度的控制在各行各业中也发挥着重要的作用。例如在工业生产之中,利用测量与控制温度来保证生产的正常运行;在农业中,用于保证蔬菜大棚的恒温生产;更具体点在生活中冰箱,空调等都需要对温度进行实时控制。
温度是表征物体冷热程度的物理量,温度测量则是工农业生产过程中一个很重要而普遍的参数。温度的测量及控制对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位。而且随着科学技术和生产的不断发展,温度传感器的种类还是在不断,从而满足生产生活中的各种需要。
单片机温度测量控制系统中的关键是测量温度、控制温度,从而达到各种需求。因此,单片机温度测量则是对温度进行有效的测量,并且能够在工业生产中得到了广泛的应用,尤其在电力工程、化工生产、机械制造、冶金工业、无线控制等重要工业领域中,扮演着重要角色。在日常生活中,也可广泛实用于空调器、电加热器等各种家居电器。
1.2 课题研究的内容及要求
我的毕业设计的题目是基于单片机的温度控制报警系统设计。它是多种技术知识的结合,不仅涉及到硬件的设计,还需要软件编程,同时还要兼顾到精度、测量误差、稳定性等各种因素。电路板是从电子市场买来,要自己亲手焊接,这就要考虑如何布线,来达到外观美观,功能实现的目标。经过查阅资料发现许多应用场合原来就有测温仪器,只是随着对生产质量与生产需要的要求在不断地提高、升级。其中,有部分应用场合对精度提高的幅度要求也不是特别高。因此,为了提高性价比,我所设计的系统提出在原有设计的基础上进行一些简单的修改,以此为出发点,主要阐述的是温度测量自动报警系统的实现方法。
本文所要研究的课题是基于单片机的温度报警系统设计,主要是介绍了对环境温度的测量、显示、控制及报警,实现了动态温度的实时显示。温度控制部分,提出了用AT89C51单片机、DS18S20、及LCD 显示的硬件电路完成对环境温度的实时检测及显示,利用DS18S20与单片机连接由软件与硬件电路配合来实现,超出设定的上下限温度,报警系统就自动报警。控制器是用89C51单片机,适合于应对多点的温度测控系统,可直接将温度转化成串行数字信号供微机处理,而且每片DS18S20都有唯一的产品号,可以一并存入其ROM 中,以便在构成大型温度测控系统时在单线上挂接任意多个DS18S20芯片。从DS18S20读出或写入DS18S20信息仅需要一根口线,其读写及其温度变换功率来源于数据总线,该总线本身也可以向所挂接的DS18S20供
电。同时DS18S20能提供九位温度读数,它无需任何外围硬件即可方便地构成温度检测系统。而且利用本次的设计主要实现温度测试,温度显示,温度门限设定,超过设定的门限值时自动启动自动报警等功能。而且还要以单片机为主机,使温度传感器通过一根口线与单片机相连接,再加上温度控制部分和人机对话部分来共同实现温度的监测与控制。
1.3 课题的研究方案
温度控制系统是比较常见和典型的过程控制系统。温度是工业生产过程中重要的被控参数之一,当今计算机控制技术在这方面的应用,已使温度控制系统达到自动化、智能化,比过去单纯采用电子线路进行PID 调节的控制效果要好得多,可控性方面也有了很大的提高。
本设计方案很简单,采用了STC89C51单片机系统来实现。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。单片机系统可以用液晶屏幕来显示环境温度的实际值,能用键盘输入设定上下线值。本方案选用了STC89C51芯片,本身存储器已够用,不需要外扩展存储器,可使系统整体结构大为简单从而大大提高了系统的智能化。
2 电路设计的理论基础
2.1 系统设计的框架
本课题设计的是一种以STC89C51单片机为主控制单元,以
DS18B20为温度传感器的温度控制报警系统。该控制系统可以实时存储相关的温度数据。其主要包括:电源电路、温度采集电路、按键处理电路、LCD 显示电路、报警电路以及单片机基本电路。下图(图2-1)为设计框架图。
2.2 单片机发展史
单片机根据其基本操作处理的二进制位数主要分为:4位单片机、8位单片机、16位单片机和32位单片机。
单片机的发展史可大致分为4个阶段。
第一阶段(1974年--1976年):单片机初级阶段。因工艺限制,单片机采用双片的形式而且功能比较简单。1974年12月,仙童公司推出了8位的F8单片机,实际上只包括了8位CPU 、64B RAM 和2个并行口。
:
第二阶段(1976年--1978年):低性能单片机阶段。1976年,Intel 公司推出的MCS--48单片机(8位单片机)极大地促进了单片机的变革和发展;1977年,GI 公司推出了PIC1650,但这个阶段的单片机仍然处于低性能阶段
第三阶段(1978年--1983年):高性能单片机阶段。1978年,Zilog 公司推出了Z8单片机;1980年,Intel 公司在MCS--48单片机的基础上推出了MCS--51系列,Motorola 公司推出了6801单片机,这些产品使单片机的性能及应用跃上了一个新的台阶。此后,各公司的8位单片机迅速发展起来。这个阶段推出的单片机普遍带有串行I/O口、多级中断系统、16位定时器/定时器,片内ROM 、RAM 容量加大,且寻址范围可达64KB, 有的片内还带有A/D转换器。由于这类单片机的性能价格比高,所以被广泛应用,是目前应用数量最多的单片机。
第四阶段(1983年--现在):8位单片机巩固、发展及16位单片机和32位单片机推出阶段。16位单片机的典型产品为Intel 公司生产的MCS--96系列单片机。而32位单片机除了具有更高的集成度外,其数据处理速度比16位单片机提高许多,性能比8位、16位单片机更加优越。20世纪90年代是单片机制造业大发展的时期,这个时期的Motorola 、Intel 、ATMEL 、德州仪器(TI )、三菱、日立、Philips 、LG 等公司也开发了一大批性能优越的单片机,极大地单片机的应用。近年来,又有不少新型的高集成度的单片机产品涌现出来,出现了单片机丰富多彩的局面。目前,除了8位单片机得到广泛用用上的展表明,80C51可能最终形成事实上的标准MCU 芯片。
2.3 STC89C51系列单片机介绍
2.3.1 STC89C51特性
STC89C51是一种带4K 字节闪烁可编程可擦除只读存储器
(FPEROM —flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。而AT89C2051是一种带2K 字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
·与MCS-51 兼容
·4K 字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32位可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2.3.2 STC89C51系列引脚功能
STC89C51有40引脚双列直插(DIP )形式。其逻辑引脚图如图2-2。
图2-2 STC89C51引脚图
各引脚功能叙述如下:
1.电源和晶振
VCC (40脚)——接+5V电源
GND (20脚)——接数字地
XTAL1(19脚)——片内震荡器反相放大器和时钟发生器电路的输入端
XTAL2(18脚)——片内震荡器反相放大器的输出端
2.I/O(4个口,32根)
P0口——P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口——P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。P2口——P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,
P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
P3口——P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。
同时,P3口也可作为STC89C51的一些特殊功能口,如下表所示: 口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
3.控制线(共4根)
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器
(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET ;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
3 硬件电路设计
3.1 电源电路
工作原理:220V 交流市电经过电源变压器变换成交流低电压,再经过桥式整流电路D2~D5和滤波电容C5的整流和滤波,在三端稳压器LM7805的Vin 和GND 两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化) 。此直流电压经过LM7805的稳压和C7的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压。本稳压电源可作为TTL 电路或单片机电路的电源。三端稳压器是一种标准化、系列化的通用线性稳压电源的集成电路,其具有体积小、成本低、性能好、工作可靠、使用简捷方便等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。电源电路图如图3-1。
图3-1 电源电路
LM7805简介:LM7805是一种常用的三端稳压器,一般使用的是TO-220封装,能提供DC 5V的输出电压,应用范围极广,内含过流过热及调整管的保护电路和过载保护电路。带散热片时能持续提供1A 的电流。电子制作中经常采用。但当稳压管温度过高时,稳压性能将变差,甚至损坏。
其外形引脚如图3-2。
图3-2 LM7805引脚图(管脚图)
3.2 温度传感器电路
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,使用方便,封装形式多样,适用于各种狭小空间设备的数字测温和控制领域。
DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。超小的体积,超低的硬件开销,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎,DS18B20的优势更是我们学习单片机技术和开发温度相关小制作不二的选择,其技术性能描述为:
① 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
② 测温范围 -55℃~+125℃,固有测温分辨率0.5℃。 ③ 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个, 实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④ 工作电源: 3~5V/DC
⑤ 在使用中不需要任何外围元件
⑥ 测量结果以9~12位数字量方式串行传送
⑦ 温度数字量转换时间200ms(典型值)
⑧ 用户可定义的非易失性温度报警设置
其外形如图3-3所示。
图3-3 传感器外形图
本设计采用一线制数字温度传感器DS18B20来作为本课题的温度传感器。传感器信号经4.7K 的上拉电阻直接接到单片机的P2.0管脚上。
DS18B20温度传感器只有三根外接线:单线数据传输总线DQ ,外供电源线VDD ,共用地线GND 。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD 接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度的转换,相应的完成温度转换所需时间也较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另外一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间会较短。
工作原理及其应用:DS18B20温度检测与数字数据的传输集成于一个芯片之上。其工作一个周期可以分为二个部分,即温度检测与数据处理。18B20有三种形态的存储资源,分别是ROM ,RAM ,EEPROM 。 ROM 只读存储器,共64位,用于存放DS18B20ID 编码,其前八位是单线系列编码(DS18B20的编码是19H ),后面48位是芯片唯一的序列号,最后的八位是以上56位的CRC (冗余校验码)。其数据在出厂时设置,不由用户更改。
RAM 数据暂存器,用于数据计算和数据存取,数据在掉电后消失,DS18B20共9个字节的RAM ,每个字节为八位,第1,2字节是温度转换后的数据值信息,第3,4字节是用户EEPROM (常用于温度报警值的存储)的镜像。在上电复位时,其值将被刷新。第5个字节则是用户第3个EEPROM 的镜像。第6,7,8个字节则是计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是温度转换、计算的暂存单元,第9个字节是前八个字节的CRC 码。
EEPROM是非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据。DS18B20共3位EEPROM ,并在RAM 上都存在镜像,以方便用户操作。
我们在读温度之前都必须进行复杂的且精准的时序处理,因为DS18B20硬件简单,从而导致软件的巨大开销,也是尽力减少有形资产化为无形资产的投入。
控制器对DS18B20的操作流程:
1.复位 :首先我们必须对DS18B20进行复位,复位就是由控制器给DS18B20单总线至少480us 的低电平信号,当DS18B20接到此复位信号后,回发一个芯片的存在脉冲。
2.存在脉冲 :在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15--60us 后接受存在脉冲,存在脉冲为一个60--240us 的低电平信号。至此,通信双方已达成了基本的协议,接下来将会是控制器与DS18B20的数据通信,如果复位低电平的时间不足或是单总线断路都不会接收到存在脉冲。
3.控制器发送ROM 指令:双方打完招呼后就要进行交流了,ROM 指令共5条,每一个工作周期只能发送一条,ROM 指令分别是读ROM 数据,指定匹配芯片,跳跃ROM ,芯片搜索,报警芯片搜索。ROM 指令为八位长度,功能是对片内的64位光刻ROM 进行操作。其主要目的是为了分别总线上挂接的多个器件并做处理,一般情况下,直挂一个DS18B20的就跳过ROM 指令,此处并不是不发送ROM 指令,而是用一条特有的一条“跳过指令”。
4.控制器发送存储器操作指令:在发送ROM 指令之后,接着就发送存储器操作指令。操作指令同样为八位,共六条,分别为写RAM 数据,读RAM 数据,将RAM 数据复制到EEPROM ,温度转换,将EEPROM 中报警值复制到RAM ,工作方式切换。存储器操作指令是命令DS18B20做什么样的工作,是芯片控制的关键。
5.执行或数据读写:这个操作要视存储器操作指令而定。
在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,其接口电路如图3-4所示。
图3-4 温度传感器电路
3.3 显示电路
1602字符型LCD 通常有14条引脚线或16条引脚线的LCD ,多出来的2条线是背光电源线其各引脚介绍如表3-1。
表3-1 LCD引脚说明
引脚
1
2
3 符号 VSS VDD V0
4
5
6
7
8
9
10
11
12
13
14
15
16 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 BL+ BL- 功 能 说 明 接 地 接 电 源 (+5 V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,使用时可以通过一个10K 的电位器调整对比度 RS 为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器 R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作 使 能 端 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 双 向 数 据 总 线 背 光 电 源 正 极 背 光 电 源 负 极
本设计显示电路采用1602液晶显示,其电路图如下(图3-5):
图 3-5 显示电路
3.4 报警电路
报警电路采用简单的发光二极管与蜂鸣器组合电路,当温度超出上下门限值时,二极管发光,同时蜂鸣器鸣响。其电路图如图3-6:
图 3-6 报警电路
3.5 复位电路
本设计所用复位电路与其他单片机所用电路类似,为电容式复位,其电路图如下(图3-7):
图3-7 复位电路
4 软件设计
系统的软件主要是采用C 语言,对单片机进行编程实现各种功能。当然,也可以采用汇编语言,但程序设计较麻烦,本设计采用C 语言来编程,主程序对模块进行初始化,而后调用读温度、处理温度、显示、键盘,报警等模块。用的是循环查询方式,来显示和调节温度,主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值并负责调用各子程序, 其程序流程如图4-1系统程序流程图。
图4-1系统程序流程图
4.1 按键处理子程序
按键处理子程序主要是负责参数的设置,主程序每循环一次都要对按键进行扫描, 判断是否有输入键按下则进行一系列的按键输入操作。其程序流程框图如图4-2所示。
图4-2温度转换流程图
5 系统调试及结论分析
单片机应用系统组装后,便可进行调试,其主要任务是排除硬件故障,并完善其硬件结构,试运行所设计的程序,一一排除程序错误之处,并优化程序的结构,使系统达到设计的期望值。
5.1 硬件调试
单片机应用系统的硬件和软件调试是交叉进行的,但通常是先排除仿真时明显的硬件故障,尤其是电源故障,才能安全地进行仿真,进一步进行硬件及软件综合调试。
5.1.1 硬件电路故障及解决方法
1.错线、开路、短路:由于电路图设计错误和焊接过程中的工艺性错误所造成的错线、开路、短路等故障,例如电源电路正负极相连、虚焊、漏焊等。本设计在焊接时就出现过错焊,漏焊现象。
解决方法:在画原理图时仔细检查、校正,在焊接时注意连接好即可解决。
2.元器件损坏:由于对元器件使用要求的不熟悉及制作调试过程中操作不当操作等致使器件损坏。
解决方法:在设计过程中要明确各元器件的工作条件,严格按照制作要求进行操作,在焊接过程中,注意温度的控制,损坏的元器件要及时更换,以免影响电路功能的实现。
3.电源故障:设计中存在电源故障,即电源不能正常工作,上电后将造成元器件损坏,从而影响整个电路。电源的故障包括:电压值不符和设计要求,变压器功率不足,内阻大,负载能力差,电源电压不稳定等等。
解决方法:电源必须单独调试好以后,测量准确稳定后才能加到系统中。
5.1.2 硬件调试方法
本设计调试过程中所用的调试方法静态测试法。
在加电之前,首先用万用表等仪表工具,根据硬件电器原理图和装配图仔细检查线路的正确性,并核对元器件的型号、规格、大小和安装是否符合要求。应特别注意电源的走线,防止电源之间的短路,第二步是加电后检查各个元件上引脚的电位是否正常,尤其应注意单片机插座上的各点电位,若有高压,联机时将会损坏元件。
5.2 软件调试
在完成了各个模块的程序的调试工作以后,便可与硬件结合进行系统的综合调试。综合调试一般采用全速断点运行方式,这个阶段的主要工作社排除系统中遗留的错误以提高系统的动态性能以达到期望值。在综合调试的最后阶段,使系统全速运行目标程序,实现了预定功能指标后,便可将软件固化,然后再运行固化的目标程序,成功后目标系统便可脱机运行。一般情况下,这样的一个应用系统程序就算是研制成功了。
6 总结与展望
6.1 总 结
毕业设计做结束后,也就意味着我们的大学生活接近尾声了,学无止境,我们的学习并没有结束,以后要学的还有很多,在本次设计中,使我更懂得了学习的重要性,同时,也是我们所学得到了实践。再设计中,有很多东西都是现学现用,感觉到今后还有很多要学习,本文用STC89C51单片机作为控制器,温度信号通过温度传感器传输给单片机,通过单片机分析计算,输出显示并响应报警。通过这次设计,使我有很深的感触:科学技术发展迅猛无比,尤其以单片机为核心的技术在未来社会发展中一定会起着十分重要的作用。本次设计主要分为两部分,软件程序设计和硬件电路板设计。软件设计包括用单片机C 语言控制系统。硬件设计包括绘制电路原理图,元件焊件、再做硬件测试,调节,直至最后成功。通过这些都使我对采用单片机设计方法有了更深的理解,同时也让我把所学的知识在实践中得到锻炼,基本上做到了理论与实践相结合。此次设计无论从专业知识、动手能力,都使我受益匪浅。其中,这与老师和同学的热心帮助是分不开的。大学生活虽然快要结束了,但我们的学习并没有结束,只有通过不断努力的学习,用知识充实自己的大脑,才能在未来社会有一席之地,才能为社会的发展做出自己应有的贡献。
6.2 展望
单片机改变着我们的生活,纵观各个领域,各行各业,从飞机上各种仪表的控制到导弹的导航,从计算机的通讯与数据输入输出,到工业自动化过程的实现,以及我们生活中广泛使用的各种电子产品等等,这些都离不开单片机。相信,以后单片机会得到更为广泛的应用。
目前,测温控温系统得到了很快的发展,近几年,国内也涌现出许多高精度的温度控制系统,但相对于用户来说,价格还是有点高。而由于竞争越来越激烈,现在企业发展的趋势是如何有效的提高生产效率,降低生产成本。寻求性能可靠、价格低廉,且应用广泛的元器件是生产过程的首先要考虑和解决的问题,因此像本设计这种控制简单、价格低廉的控制系统会有很好的发展前景,并且在此设计基础之上,还可扩展出其他应用功能,所以学好单片机技术也十分重要。 通过本次的设计,使我感觉到单片机的应用会越来越广泛,并将深入到各个领域,自动化、智能化是其发展趋势,学好单片机及其与其它软件相结合技术必有光明前途。
参考文献
[1] 张毅刚,彭喜元,彭宇. 单片机原理及应用[M].高等教育出版社,2010年5月.
[2] 曹巧媛主编. 单片机原理及应用. 第二版. 北京:电子工业出版社.
[3] 何力民. 单片机高级教程. 北京:北京航空大学出版社.
[4] 金发庆. 传感器技术与应用. 北京机械工业出版社.
[5] 薛弘晔. 计算机控制技术. 西安电子科技大学出版社.
[6] 谭浩强.C 程序设计[M].清华大学出版社.
[7] 康华光. 电子技术基础. 高等教育出版社 .
[8] 华成英,童诗白主编. 模拟电子技术基础[M].高等教育出版社.
[9] 阎石. 数字电子技术基础[M].第五版. 高等教育出版社,2005.
[10] 史久贵. 基于Altium Designer 的原理图与PCB 设计[M].机械工业出版社,2011.
附录
1:系统原理图
2:实物图
3:系统相关程序
#include
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit dq=P2^0; //位声明
sbit beep=P1^1;
sbit d=P1^0;
sbit k1=P1^2;
sbit k2=P1^3;
sbit k3=P1^4;
sbit lcden=P2^6;
sbit lcdrw=P2^5;
sbit lcdrs=P2^4;
uchar code str[]="OK";
uchar code str0[]="TOO HIGH!";
uchar code str1[]="TOO LOW!";
uchar code str2[]="SET";
uchar code str3[]="MAX:";
uchar code str4[]="MIN:";
uchar temp,flag1,flag2,max,min;
void write_com(uchar); //液晶写命令子程序 void write_data(uchar); //液晶写指令子程序 void delay_(uint); //一微秒延时程序
void init_d(); //ds18b20初始化子程序 void delay(uint); //一毫秒延时子函数
void write_byte(uchar); //ds18 b20写字节子程序 uchar read_t(); //检测温度程序
uchar read_byte(); // ds18 b20读字节子程序 void display(); //显示温度子程序 void write_str(uchar *); //向液晶内写入字节 void display_max(); //显示最大值子程序 void display_min(); //显示最小值子程序 void main()
{
max=40; min=20; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(1); while(1
while((flag1==0)&&(flag2==0)) { write_com(1); temp=read_t(); display(); write_com(0x80+9); write_data('C'); if(temp>max) { beep=0; d=0; write_com(0x80+0x40+4); write_str(str0); delay(200); } else if(temp
{ { if((flag1==0)&&(flag2==0)) flag1=1; else if((flag1==1)&&(flag2==0)) } flag1=0; flag2=1;
else
{
flag1=0;
flag2=0;
}
while(!k1); //松手检测 write_com(1);
}
}
}
while((flag1==1)&&(flag2==0))
{
beep=1;
d=1;
write_com(0x80+1);
write_str(str2);
write_com(0x80+6);
write_str(str3);
write_com(0x80+14);
write_data('C');
write_com(0x80+0x40+6);
write_str(str4);
write_com(0x80+0x40+14);
write_data('C');
display_max();
display_min();
while((flag1==1)&&(flag2==0))
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
max++;
if(max==61)
max=min+5;
display_max();
}
}
if(k3==0)
{ delay(5); if(k3==0) { while(!k3); max--; if(max==(min+4)) max=60; display_max(); } } if(k1==0) { delay(5); //消抖 if(k1==0) { if((flag1==0)&&(flag2==0)) flag1=1; else if((flag1==1)&&(flag2==0)) { flag1=0; flag2=1; } else { flag1=0; flag2=0; } while(!k1); //松手检测 write_com(1); } } } } while((flag1==0)&&(flag2==1)) { beep=1; d=1;
write_com(0x80+0x40+1);
write_str(str2); write_com(0x80+6); write_str(str3); write_com(0x80+14); write_data('C'); write_com(0x80+0x40+6); write_str(str4); write_com(0x80+0x40+14); write_data('C'); display_max(); display_min(); while((flag1==0)&&(flag2==1)) { if(k2==0) { delay(5); if(k2==0) { while(!k2); min++; if(min==(max-4)) min=0; display_min(); } } if(k3==0) { delay(5); if(k3==0) { while(!k3); min--; if(min==255) min=max-5; display_min(); } } if(k1==0) { delay(5); //消抖
if(k1==0)
{
if((flag1==0)&&(flag2==0)) flag1=1;
else if((flag1==1)&&(flag2==0)) {
flag1=0;
flag2=1;
}
else
{
flag1=0;
flag2=0;
}
while(!k1);
write_com(1);
}
}
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init_d() //ds18b20初始化
{
uchar n;
dq=1;
delay_(8);
dq=0;
delay_(80);
dq=1;
delay_(8);
n=dq;
delay_(4);
} 松手检测 //
void delay_(uint t) //一微妙延时 {
while(t--);
}
void write_com(uchar com) //写命令 {
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar da) //
{
lcdrs=1;
P0=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_byte(uchar dat) //
{
uchar i;
for(i=0;i
{
dq=0;
dq=dat&0x01;
delay_(4);
dq=1;
dat>>=1;
}
delay_(4);
} 写数据 读字节
uchar read_byte() //写字节
{
uchar i,value;
for(i=0;i
{
dq=0;
value>>=1;
dq=1;
if(dq)
value|=0x80;
delay_(4);
}
return value;
}
uchar read_t() //读温度 {
uchar a,b;
init_d();
write_byte(0xcc);
write_byte(0x44);
delay_(300);
init_d();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b
b+=(a&0xf0)>>4;
return b;
}
void display() //显示
{
write_com(0x80+6);
write_data(0x30+(temp/10)); write_com(0x80+7);
write_data(0x30+(temp%10)); }
void write_str(uchar *p)
{
while(*p)
write_data(*p++);
}
void display_max() //显示最高值 {
write_com(0x80+11);
write_data(0x30+(max/10)); write_com(0x80+12);
write_data(0x30+(max%10)); }
void display_min() //显示最小值 {
write_com(0x80+0x40+11);
write_data(0x30+(min/10)); write_com(0x80+0x40+12);
write_data(0x30+(min%10)); }
致谢
本论文写作已接近尾声,在此很感激那些曾帮助我的人,感谢他们对我的悉心指导和帮助。在本次设计中,我的导师***老师给我很多帮助,写作的过程中给予了我许多指导,给我提出了一些宝贵的建议,至此, 向恩师致以最真挚的感谢和最崇高的敬意!
同时也很感谢帮助我的同学,一些不懂的问题在他们提示下都一一化解,他们在平时的学习和生活中他们给予了我无私的关怀和帮助,在此表示我最诚挚的谢意。