《智能温度报警系统的软件设计毕业论文及程序.doc》由会员分享,可在线阅读,更多相关《智能温度报警系统的软件设计毕业论文及程序.doc(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、XX大学毕业设计 XX:2*智能温度报警系统的软件设计XX信息工程学院 XX专业 XX届 学号:XXXXXXXX【摘要】 本文采用DS18B20温度传感器作为温度采集器,以PIC单片机为控制核心设计了一款智能温度报警系统,在此基础之上还增加了实时时钟功能,文中详细介绍了使用Proteus仿真软件设计出仿真电路,再跟据仿真电路通过MPLAB IDE集成开发环境设计出系统程序,最终实现在仿真电路上成功运行所设计的软件,实现了智能温度报警,以及通过按键实现对报警范围和时间等参数进行设置。【关键词】 DS18B20 PIC16F877 实时时钟 仿真电路The software design of i
2、ntelligent temperature alarm systemAbstract: In this paper, DS18B20 temperature sensor as a temperature logger to PIC microcontroller core design of a smart temperature alarm system, on this basis has also increased the real-time clock function. This paper describes the use Proteus simulation circui
3、t simulation software to design, simulate circuits according to talk with MPLAB IDE integrated development environment to design a system program, and ultimately successfully run on circuit design simulation software with intelligent temperature alarm, as well as through Implementation for the alarm
4、 button scope and time parameters.Key words: DS18B20 PIC16F877 Real-Time Clock Simulation circuitI目录目录引言1第一章 绪论31.1设计目标31.2课题背景31.3 课题意义31.4软件设计的要求31.5论文主要内容41.6论文结构安排4第二章 开发平台及设计方案52.1 编程开发环境52.2.1 MPLAB IDE集成开发环境52.2.2 编程步骤52.2 电路仿真开发环境52.3 温度采集原件方案62.3.1 方案一62.3.2 方案二62.4 主控芯片方案62.5 总体方案设计62.5.1
5、方案的确定62.5.2 总体设计框图62.5.3 系统主程序设计思路流程图7第三章 仿真电路设计93.1 最小系统仿真设计93.1.1 PIC16F877简介93.1.2设计中的应用93.2 液晶显示模块仿真电路103.2.1 LCD1602简介103.2.2 LCD1602在设计中的应用103.3 温度采集模块仿真电路113.4 时钟模块仿真电路113.5 按键控制模块仿真电路123.6 报警模块仿真电路123.7 总体仿真电路设计图13第四章 系统软件设计154.1 编程前的准备154.2系统主程序设计154.3液晶显示程序设计164.4温度采集和转换程序设计194.5实时时钟程序设计22
6、4.6判断温度报警模块程序设计254.7按键控制功能程序设计264.7.1显示切换按键程序设计264.7.2上下限温度修改程序274.7.3实时时钟修改程序28第五章 系统软件调试315.1 DS18B20温度测量功能调试315.2 温度报警功能程序调试325.3 显示切换功能调试325.4 修改设置功能调试33结论35致谢语37参考文献39附录41III引言引言 伴随着现代科学技术的发展,现代化生产过程中对温度的监控有了更高要求,而以单片机为核心的数字控制系统在现代化生产中的智能化和自动化运用方面得到了广泛的应用。本课题设计的是基于PIC单片机的智能温度报警系统的软件,通过选定方案设计出系统
7、软件,并且在仿真电路上联调,测试设计的软件是否能能够成功运行。软件设计意义在于,实现智能温度报警系统能够实时测量温度,并在超出警戒温度值时做出报警,提醒人们做出相应的措施以控制温度,有助于提高产品的质量和效率,同时也有利于生产安全。因此研究智能温度报警系统有利于对现代化工农业的标准化生产,以及提高企业的经济效益。1第一章 绪论第一章 绪论1.1设计目标 本次毕业设计的课题是智能温度报警系统的软件设计,因此我采用的是基于单片机设计方案来实现设计。设计目标是,通过专门的编程软件编写系统程序并编译,将编译结果加载入仿真电路的主控芯片上。使得主控芯片能够驱动温度传感器采集外界温度和接收所采集的温度数据
8、,并且在液晶显示器上显示所采集的温度值。当所采集的温度超过报警温度范围时可以通过蜂鸣器发声和发光二极管闪烁实现报警。为了增加软件系统的功能,又加入了时钟功能模块。因此所编写的程序要实现对时钟芯片的控制,并在液晶上显示出年、月、日、时、分、秒以及星期。系统程序中的控制程序能够实现对温度上、下限值和时钟模块所显示内容的修改设定。1.2课题背景随着现代科学技术的发展,为了提高向现代化生产的效率和经济效益,越来越多的行业生产都在向智能化和自动化方向发展。而以单片机为核心的数字控制系统在现代化生产中的智能化和自动化运用方面,也受到了人们越来越多的应用1。智能化和自动化的现代化生产方式能够减少对人力资源的
9、浪费,提高产品工艺,以及提高生产安全增加经济利益等优点。而且单片机具有体积小,数据处理强等特点。所以本设计采用PIC单片机来控制温度传感器实时的测量环境温度,当温度超过限制时能及时报警,并且能通过按键对报警温度和日历时钟进行设置。1.3 课题意义随着现代工农业技术的发展及人们对生活环境要求的提高,工农业生产中的很多流程都需要实时精确的测量和控制温度,而一些生产流程中采用人工测量可能要面临危险或测量不及时等问题。采用智能温度报警系统能在危险环境中实时测量温度,并在超出警戒温度值时做出报警,提醒人们做出相应的措施以控制温度,这样不仅有助于提高产品的质量和效率,同时也有利于生产设备和人身的安全。因此
10、研究智能温度报警系统有利于对现代化工农业的标准化生产,以及提高企业的经济效益。1.4软件设计的要求本论文是设计智能温度报警系统的软件设计。因此当设计出的软件在PIC单片机上运行时,要能够实现实时的测量周围的温度,并判断其是否超出限定温度,做到在超出限定时做出及时报警。同时,能够通过按键控制功能实现对上下限温度和实时时钟以及日历的修改设置。实时温度、上下限温度、实时时钟和日历上的信息都需要显示在液晶显示器上。1.5论文主要内容1 确定设计方案,熟悉设计所需芯片的C语言编程。2 在仿真软件上设计系统所需的仿真电路,介绍电路的各个模块的功能,并根据仿真电路原理图设计出系统所需软件的主程序框架,再根据
11、主程序框架完成各个功能模块的程序设计。3 对设计的系统软件与仿真电路进行联调测试,验证所设计的系统软件的正确性和可行性。1.6论文结构安排第一章主要介绍设计的目标、课题背景和意义以及对设计的要求。第二章介绍设计所需的开发平台和设计方案的确定。第三章介绍各个模块的仿真电路设计及其功能第四章介绍对温度报警系统软件的具体设计流程。第五章对设计的系统软件在仿真电路上进行调试。29第二章 开发平台及设计方案第二章 开发平台及设计方案2.1 编程开发环境2.2.1 MPLAB IDE集成开发环境 这款软件集成开发环境MPLAB IDE是薇芯公司为PIC单片机的嵌入式应用进行开发所配备的一种单片机开发应用平
12、台。MPLAB IDE可以直接使用汇编语言编写源程序,也选择MPLAB C编译器使用C语言编写单片机的源程序,或者用C语言和汇编语言进行混合嵌入式编写源程序的代码。使用MPLAB IDE编写C语言的代码在经过编译可生成*.cof和*.hex两个文件。可用*.hex文件加载到仿真电路中进行联调。2.2.2 编程步骤 因为本次设计用的是MPLAB IDE 8.33的版本,所采用的是用C语言来编写源程序代码,所以具体的编程步骤如下:(1) 打开MPLAB IDE 8.33软件,选择菜单命令Project中的Project Wizard,出现的窗口点击下一步。出现选择芯片型号的界面,选择PIC16F8
13、77,再点击下一步。(2) 在(1)后选择名为HI-TECH PICC Toolsuite的编译工具,选完后,点击下一步。(3) 选择项目所要保存的目录以及项目的名称,点击下一步。再次点击下一步,直到出现完成后,点击完成退出工程向导。(4) 点击New File新建一个文本编辑窗口,并在其上编写源程序代码,完成后保存到指定的目录下,保存为*.c格式。(5) 将已保存的源程序添加到当前工程名下的Source Files文件夹内。(6) 对源程序进行编译、调试,最终编译生成*.cof和*hex文件。完成系统软件的编译工作。2.2 电路仿真开发环境 Proteus软件是英国Lab Center公司开
14、发的电路分析与实物仿真及印制电路板设计软件,它可以仿真、分析各种模拟电路与集成电路,同时提供了大量模拟与数字元器件及外部设备,各种虚拟仪器,具有对单片机及其外围电路组成的综合系统的交互仿真功能2。 Proteus软件支持多款市面上主流的单片机,其中就有PIC18系列单片机。随着Proteus软件版本的升级,它所支持的单片机系列及型号也在持续增加。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器3。 在本设计中,主要是用Proteus 7 Professional版本来仿真本课题软件系统设计所需的仿真电路,并利用它与用MPLAB IDE 8.33进行源程序编写和编译后生成的*.he
15、x文件进行联调仿真,测试所设计的智能温度报警软件系统软件的是否能够实现课题所要求的功能。2.3 温度采集原件方案2.3.1 方案一 对于热电偶温度传感器,虽然它耐用,价格低而且不用外接电源,但其电压与所测温度是成非线性关系,需要二次测量,而且不能直接转化为数字信号。 对于热电阻温度传感器,其电阻值与温度的关系也是非线性的,制造商也无法给出标准化的热敏电阻曲线,同时原件容易老化,电压值转化为温度值比较麻烦。虽然它灵敏度较高,体积小。与热电偶相比,其测量范围要小,价格也贵。2.3.2 方案二 半导体数字式温度传感器DS18B20也是常用的温度传感器,选其作为采集温度的原件,具有体积小,硬件开销低,
16、抗干扰能力强,精度高的特点4。它能将所测得的温度值直接转化为数字信号,不需要进行AD转换,其所能测量的温度范围在-55125。测量结果可以以912位数字量方式串行传送4。以12位作为寄存器配置时,分辨率可以达到0.0625。2.4 主控芯片方案 现在市面上的单片机芯片种类繁多,按功能分为多种型号,不同的型号系价格也有所不同。对于本设计因功能比较简单,所以选择的芯片价格不需要高,芯片的功能能满足设计要求即可。考虑到学过PIC单片机原理这门课程,对PIC单片机更加了解,而且中级PIC系列单片机中的PIC16F877型价格只要十几元,同时PIC系列单片机也是市面上主流的单片机芯片。所以本设计就选用了
17、中PIC16F877型号芯片作为本设计的主控芯片。2.5 总体方案设计2.5.1 方案的确定 考虑到设计电路尽可能的简单,所以温度采集原件就选用了方案二的DS18B20温度传感器来设计温度模块。以PIC16F877设计最小系统模块,液晶显示模块采用LCD1602来设计,实时时钟模块用实时时钟芯片DS1302来实现,用按键开关来设计按键控制模块实现对系统的设置控制,报警模块采用蜂鸣器和发光二极管(红光)设计。2.5.2 总体设计框图 PIC单片机最小系统模块显示模块块温度采集模块实时时钟模块报警模块按键控制模块 图2.1总体设计框图2.5.3 系统主程序设计思路流程图 图2.2系统主程序设计思路
18、流程图第三章 仿真电路设计第三章 仿真电路设计3.1 最小系统仿真设计3.1.1 PIC16F877简介PIC16F877采用的总线结构是哈弗结构,其程序存储器Flash空间大小为8K*14位,数据存储器RAM有512个字节(00f1FFh),可以进行重复烧录程序。其外围由多个功能模块构成,分别是5个位宽不都相同的可编程输入/输出端口模块、3个定时器模块、多通道10位分辨率ADC模块、捕捉/比较/脉宽调制CCP1和CCP2模块和MSSP模块等其他模块。其常用的PDIP40引脚排列如图3.1所示5。 图3.1PDIP40脚的PIC16F877引脚全功能图3.1.2设计中的应用 本次设计主要用到P
19、IC16F877芯片外围功能模块有RA、RB、RC和RD端口,RA和RD端口用于与液晶显示器相连,RB端口作为按键输入端,RC端口用于与报警模块、温度模块和时钟模块相连。最小系统的仿真电路的复位方式使用的是人工复位,PIC16F877的工作电压为2.0V到5.5V。时钟电路本应该使用的是XT模式下用震荡频率为4MHz的石英晶体和两个电容构成,但因为是仿真电路,所以可以不用画出,可直接在加载程序时设定时钟频率。因此本设计中的最小系统模块的仿真电路如下图3.2所示。 图3.2最小系统模块的仿真电路3.2 液晶显示模块仿真电路3.2.1 LCD1602简介 LCD1602液晶显示器是一种功耗低、体积
20、小以及具有数字式接口等优点工业字符型液晶,他能够显示出160个不同的字符图形包括字母、数字、符号等6。LCD1602液晶显示器分为两行显示,每一行能够显示16个字符图形,一共能显示32个字符。它共有16个引脚,其第15和第16引脚为空脚不需要链接,第7到第14引脚为双向数据引脚。3.2.2 LCD1602在设计中的应用 在仿真电路中LCD1602液晶显示器的第1脚接地,第2脚接5V正电源,第3脚空置,第4脚、第5脚和第6脚分别与PIC16F877的RA1、RA2和RA3引脚相连。第7到第14引脚分别与PIC16F877的RD端口引脚按顺序相连。其连接图如图3.3所示。 图3.33.3 温度采集
21、模块仿真电路 本设计采用的是半导体数字式温度传感器DS18B20,它属于接触式温度传感器能测量的温度范围 为-55+125。其内部就能完成A/D转换,可根据用户自己定义转为9位到12位的精度,所以不需要利用PIC16F877的ACD功能,可直接接收温度传感器DS18B20采集转换的数据,再经过程序转为十进制数在LCD1602液晶显示器上输出显示。温度传感器DS18B20的数据输入和输出都是通过其数据总线(DQ)引脚传输,所以在本设计中DQ引脚是与PIC16F877的RC4引脚相连。VCC接入的是寄生电源,其具体的仿真电路设计如下图3.4所示。 图3.4 DS18B20仿真电路连接图3.4 时钟
22、模块仿真电路 DS1302时钟芯片能够提供年月日、时分秒和星期BCD码数据,而且它的时间能够自动计时增加,能实现自动判断润平年同时可自动调整年月日。对于年DS1302时钟芯片只能从00年到99年,存储年的寄存器只是一个8位的字节,所以它保存的BCD码只能表示两位数。月、日、时、分、秒和星期也只有一个与自己对应的数据寄存器,都是以BCD码的形式来保存数据。DS1302时钟芯片除了这些寄存器之外还有其他5个寄存器。 本次设计是利用DS1302时钟芯片的简单串行接口跟PIC16F877单片机进行数据通信,实现课题中增加的实时时钟内容。在设计仿真电路中为DS1302时钟芯片供电的主电源和后备电源都使用
23、同一个电源供电,其工作电压为2.5V到5.5V。芯片的振荡源使用的是外接一个32.768KHz的晶振7。实时时钟模块的仿真电路的具体连接如下图图3.5所示。 图3.5 时钟模块仿真电路连接图3.5 按键控制模块仿真电路 按键模块的设计主要是用PIC16F877单片机RB口的弱上拉功能来判断按键是否有下。在设计中采用了5个按键开关来实现设计的控制模块功能,每个开关所控制的功能分别是:进入/退出修改功能、选择所修改参数功能、加的功能、减的功能和屏幕切换功能。具体的仿真电路如图3.6所示。 图3.6 按键控制模块仿真电路3.6 报警模块仿真电路 本设计的报警模块采用的是蜂鸣器和发光二极管共同构成,当
24、系统判断出温度传感器所采集的温度超过上下限温度时,蜂鸣器就能发出嘀嘀地警报声音,之后发光二极管发出闪烁的红色8。通过这种形式的循环报警,来提醒周围的人温度超过了限定,需要采取降温措施来降低温度。直到温度降低到警戒线内,报警信号才会停止。报警模块的仿真电路连接图如图3.7所示。 图3.7 报警模块的仿真电路3.7 总体仿真电路设计图 图3.8 总体仿真电路连接图第四章 系统软件设计第四章 系统软件设计4.1 编程前的准备在开始编写代码之前,我们要先确定编程所需的数据类型和各个数据类型所占用的字节长度以及它们的值域是多少。因为本设计所用的主控芯片是PIC16F877,它是一款8位的单片机,所以在编
25、写程序时所用的数据类型、数据长度和值域如表4.1所示。 表4.1 设计所需的数据类型表数据类型数据长度(位数)值域char8-128127int16-3276832767long int32-21474836482147483647unsigned char80255unsigned int16065535unsigned long int32042949672954.2系统主程序设计 在本设计的软件系统主函数除了对PIC16F877单片机中所要用到的端口,以及LCD液晶显示器进行初始化外,还包括需要调用的8个相应的子程序。这些子程序分别是:温度采集和转化子程序、DS1302初始化子程序、判断
26、温度报警子程序、切屏控制功能子程序、修改设定功能子程序、实时温度显示子程序、上下限温度显示子程序、实时时钟显示子程序。 对单片机中所要用到端口的具体初始化内容为:设置 RA口全部为普通数字 IO端口且A口的方向为输出,用于控制液晶显示器的读写功能;设置RB端口为弱上拉功能,用于实现按键控制模块与单片机的功能联系;定义RC口的RC4引脚作输入口,其它作为为输出口,用于实现单片机与温度采集模块、实时时钟模块和报警模块的功能联系。 对于用到的子程序:温度采集和转化子程序用于启动温度传感器采集外界温度并将温度值送给单片机用于下一步处理;DS1302初始化子程序是用于初始化DS1302的日历和时钟内容;
27、判断温度报警子程序是实现判断温度是否超过上下限,若超过则会掉用与报警有关的函数实现报警;切屏控制功能子程序和修改设定功能子程序都属于系统的控制功能模块,用于对系统的控制;实时温度显示子程序和上下限温度显示子程序以及实时时钟显示子程序,都是处理需要显示的数据,并显示在液晶显示器的相应位置。 整个软件系统的主函数通过如图4.1的循环结构,实现了各个模块在设计中的功能。 图4.1 系统主程序流程图 4.3液晶显示程序设计 设计液晶显示相关程序之前,我们先要了解LCD1602的控制指令。其具体的指令如图4.2所示。 图4.2 LCD1602控制命令 其中,指令3是通过高低电平来设置光标和显示模式 I/
28、D;指令4是高电平工作,低电平不工作;指令5的D3位为1时移动文字,为0时移动光标。 因此根据LCD1602控制命令,在主程序的LCD初始化语句为: PORTD=1; /清屏 ENABLE();/LCD写入控制命令的子程序 PORTD=0x38; /8 位 2 行 5x7 点阵 ENABLE(); PORTD=0x0c; /显示器开、光标关、闪烁关 ENABLE(); PORTD=0x06; /文字不动,光标自动右移 ENABLE(); 因为LCD1602只能显示32个字符,而需要显示的内容又比较多,又要考虑到显示字符位置的合理性和美观性,所以液晶显示的程序内容分为两大部分。一部分用于显示与温
29、度有关的内容,另一部分用于显示与DS1302有关的内容,它们通过按键控制模块来控制显示内容。 显示与温度有关的内容时,LCD的显示格式如下图图4.3所示,其中以H开头的数字为上限温度值,L开头的数字为下限温度值。第一行为温度传感器采集到的温度值,这里只显示到十分位。调用显示这些内容的子函数为display_18b20()和display_Temperature(),程序流程图分别如图4.4和4.5所示。 图4.3 显示与温度有关的内容 图4.4 display_18b20()程序流程图 图4.5 display_Temperature()程序流程图 显示与DS1302有关的内容时,LCD的显示
30、格式如下图图4.6所示。其调用子函数为display_ds1302(),其程序流程图如图4.7所示。 图4.6 显示与DS1302有关的内容 图4.7 display_ds1302()程序流程图 4.4温度采集和转换程序设计 完成温度采集和转换程序设计之前,要先了解DS18B20的复位时序图和读写时序图。在其可工作的时序内编写程序,就能正确的实现对DS18B20读数据和写命令,驱动DS18B20工作。其各个时序图如下图4.8、4.9、4.10所示。 图4.8 DS18B20复位时序图 图4.9 DS18B20写0和写1时序图 图4.10 DS18B20读0和读1时序图 因此,在本设计中的对DS
31、18B20的复位程序具体如下,而对DS18B20的读写程序具体内容见附录源程序的 read_byte()和write_byte()函数。 DS18B20复位程序:void reset()/ char presence=1; while(presence) DQ_HIGH();/拉高电平 delay(1); /稍作延时 DQ_LOW() ; /主机拉至低电平 delay(63); /延时773us DQ_HIGH(); /释放总线等电阻拉高总线, delay(2); /延时41us if(DQ=0) presence=0; /接收到应答信号 delay(40); /延时496us DQ_HIGH
32、();/再次拉高电,释放总线平; else presence=0; /没有接收到应答信号,继续复位 本设计中DS18B20采用的是出厂配置位为12位,即将采集到的温度转换为12位的数字信号,此时的温度分辨率为0.0625,转化温度的最大时间需要750ms。其存储格式如下图4.11所示,其中高8位的前5位即bit15到bit10表示符号位。如果S=0则温度大于0,否则温度小于0。温度大于0时,只要将数值乘于0.0625就能得到实际的温度值9。小于0时,就需要先取反加一,再按大于零的情况处理。 图4.11 温度值存储格式 下表4.1是DS18B20的部分温度值和与之对应的数字输出内容。由表中的二进
33、制数据可以看出数据的第十一位到第五位表示温度值的整数部分,第四位表示温度的小数部分。 表4.1 温度值和与之对应的数字温度()输出数据(二进制)输出数据(十六进制)125 0000011111010000 0X07D085 0000010101010000 0X055026.06250000000110010001 0X019110.1250000000010100010 0X00A20.50000000000001000 0X000800000000000000000 0X0000-0.51111111111111000 0XFFF8-10.1251111111101011110 0XFF5
34、E-25.05251111111001101111 0XFE6F-551111 110010010000 0XFC90 温度采集和转换程序的程序流程图如图4.11,其中flag用于标志温度值的正负符号在显示温度值时要用到。Flag=0表示正温度,Flag=1表示负温度。 图4.12 温度采集和转换程序的程序流程图4.5实时时钟程序设计 编写时钟程序要先了解DS1302的控制字10。其控制字结构图如图4.13。图中的第0位为1表示读操作,否则表示写操作,第6位表示要存取哪里的数据。其中与日历、时钟有关寄存器和控制字具体如图4.14所示。单片机向DS1302读/写一个字节数据的时序图如图4.15,
35、图中的CE即RST。 图4.13 DS1302控制字图 图4.14 与日历时钟有关寄存器和控制字 图4.15 DS1302读写一字节数据的时序图 根据以上了解的DS1302的控制字以及时序图,就可以编写出读写一个字节数据的程序,其读和写的程序流程图分如图4.16和图4.17所示。 图4.16 DS1302读数据程序流程图 图4.17 DS1302写数据程序流程图 完成了向DS1302读写数据的程序,在设计中还加入了DS1302的初始化程序,用于初始化需要现实的日历和时钟的数据。例如初始显示的内容为“2015-04-16,09:00:00,week3”,则进行DS1302的初始化函数具体如下:v
36、oid Int_1302() W1302(0x8e,0x00); /允许写WP=0,禁止写保护 W1302(0x80,0x00); /写入初始秒数据00W1302(0x82,0x00);/写入初始分数据00W1302(0x84,0x09);/写入初始小时数据09W1302(0x8a,0x05);/写入初始星期数据5W1302(0x86,0x16);/写入初始日期数据16W1302(0x88,0x04);/写入初始月份数据04W1302(0x8c,0x15);/写入初始年份数据15W1302(0x8e,0x80); /打开写保护 由于DS1302的日历时钟寄存器存储的是BCD码数据,所以应写入十
37、进制数的BCD码。周寄存器的数据只能存储从1到7的其中一个,所以当存储的是1时,则表示周日,类似的2则表示星期一。对于星期,在本设计的液晶显示星期几,采用的是星期几的英文的前三个大写字母来显示,用C语言中的case 语句类判断来判断是星期几。至于显示其他的日历和时钟的内容,就要先将要显示的数据转为十进制,再显示。 BCD码数据转为十进制数据的程序如下: unsigned char BCD_Change(unsigned char bcd) unsigned char Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&0x0F); 4.6
38、判断温度报警模块程序设计 温度报警模块软件设计,这里包含了两个部分。第一部分是判断是否超上下限温度,第二部分是报警程序。 下面首先介绍的是第一部分,其程序流程图如图4.18。图中的t表示DS18B20测得的实际温度,负温度并未进行取反加一处理,LT表示下限温度,HT表示上限温度。 图4.18 判断温度报警模块程序流程图 下面是具体的报警程序,用于产生报警信号使得蜂鸣器发声和LED闪烁。 报警程序:void sound_delay()/蜂鸣器报警程序unsigned int i,j;for(i=300;i0;i-)RC0=!RC0;delay1ms();for(i=100;i0;i-)RC0=!
39、RC0;delayms();void LED_delay()/LED闪烁报警程序unsigned int i,j;for(i=500;i0;i-)RC1=!RC1;delayms();for(i=500;i0;i-)RC1=!RC1;delayms();4.7按键控制功能程序设计 设计中的按键功能具体可以分为三个部分,分别是显示切换功能、上下限温度修改功能和实时时钟修改功能。4.7.1显示切换按键程序设计 切换显示功能是通过与单片机RB3引脚相连的按键开关控制,其控制程序设计的流程图如图4.19。函数的返回值K1在主函数中用于判断需要调用的是case 0语句,还是case 1语句,即用于切换液
40、晶显示器所显示的内容。 图4.19 显示切换按键程序流程图4.7.2上下限温度修改程序 在本设计中的按键控制功能及其对应的引脚和返回值如表4.2所示11。为了让接下来的程序流程图看得简洁一些,程序流程图中的一些按键的名称就直接采用了与其对应引脚名称。因为设计中的设计报警上下限温度的范围是从-54到124,所以下限温度最低只能减到-54,最高只能加到123。同理,下上限温度最低只能减到-53,最高只能加到124。设计的最小报警范围为1。因此上下限温度的修改设定程序的流程就如图4.20所示。图中的日历时钟设置是用于对DS1302要显示的内容进行修改设定程序,这里只是进行简单带过,在4.7.3中会详
41、细的给出其流程图。 表4.2 按键功能及其对应的引脚和返回值功能键连接引脚按下后的返回值屏幕切换功能键 RB3 K1选择所修改参数功能键 RB0 K2进入/退出修改功能键 RB4 K3加的功能键 RB1 K4减的功能键 RB2 K5 图4.20 上下限温度修改程序流程图4.7.3实时时钟修改程序 下图图4.21为实时时钟修改设置功能的部分程序流程图,图中绘出了对nian和yue的修改设置的程序流程图。因为实时时钟的其他设置程序与nian和yue的流程图相似,只是在自加和自减之后对对数据的处理方法有所不同,它们都是通过K2%7的值作为修改设置相应数据的判断依据。例如当K2%7=2并且K1=1时,
42、则可以进行修改和设置日期的数值,对日期的修改需要先判断是闰年还是平年,再根据月份进行日期的修改。像修改日期、时分秒和星期的具体程序,可见附录源程序中的RB3_scan()的子程序。 图4.21 实时时钟部分修改设置程序流程图第五章 系统软件调试第五章 系统软件调试5.1 DS18B20温度测量功能调试 通过将源程序经编译生成的bishe.hex文件载入到仿真电路的PIC单片机上,点击运行仿真按钮进行仿真。调节DS18B20传感器上显示的温度值,看液晶显示器上的温度值是否与之相等。例如,图5.1、图5.2为仿真电路系统在程序的控制下,对不同温度环境采集到温度情况。 图5.1 温度传感器设置的温度为21 图5.2 温度传感器设置的温度为-4 通过多次仿真调整传感器的测量温度,液晶上都能显示出与传感器上设置的温度值相同的数字,所以软件系统的温度测量程序能够正确运行。另外由于,仿真软件上传感器的温度只能以整数的形式调整,所以还无法肯定温度的小数部分也能正常显示。5.2 温度报警功能程序调试 由5.1节DS18B20温度测量功能调试中的图5.1、图5.2所示,以及在仿真电路上多次调试,在报警温度的限定范围内,报警电路无反应,系统不报警。而当温度超过报警限定范,报警电路就会报警,蜂鸣器发出嘀嘀声,LED灯也会发出闪烁的红光。报警时的电路情况如图5.3和图5.