河北工程大学毕业设计说明书
4 系统的软件设计
软件设计是水族箱智能控制系统设计的主要内容和重点,应该根据系统功能要求,以系统硬件电路为基础进行系统的软件设计。为了使设计出来的软件功能明确,阅读、调试方便,健壮性、可靠性好,一般采用结构化的程序设计方法。结构化的程序设计包括三方面的工作:自顶向下的设计、模块化编程和结构化编程。除此之外,有时还需要加强软件抗干扰设计,以提高程序的可靠性。
单片机系统程序采用单片机C编程语言进行开发的,整个单片机系统的程序共分为六个模块,即主程序模块、时钟模块、温度采集模块、屏幕显示模块、蜂鸣器与延时模块、E2PROM模块每个模块都具有一定的功能,其中有的模块还包含一些子模块,即相互独立又相互联系,低级模块可以被高级模块调用。
4.1 主程序工作流程
系统软件主程序是检测鱼缸内各种环境参数,从而进行鱼缸智能控制的主监控程序,按照软件模块化设计的原则,将系统功能划分为多个子任务,每个子任务由对应的子程序来实现;再将这些子程序有机地整合在一起,从而实现温度、水位、氧气等参数的采集功能。这样的设计,一方面可以理清设计者的思路,再者,模块化的设计,可以方便编写与调试程序。
4.1.1 主程序工作流程图
系统监控主程序的工作流程图见图4-1所示,监控主程序主要完成以下工作: ⑴对系统进行初始化 ⑵时间显示 ⑶检测温度 ⑷监控设置按钮
22
河北工程大学毕业设计说明书
图4-1主程序流程图
4.2 时间和温度读取模块
本系统最为关键的两个控制参数为时间和鱼缸温度,在前一章中已经介绍了实时时钟电路DS1302芯片和DS18B20单线数字温度传感器的作用,所以下面简单介绍系统实现对DS1302的时钟读取和对DS18B20的温度读取。
4.2.1 读取DS1302的时钟
从DS1302中读取时钟的过程是:依次从DS1302的相应存储位置读取年、星期、月、日、时、分、秒,而且这些值以BCD码形式被读取,在其他程序调用时,必须进行转换。主要读取函数如下:
1.时钟芯片初始化 2.读取时间
23
河北工程大学毕业设计说明书
3.修改写入时间
DS1302工作流程图如图4-2所示
图4-2 时间显示流程图
4.2.2 读取DS18B20的温度
从DS18B20中读取温度的过程是:首先获取DS18B20中的温度值,该温度值为BCD码形式,然后通过转换,以十进制形式输出温度值,且此时输出的温度值含有两位小数,但输出时没有小数点,输出的温度值是实际温度的一百倍。它的步骤如下: (1)初始化函数
(2)读取温度传感器的温度 (3)计算实际温度值
24
河北工程大学毕业设计说明书
如果测得的温度大于0,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,测到的数值需要取反加1再乘以0.0625才能得到实际温度。 DS18B20工作流程图如下,写DS18B20指令字节的流程图如图4-3所示。
开 始 进位标志位清零 数据端清零 延时(15us) 循环右移一次 进位标志位值送数据端 延时(30us) 数据端置高(拉高数据线) N 指令字节写完? Y DS18B20写返回 图4-3 写DS18B20指令字节的流程图
4.4 E2PROM模块
本系统中设置各个参数的值都离不开E2PROM的,因为本系统采用的是STC89C52型单片机,自带4KE2PROM只需要在程序中对E2PROM调用即可,调用的步骤如下。
1.擦除指定的扇区 2.写一字节 3.读一字节
其中的擦除扇区,没有字节擦除,只有扇区擦除。如果要改变扇区中的某个字节,保留其它字节内容不变,必须先把其它字节读出来保存,然后擦除整个扇区,再把改动的字
25
河北工程大学毕业设计说明书
节内容和保存的其它字节内容写入扇区。所以最好把数据放在不同的扇区中。扇区读写的时间短,擦除的时间比较长,要注意扇区擦除函数的调用位置,比如最好不要放在定时中断中。
4.5 本章小结
综合本系统软件的设计,有如下几个特点:
1.采用模块化的程序设计方法,使整个程序结构清晰,并具有开放性的特点,易于移植、修改和扩展。
2.系统采用单片机C语言软件开发,C语言在功能上、结构性、可读性上有明显的优势。而且使用KeilC51软件开发环境,该开发环境提供了丰富的库函数和功能强大的集成开发调试工具,全Windows界面,语句生成的汇编代码很紧凑,容易理解。
3.重点介绍了采样值的处理、工作状态的处理以及如何实现按时间段循环控制实时任务的设计技术。
26