基于单片机的水塔自动注水控制

更新时间:2023-09-11 04:57:01 阅读量: 教育文库 文档下载

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

湖南工业职业技术学院学生毕业设计

摘 要

供水是一个关系国计民生的重要产业。传统的人工供水方式,劳动强度大,工作效率低,安全性难以保障,而水塔水位控制系统是我国住宅小区广泛应用的供水系统,为此很有必要对水塔水位进行自动控制。为了达到节能的目的,提高供水系统的质量,考虑采用单片机技术,设计出一套实用水位自动控制方案。

本课题主要基于单片机的硬件电路设计,在硬件基础上合理配合软件,实现一种能够实现水位自动控制、具有自动保护、自动声光报警功能的控制系统,完成水塔水位控制系统的设计。该控制系统由单片机控制部分、时钟显示部分、数码显示部分、电机控制部分、报警部分等构成。再利用Proteus 和Keil 软件完成水塔水位控制系统硬件电路以及控制程序的设计,并进行了系统的调试和仿真。因为它具有电路简单、操作方便、性能良好、可靠性高等优点,因此该设计具有一定的实用性。

关键字:供水;水塔水位;控制系统;单片机

- I -

湖南工业职业技术学院学生毕业设计

目 录

第一章 绪论 .......................................................................................................... 1 第二章 水塔水位控制硬件设计 .......................................................................... 7

2.1 基本要求 ............................................................................................................................. 7 2.2 硬件设计 ............................................................................................................................. 7

第三章 软件部分 ................................................................................................ 17

3.1 程序框图 ............................................................................................................................ 17 3.2 C语言程序部分 ................................................................................................................. 17

第四章 软件仿真 ................................................................................................ 19

4.1 Protues介绍 ....................................................................................................................... 19 4.2 Keil介绍 ............................................................................................................................. 19 4.3 Protues与Keil C的联合仿真 .......................................................................................... 19 4.4 Keil C的调试步骤 ............................................................................................................. 20 4.5加文件到Protues ............................................................................................................... 21 4.6 仿真显示 ............................................................................................................................ 21

总结 ...................................................................................................................... 27 致谢 ...................................................................................................................... 28 参考文献 .............................................................................................................. 29 附件一 .................................................................................................................. 30

- II -

湖南工业职业技术学院学生毕业设计

第一章 绪论

供水是一个关系国计民生的重要产业[1] 。水位控制在日常生活及工业领域(工厂、农村、学校等水量大的场所)中应用相当广泛。而水位的自动控制和监测和水塔是在日常生活和工业应用中经常见到的蓄水装置,通过对其水位的控制对外供水以满足需要,其水位控制具有普遍性。

单片机是将RAM,ROM,定时器/计数器以及输入/输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机,简称单片微机或单片机。由于单片机的硬件结构与指令系统都是按工业控制要求设计的,常用于工业的检测和控制当中,因而也称为是微控制器或嵌入式控制器,它的出现使众多自动化控制系统得以实现。单片机不仅它功能强大、设计简单,而且制造很廉价,支持指令集较多[2]。因此,本设计对基于单片机的水塔水位控制器的研究有着重要的意义。

水塔供水的主要目的是使塔内水位应始终保持在一定范围,避免“空塔”、“溢塔”现象发生,因此要采用水位传感器测量水位变化。在水塔中的水位到达水位下限时自动启动电机,给水塔供水;在水塔水位达到正常水位的时候自动关闭电机,停止供水。并能在供水系统出现异常的时候能够发出警报,以及时排除故障,随时保证水塔的对外的正常供水作用。

在当今社会经济高速增长的同时,水在人们的生活、生产中起着重要的作用。一旦出现缺水,轻则给人们生活带来极大的不便,重则出现造成严重的生产事故并造成不可挽救的经济损失。因此,对供水系统的控制显得十分重要。水塔是我国广泛应用的供水系统,传统的水塔水位控制方式存在很大的弊端,需要工作人员的时刻监控,不仅劳动强度大,而且工作效率低,最重要的是供水的安全性难以保障。而自动控制则不需要工作人员的时刻监控,水塔控制系统能自动地调节水塔中的水位以保持恒定,以满足人们生活中用水需求[3]。

20世纪80 年代以来,我国发展了以自记遥测为主的水位测量技术。它主要是建立自记水位计,实现水位自动采集、存储、远传。同期,还发展了无人立尺观测技术,这种技术采用激光测距仪与经纬仪接口配套组成的一套设备,利用激光测距仪无须反射棱镜测定距离(测距精度:0~5m)的性能,配以经纬仪测角测定目标高程的一种测量方法。

- 1 -

湖南工业职业技术学院学生毕业设计

随着近代科学技术的发展和新材料新器件的开发,采用传感器研制水位计近年来有较大发展。主要采用的传感器有超声波[4]、光电、压力、接触式、浮于式等几种[5]。超声波式水位计是将换能器向水面发射超声波,测量超声波传播时间,计算出水位。压力式水位计也是不需要水位测并,其基本原理是测量静水压力来实现水深的测量,已采用过波纹管和水银位移式压力传感器等方法。固态压力传感器由于其灵敏度高、体积小、寿命长、且有抗腐蚀性而受到重视,但由于半导体传感器受温度影响大等原因,使其实用性受到限制。近年来固态传感器温度自动补偿问题有了进展,固态压阻式水位计已经得到应用。接触式水位计使用机电的方法用探头跟踪井内水面高低变化测量水位,已在少数领域使用,浮子式水位计,利用水球(或其它浮子) 作敏感器件,避免了温度、湿度等因素的影晌,性能稳定,工作可靠,因而得到长期使用和发展。

单片机自 20 世纪 70 年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易[6]。正因为单片机有如此多的优点,因此其应用领域之广,几乎到了无孔不入的地步。在我国,单片机已被广泛地应用在工业自动化控制[7]、自动检测、智能仪表[8]、智能化家用电器、航空航天系统和和国防军事、尖端武器等各个方面。单片机的潜力越来越被人们所重视。特别是当前用 CMOS 工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。因此,可以开发利用单片机系统以获得很高的经济效益。虽然单片机的引入使控制系统大大“软化”,但与其它计算机应用问题相比,单片机控制应用中的硬件内容仍然较多,所以说单片机控制应用有软硬件相结合的特点。为此,在单片机的应用设计中需要软、硬件统筹考虑,设计者不但要熟练掌握汇编语言等编程技术,而且还要具备较扎实的单片机硬件方面的理论和实践知识。更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为微控制技术。

水塔水位最重要的就是对水塔水位进行精确的探测[9],水塔水位的控制系统主要是基于单片机的水塔水位控制系统和基于PLC的水塔水位控制系统。PLC即可编程序控制器,是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用执行逻辑运算、顺序控制、定时/计数和算术运算等各类操作指令,并

- 2 -

湖南工业职业技术学院学生毕业设计

通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。PLC的一般特点:抗干扰能力强,可靠性极高、编程简单方便、使用方便、维护方便、设计、施工、调试周期短、易于实现机电一体化[10],PLC总的发展趋势是:高功能、高速度、高集成度、大容量、小体积、低成本、通信组网能力强。基于PLC的水塔水位控制系统是以PLC为核心,对水塔水位自动控制系统的功能进行性进行需求分析。可以实现对水塔水位的自动控制和监测[11]。主要实现方法是通过传感器检测水塔水位的实际水位,将水位具体信息传至PLC构成的控制模块,经A/D转换后,进行数据比较,来控制抽水电机的动作,同时进行数据还原,显示水位具体信息,如果水位低于或高于某个设定值时,就会发出危险报警的信号。基于单片机的水塔水位控制系统以单片机为核心,通过单片机本身的功能模块和控制程序,来实现对水塔水位做出控制、显示和发出报警信号。 基于单片机的水塔水位控制系统最应解决的是液位传感器问题。最常用的是电阻式传感器、压阻式压力传感器、超声波水位传感器等。电阻式传感器如图1-1中虚线表示允许水位变化的上、下限。在正常情况下,应保持水位在虚线范围之内。为此,在水塔内的不同高度安装 3 根金属棒,以感知水位变化情况。其中,A 棒处于下限水位。C 棒处于上限水位,B 棒在上、下水位之间。A 棒接 + 5V 电源,B 棒、C 棒各通过一个电阻与地面相连。供水时,水位上升,当达到上限时,由于水的导电作用,B、C 棒连通+ 5V。因此,b,c 两端均为 1 状态,这时应停止电动机和水泵的工作,不再给水塔供水。当水位降到下限时,B、C 棒都不能与 A 棒导电,因此,b、c 两端均为0 状态. 这时应启动电动机,带动水泵工作,给水塔供水。当水位处于上、下限之间时,B 棒与 A 棒导通,因 C 棒不能与 A 棒导通,b 端为 1 状态,c 端为 0状态。即实现A/D转换。通过对传感器的选择,可知由传感器输出的水位高度信号是 0 ~5 V 的直流电压。在设计中,可以通过采样、保持电路对这一信号进行处理,将模拟信号转换为多个采样点信号。

图 1-1电阻式传感器

- 3 -

湖南工业职业技术学院学生毕业设计

传统的水位检测通过设检测点来完成对水位的检测。通常,由于受检测点物理体积的影响,水位检测点的数目有限,从而影响了后续电路控制的精度。新型水位传感器即选用北京英泰德科技有限责任公司生产的投入式液位变送器 MPM416W/426W,可以达到对水位高度的精确检测,以利于提高后续电路控制的精度。其原理是通过压阻式压力传感器,把与液位深度成正比的液体静压力准确测量出来,并经放大电路转化成标准电流( 或电压) 信号输出,建立起输出电信号与液体深度的线性对应关系,实现对液体深的测量。同时其具有以下特点:

(1)使用寿命长,液位变送器膜片采用高技术激光调制电路,传感器外壳采用不锈钢制作。

(2) 安装方便,仅需将投入式液位变送器探头投入液体中,引出信号线同二次仪表连接就可进行液位测量。

(3) 温度稳定性好,投入式液位变送器本身在0~70 ℃内实现了温度补偿,在信号转换电路中加入了温度补偿电路,消除电路温漂对精度的影响,从而提高精度。

超声波水位传感器能测量自身到水面之间的距离,由超声波发送电路和超声波接收电路组成。超声波发射电路原理如图1-2所示,单片机的一个端口发出40KHZ的方波信号,然后信号分成两路送出,其中的一路经反向器74LS4069后送到超声发射管T的一个电极,另一路经两次反向后送到发射管T的另一个电极,这样做目的是为了增强超声波发射强度和提高电路驱动能力。电阻R1和R2作为上拉电阻作用有两个:第一是提高反向器输出高电平的驱动能力;第二是增加超声波发射管T的阻尼系数,缩短自由振荡的时间。超声波接收电路原理如图1-3所示,该部分主要由超声波接收探头R及红外检波接收芯片CX20106A组成,因接收芯片CX20106A的载波频率为38KHZ,而上述超声波发射电路发出的超声波频率为40KHZ,两者较为接近,所以利用该芯片制作超声波接收电路.实验表明,无超声波信号时CX20106A输出高电平,有信号时输出一个脉冲信号,且具有很高的灵敏度和较强的抗干扰能力。当系统工作时,由单片机的一个端口发出的40KHZ的方波信号经过驱动电路使超声波发射器T发出一定强度的超声波信号,当超声波信号遇到障碍物时就会被反射回来,反射回来的超声波信号被超声波接收器R所接收,接收到的信号经过信号处理电路的处理送入到单片机的另一个端口,单片机根据发送与接收的时间差计算出传感器到水面的距离X,再由安装时传感器到水塔底部的距离H(已知值),计算出当前水的剩余量h=H-X。

- 4 -

湖南工业职业技术学院学生毕业设计

图 1-2 超声波发射电路

图 1-3超声波接收电路

本设计基于电阻式传感器并以水塔水位为模型,鉴于单片机液位测量装置的测量准确、重复性能好、功耗低、使用寿命长等特点,所以该设计以单片机为基础的水塔水位控制系统。在实际中,水塔水位自动控制电路是通过水位传感器对水位进行采样,将采样信号的水位高度转换为0~5 V 的直流电压,再经过 A/D 转换[12]后,将转换所得的8 路并行数字量送入单片机进行处理来来驱动电机的启停等。从而达到对水位进行自动控制的目的。通过对电压和水位的转换关系,最终利用单片机进行精确的控制,实现对水位高度的显示、主/备电机和报警装置等的控制。但是鉴于基于单片机的水塔水位控制系统在Protues上进行仿真,而Protues上没有水塔水位的模型。因此,可以用按钮来代替水塔的液位传感器。

在设计过程中采用了软件和硬件双结合的的设计方法,而软件的设计简化了硬件要求。在本设计中软件主要有五个方面的应用,它们分别为:声光报警程序、时钟显示程序、水位显示程序、键盘控制和电机控制程序等。该设计第二章介绍了“基于水塔水位控制系统的设计与仿真”的硬件设计,其中包括单片机的介绍、89C51的功能及引脚介绍、CD4511的功能及引脚介绍、LED数码显示、电机驱动与现实、水位监

- 5 -

湖南工业职业技术学院学生毕业设计

测电路等部分组成;第三章主要介绍软件部分,其中包括程序框图和C语言程序两部分组成;第四章则是仿真部分,其中包括Keil、 Protues的介绍,以及Keil的调试部分和加文件到Protues中等几部分组成。

- 6 -

湖南工业职业技术学院学生毕业设计

第二章 水塔水位控制硬件设计

2.1 基本要求

由于需要基于单片机的水塔水位控制系统进行仿真,而Protues中没有水塔水位的模型,因此可以用按钮来控制电动机的转动,并用LED数码管来显示水塔水位的高度。当水位过高或过低时,都会发出报警声和指示灯显示。与此同时,还可以用LED数码管来及时显示当前时间。 2.2 硬件设计 2.2.2 单片机的介绍

自从1971年微型计算机问世以来,随着大规模集成电路技术的进一步发展,导致微型计算机向两个方向发展:一是高速度、高性能、大容量的高档微型计算机及其系列化,向大、中型计算机的挑战;另一个是稳定可靠、小而廉、能适应各种控制领域需要的单片机。

单片机是把中央处理单元、随机存储器、只读存储器、定时/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微型计算机系统的含义,从某种意义上说,一块单片机芯片就是一台微型计算机。

自从1975年美国德克萨斯公司推出世界第一个4位单片机TMS—1000型以来,单片机技术不断发展,目前已成为微型计算机技术的一个独特分支,广泛应用于工业控制、仪器仪表智能化和家用电子产品等各个控制领域。

在进行系统设计时,在单片机应用系统中,无论其技术要求、应用领域还是其规模大小是否相同,一般应遵循以下基本原则[13]: (1)高可靠性

单片机应用系统一个非常重要的特点就是高可靠性。在生活和生产工作中,单片机系统一般是实现系统的自动控制。一旦系统发生故障,轻则带来不便,重则会造成停止工作甚至是人员伤亡。大部分单片机系统是用在工业和民用的实时控制中的,而这些控制都是在不停地工作,有很高的可靠性是控制系统最一般的要求,从而使控制系统有较长的平均无故障时间。因此,在设计单片机应用系统中,高可靠性在每一环节都必须作为设计原则。

- 7 -

湖南工业职业技术学院学生毕业设计

(2)高性价比

在具有高可靠性的同时,在设计单片机应用系统时,控制系统的性价比也是必须考虑。在保证功能实现和高可靠性的条件下,不必强求 CPU 及元器件的高档次,能使用8位机就不用16位机,能使用中档就不用高档机,能使用 89C51 就不用 89C52; 能用软件实现的功能就不要用硬件来做,尽量减少元器件的数量,以提高性价比。 (3)操作简单,维护方便

一般的单片机应用系统的使用者都不是专业人员,所以在设计时应注意使用者的操作要尽量简单、方便; 设计时也要注意系统的维修方便,要使系统一旦发生了故障,维修人员能够及时查出原因,并能迅速排除故障。 (4)具有可扩展性

由于工厂的生产工艺在不断的革新,市场的情况也在不断的变化,所以单片机的控制对象也会不断地改变,所需控制的功能也有可能不断地增加,在设计单片机控制系统时,也许有些功能当时用不到,但也应在输入 /输出接口、数据存储器、程序存储器等方面留有可扩展的余地。

2.2.3 89C51芯片功能及引脚介绍

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。89C51的主要特性为:与MCS-51 兼容、4K字节可编程闪烁存储器、数据保留时间为10年、128*8位内部RAM、32可编程I/O线·两个16位定时器/计数器、5个中断源、可编程串行通道等。

下面是89C51单片机引脚图及引脚功能介绍(如图2-2所示):

- 8 -

湖南工业职业技术学院学生毕业设计

图 2-2单片机引脚图

40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。 1). 电源:

⑴ VCC - 芯片电源,接+5V; ⑵ GND- 接地端;

2). 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 3). 控制线:控制线共有4根:

⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲。 ① ALE功能:用来锁存P0口送出的低8位地址。

② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵ PSEN:外ROM读选通信号。 ⑶ RST:复位。

⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。 ① EA功能:内外ROM选择端。

② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 4). I/O口:

89C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。 5)2.2.4 CD4511芯片功能及引脚介绍

CD4511 是一片 CMOS BCD—锁存/7 段译码/驱动器,具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流,可直接驱动共阴LED数码管。下面是CD4511引脚图及引脚功能介绍(如图2-3所示):

- 9 -

湖南工业职业技术学院学生毕业设计

图 2-3 CD4511引脚图 引脚功能:

A0~A3:二进制数据输入端 /BI:输出消隐控制端 LE:数据锁定控制端 /LT:灯测试端 QA~QG:数据输出端 使用方法:

其中A、B、C、D 为 BCD 码输入,A为最低位。LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时, B1端应加高电平。另外 CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。LE是锁存控制端,高电平时锁存,低电平时传输数据。QA~QG是7段输出,可驱动共阴LED数码管。 下图是 CD4511和 CD4518配合而成一位计数显示电路,若要多位计数,只需将计数器级联,每级输出接一只 CD4511 和 LED 数码管即可。所谓共阴 LED 数码管是指 7 段 LED 的阴极是连在一起的,在应用中应接地。限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω的限流电阻。 2.2.5 DS1302芯片功能及引脚介绍

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM

- 10 -

湖南工业职业技术学院学生毕业设计

寄存器。它的主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。

图 2-4 DS1302引脚图 引脚功能(如图2-4所示): Vcc1:主电源 Vcc2:后备电源 X1、X2:振荡源 RST:复位/片选线

I/O:串行数据输入输出端(双向) SCLK:时钟输入端

电路连接(如图2-5所示):

2.2.6 LED数码管显示

图 2-5 DS1302芯片的电路连接

LED数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极(数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个)。这些段分别由字母“a,b,e,f,g,dp”来表示[14]。LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。静态驱动也称直流驱动,静态驱动是指每个数码管的每一个段

- 11 -

湖南工业职业技术学院学生毕业设计

码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动,静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多;动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮,通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动,在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。LED数码管的形状以及共阴极共阳极电路如图2-6所示:

图 2-6 LED数码管共阳极和共阴极电路

对水塔水位显示,本设计是通过CD4511来驱动共阴极数码管,将CD4511的A、B、C、D端分别和89C51的P3口的低4位相连,A是最低位D是最高位。然后再将CD4511的“QA,QB,QC,QD,QE,QF,QG”分别和LED数码管的数据端相连,通过89C51的P3口的低4位来驱动数码管的显示。通过A、B、C、D的BCD码来驱动数码管的显示,如图2-7所示:

- 12 -

湖南工业职业技术学院学生毕业设计

图 2-7 CD4511驱动的数码管

对数字时钟的显示,本设计是通过DS1302来驱动八个数码管,将数码管的“a,b,c,d,e,f,g,dp”分别和89C51的P0口相连,再将数码管的“1,2,3,4,5,6,7,8”端口分别和89C51的P2口相连,当系统一运行时,DS1302能及时驱动数码管显示当前的时间。 2.2.7 电机驱动及显示

电动机(Motors)是把电能转换成机械能的一种设备。它是利用通电线圈(也就是定子绕组)产生旋转磁场并作用于转子(如鼠笼式闭合铝框)形成磁电动力旋转扭矩。电动机按使用电源不同分为直流电动机和交流电动机,电力系统中的电动机大部分是交流电机,可以是同步电机或者是异步电机(电机定子磁场转速与转子旋转转速不保持同步速)。电动机主要由定子与转子组成,通电导线在磁场中受力运动的方向跟电流方向和磁感线(磁场方向)方向有关。电动机工作原理是磁场对电流受力的作用,使电动机转动。

水塔中水量都是通过电动机的转动,将水输送到水塔中,而电动机的转动是通过继电器的吸合和断开来控制。当水塔中的水位过高时,控制电动机的继电器会自动的断开,电动机停转;当水塔中的水位过低时,控制电动机的继电器会自动的吸合,电动机开始转动,水塔中的水位开始上升,直到水塔中的水位达到高位时继电器自动的断开,电动机停转。

电机控制部分,采用了三极管放大和二极管正向导通的作用和继电器的吸合作用来控制电机的工作,由单片机P1.0 口进行控制,而电机的工作状况由相应的显示指示灯来显示,如图2-8所示:

- 13 -

湖南工业职业技术学院学生毕业设计

图2-8 电机控制电路

2.2.8 水位检测电路

按键是直接用I/O 口线构成的单个按键电路,每个独立式按键占有一根I/O 口线,各根I/O 口线之间不会相互影响。在此电路中,按键输入采用低电平有效。

水位检测部分是用单片机P1.4~P1.7连接的四个按钮分别代表shuiman、sw3、sw2和sw1。

由于基于单片机的水塔水位控制系统在Protues中进行仿真时,Protues中没有水塔水位的模型,所以就不能用实际的液位传感器来前侧水塔中的实际水位。在这里可以用四个按钮K2、K3、K4、K5来控制水塔中的水位。当按下K5,电动机开始转动,此时水塔中的水位会显示1,即此时的水位时水塔总高度的1/4错误!未找到引用源。;当按下K4,电动机开始转动,此时水塔中的水位会显示2,即此时的水位时水塔总高度的2/4错误!未找到引用源。;当按下K3,电动机开始转动,此时水塔中的水位会显示3,即此时的水位时水塔总高度的3/4错误!未找到引用源。;当按下K2,电动机开始转动,此时水塔中的水位会显示4,即此时的水位达到水满状态。如图2-9所示:

图2-9 水位检测电路

2.2.9 声光报警电路

报警电路是一种为防止或预防某事件发生所造成的后果,以声音、光、气压等形式来提醒或警示我们应当采取某种行动的电子产品。声光报警部分主要由以扬声器为代表

- 14 -

湖南工业职业技术学院学生毕业设计

的声音报警部分和以数码管为代表的光报警部分,它们分别由单片机的P3.2 和P3.7 接口来实现水位的报警。当K2按钮被按下时,即此时为shuiman,报警指示灯发光二极管会闪烁并且扬声器会发出尖锐的报警声,且闪烁几秒钟后声光报警会自动的关闭;当K5被按下时,即此时为低水位,报警指示灯发光二极管会闪烁并且扬声器会发出尖锐的报警声,且闪烁几秒钟后声光报警会自动的关闭。如图2-10所示:

图2-10 声光报警电路

2.3.1 电路总体框架图

如图2-1中所示

图 2-1 电路总体框架图

该图是在Protues上进行仿真的硬件电路图。它由CD4511驱动的LED数码管电路、

- 15 -

湖南工业职业技术学院学生毕业设计

由DS1302驱动数字时钟显示电路、电机驱动电路、复位电路、晶振电路、报警电路、指示电路等部分组成。

- 16 -

湖南工业职业技术学院学生毕业设计

第三章 软件部分

3.1 程序框图

根据水塔水位控制硬件设计的分析要求及电路的特点,绘制出水塔水位控制程序流程图,如图 3 -1所示:

初始化

N 时钟显示

有键按下?

Y

判断哪个 键按下

Sw1按键(手动启动)

水位1 时钟显示 时钟显示 电机转动

Sw2按键 Sw4按键 Sw3按键

水位3 水位2 水位4 电机转动指电机转动指

示灯 示灯

蜂鸣器

无限循环 无限循环

图3-1 程序框图 报警灯 无限循环

3.2 C语言程序部分

C语言是在20世纪70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔

- 17 -

湖南工业职业技术学院学生毕业设计

实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。

早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。

C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,形成了多种版本的C语言。

C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。

C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。

根据水塔水位控制硬件设计的分析要求及电路的特点,软件部分包括主程序、时钟显示、水塔水位显示、电机驱动、指示灯显示、报警、键盘检测等程序组成。根据水塔水位控制系统硬件设计的分析要求及电路的特点而编写的C语言程序如后面附件一中的程序所示。

- 18 -

湖南工业职业技术学院学生毕业设计

} }

P2=~(0x80>>i); P0=disbuf[i]; i++;

//3msx8x20,大约480ms从DS1302芯片读取一下时间 if(j==20) {

j=0 ; refbuf(); if(mod==0) read_time(); } }

- 39 -

湖南工业职业技术学院学生毕业设计

第四章 软件仿真

4.1 Protues介绍

Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译. 4.2 Keil介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,

与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。 4.3 Protues与Keil C的联合仿真错误!未找到引用源。

实现Protues与Keil C的接口步骤如下[15]:

(1) 安装Protues与 Keil C并同时安装vdmagdi.exe程序。

(2)进入Protues ISIS,选择Debug|Use Remote Debug Monitor菜单选项。 (3)进入Keil C μVision3集成开发环境,创建一个新项目(Project),并为该项目选定合适的单片机型号,加入Keil C 源程序。随后,选择Project|Options for Target菜单项,或者单击工具栏中的Options for Target按钮,在弹出的界面选择Debug选项卡,在Use的下拉列表框中选择Protues VSM Simulator,并且选中Use单选框,即在Use前面的小圆圈内出现小黑点。在单击Settings按钮,设置通信接口在Host文本框输入“127.0.0.1”;茹阔使用的不是同一台电脑,则需要在这里输入另一台电脑的IP地址(另一台电脑安装Protues)。在Port文本框输入“8000”。设置好以后单击OK按钮即可。最后将工程编译,进入调试状态,并运行。

- 19 -

湖南工业职业技术学院学生毕业设计

4.4 Keil C的调试步骤 4.4.1 建工程

先在桌面上建“毕业设计”文件夹并打开Keil软件,在“Project”中选中 “New uVision project”并建立“lijie”工程名。如下图3-1所示:

图 3-1 建工程图 4.4.2 新建文件

选择“File”中的“New”选项,将C语言程序键入编译器中并保存好程序。然后在选择“Source Group”并点左键,选择“Add File to Source Group”并进行编译解调。当有错误时,跳到相应的错误位置,反复调试直到没错误为止。如图3-2所示:

图 3-2 新建文件图 4.4.3 调程序转换成hex文件

- 20 -

湖南工业职业技术学院学生毕业设计

当调制解调没错误时,选择“Output”并点击“Debug Information”并点击“Ok”后就可以在原来建立的“毕业设计”文件夹中生成相应的hex文件。如图3-3所示:

图 3-3 生成hex文件图

4.5加文件到Protues

打开Protues软件,建好相应的硬件电路图,选中硬件电路图中的AT89C51并用左键双击,并在“Program File”选项中选择桌面上“毕业设计”文件夹中的“lijie.hex”,然后再点击确定。因此,相应的程序才键入到了单片机里面。如图3-4所示:

图 3-4 烧程序到单片机图

4.6 仿真显示

根据水塔水位的不同高度(水位1、水位2、水位3和水满),基于单片机的水塔水位控制系统的仿真如下面的仿真图3-5所示

- 21 -

湖南工业职业技术学院学生毕业设计

水塔水位1

- 22 -

湖南工业职业技术学院学生毕业设计

水塔水位2

- 23 -

湖南工业职业技术学院学生毕业设计

水塔水位3

- 24 -

湖南工业职业技术学院学生毕业设计

水满水位4

- 25 -

湖南工业职业技术学院学生毕业设计

低水位1报警

高水位4报警

图 3-5 水塔水位仿真

- 26 -

湖南工业职业技术学院学生毕业设计

总结

水塔水位的控制方法很多,从中选择一个既效率高又性价比高的方法这是我们在实际中要去发现的。用单片机控制并通过一些A/D转换来模拟水位能及时的实现系统的自我控制。但由于条件的不足,所同意只能用按钮来模拟液位传感器来控制水塔中的水位,这是这次毕业设计中的美中不足。

在当今越来越趋向于自动化的社会,该系统的可用性及简易性应更加取得广泛的应用。通过这次的实际操作,也了解到在电子制作方面的很多独特发现。前人们的发明并不是偶然取得,而是通过长期的学习积累,我们也学到了他们那种坚决不放弃得制作精神。这次毕业设计让自己懂得了,做任何学问都要一丝不苟,对出现的任何问题和偏差都不能轻视,要通过正确的途径区解决,做事情的时候要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就能找到解决问题的思路和办法,在工作中要学会与人合作,认真听取别人的意见,这样做事也会事半功倍。当然整个实验过程中自己也收获颇多,对电路的设计有一大致的了解并能自己动手完成一些简单的电路设计、制板及调试的过程,极大地提高了自己的动手能力,也让自己懂的了实践才是检验真理的唯一标准,当然也是检验学习成果的标准。

在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。通过这次写毕业设计,我感觉有很大的收获:首先,通过学习使自己这学期对课本上的专业知识可以应用于实际,使得理论与实际相结合,加深自己对课本知识的更好理解,同时短学期也锻炼了自己个人的动手能力;能够充分利用图书馆、网络资源去查阅相关资料,增加了许多课本以外的知识,慢慢地能达到学以致用。对我们学生来说,理论与实际同样重要,毕业以后,掌握一定的技术,有一定的动手能力,才是我们今后走向社会所要具备的,这也我们以后在工作中说明自己能力的一个重要标准。

- 27 -

湖南工业职业技术学院学生毕业设计

致谢

这次毕业设计得到了很多老师、同学和同事的帮助,其中李老师对我的关心和支持尤为重要,每次遇到难题,我最先做的就是向李老师寻求帮助,而李老师每次不管忙或闲,总会抽空来给我们大家上课面谈,然后一起商量解决的办法。在这里再次谢谢李老师,您辛苦了!

感谢在整个毕业设计期间帮助过我的同学,特别是潘航同学,他在本次设计中给予我的无私帮助和厚爱,不只一次地帮助我,倾尽了他的所有心血给我提供技术上的指导,在这里再次谢谢潘航同学!和曾经在各个方面给予过我帮助的兄弟们,在大学生活即将结束的最后的日子里,我们再一次演绎了团结合作的童话,把一个比较复杂的,从来没有上手的课题,圆满地完成了。正是因为有了你们的帮助,才让我不仅学到了本次课题所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。

这次毕业设计能够最终顺利完成,归功于各位任课老师三年间的认真负责,使我能够很好的掌握专业知识,并在毕业设计中得以体现。也正是你们长期不懈的支持和帮助才使得我的毕业设计最终顺利完成。最后,向湖南工业职业学院电气工程系的全体老师们再次表示衷心感谢:谢谢你们,谢谢你们这三年的辛勤栽培!

- 28 -

湖南工业职业技术学院学生毕业设计

参考文献

[1] 王琪著. 基于 Proteus和keil软件的水塔水位控制系统设计[J]. 中国科技信

息,2009, 11:140-141.

[2] 秦实宏,徐春晖著.MCS-51单片机原理及应用[M].武汉:华中科技大学出版社,

2010.

[3] 陈森著.水塔水位自动控制系统设计[J].建筑设计,2011, 10(5):111-113.

[4] 袁新娣著.基于单片机的智能水塔水位控制系统设计[N]. 赣南师范学院学

报,2010,12(6).

[5] 杨帆、吴晗平著.传感器技术及其应用[M].武汉:化学工业出版社,2010. [6] 江世明著.基于Protues的单片机应用基础[M].北京:电子工业出版社,2009. [7] 王万良著.自动控制原理[M].北京:高等教育出版社,2008. [8] 史健芳著.智能仪表设计基础[M].北京:电子工业出版社,2007.

[9] Huang, Mei-Zhen, Shi, Long-Zhao ; Wang, Yu-Xing. Development of a new signal

processor for tetralateral position sensitive detector based on single-chip microcomputer[R]. Shanghai: AIP,2006. Page(s):083301 - 083301-5.

[10] 刘涳著. 常用低压电器与可编程序控制器[M].西安:西安电子科技大学出版社,

2011.

[11] 周萌,陈跃东,宋少雷著. 基于PLC 和MCGS的水塔水位监控系统的设计[J]. 南

阳理工学院学报,2013,5(3):11-15.

[12] Pereira, J.M. ; LablM-Escola de Tecnologia de Setubal, Setubal ; Postolache, O.

Advantages of PWM-A/D Conversion Techniques in Smart Sensing Systems[R]. Xi'an: IEEE,2007. Page(s):1-5 - 1-10.

[13] 罗新曼. 基于 AT89C51 单片机的水塔水位控制的设计与实现[N]. 吕梁学院学

报,2013, 4 (3).

[14] 冯博琴,吴宁著. 微型计算机原理与接口技术[M]. 北京:清华大学出版社,2011. [15] 王东峰,王会良,董冠强.单片机C语言应用100例[M].北京:电子工业出版社,

2009.

- 29 -

湖南工业职业技术学院学生毕业设计

附件一

基于水塔水位控制系统的设计与仿真的程序

#include

#define uchar unsigned char #define uint unsigned int sbit RST = P1^1 ; sbit SCK = P1^2 ; sbit SDA = P1^3 ;

sbit P10=P1^0; //将P10定义为P1.0引脚 sbit shuiman=P1^4; //将水满定义为P1.4引脚 sbit sw3=P1^5; //将水位3定义为P1.5引脚 sbit sw2=P1^6; //将水位2定义为P1.6引脚 sbit sw1=P1^7; //将水位1定义为P1.7引脚 sbit P30=P3^0; //将P30定义为P3.0引脚 sbit P31=P3^1; //将P31定义为P3.1引脚 sbit P32=P3^2; //将P32定义为P3.2引脚 sbit P33=P3^3; //将P33定义为P3.3引脚 sbit P34=P3^4; //将P34定义为P3.4引脚 sbit P35=P3^5; //将P35定义为P3.5引脚 sbit P36=P3^6; //将P36定义为P3.6引脚

sbit P37=P3^7; //将P37定义为P3.7引脚 unsigned long k;

uchar i,j,mod,flag,flag1=1 ;//控制定时器动态扫描数码管的第几位,j是定时读取时间。mod是对key1按下次数计数。flag切换闹钟,日期,和周.flag1为闹钟标志位

//uchar code write_addr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 写地址

//uchar code read_addr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分时日月周年 读地址

//共阳数码管码表,表示0-9和-。-表示时分秒的间隔.

/******************************************************************************

函数功能:延时1ms

******************************************************************************/

void delay1ms(void) {

unsigned int i,j; for(i=0;i<10;i++)

- 30 -

湖南工业职业技术学院学生毕业设计

for(j=0;j<33;j++) ; }

/******************************************************************************

函数功能:延时若干毫秒

入口参数:n

******************************************************************************/

void delaynms(unsigned char n) {

unsigned char i; for(i=0;i

/*******************************************************************************

函数功能:水塔水位显示

******************************************************************************/

void Display() {

while(sw1!=0) ;

while(sw1==0) //启动手动水位1 {

P34=0;

P10=0; //开电机

P37=0; //开工作指示灯 P30=1; P31=0; P32=0;

P33=0; //水塔水位显示为1 for(k=1000;k>0;k--) //4秒后关声光报警 {

P35=0; //开报警指示灯 P36=0; //开扬声器 delaynms(1); P35=1; //关报警指示灯

P36=1; //关扬声器

- 31 -

湖南工业职业技术学院学生毕业设计

} P34=1;

while(shuiman==1&&sw2==1&&sw3==1) ;

while(shuiman==0||sw2==0||sw3==0) {

P34=0;

if(shuiman==0) //当水位为最高的按钮按下时 {

P10=1; //关电机

P37=1; //关工作指示灯 P30=0; P31=0; P32=1;

P33=0; //水塔水位显示为4 for(k=1000;k>0;k--) //4秒后关声光报警 {

P35=0; //开报警指示灯 P36=0; //开扬声器 delaynms(1); P35=1; //关报警指示灯 P36=1; //关扬声器 } delaynms(1); delaynms(1); } if(sw3==0) {

P10=0; //开电机

P37=0; //开工作指示灯 P30=1; P31=1; P32=0;

P33=0; //水塔水位显示为3 delaynms(10); }

if(sw2==0) {

P10=0; //开电机 P37=0; //开工作指示灯 P30=0;

- 32 -

湖南工业职业技术学院学生毕业设计

P31=1; P32=0;

P33=0; //水塔水位显示为3 delaynms(10); } } } }

uchar code LED[11] = {

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, };

uchar disbuf[8] = {

0x62,0xa2,0xf7,0x7a,0x28,0xf7,0x7e,0x7e };//定义时间日期的结构类型 struct time {

uchar second ; uchar minute ; uchar hour ; uchar week ; uchar day ; uchar month ; uchar year ; }

current_time ;

#define ctime current_time//定义闹钟的时分秒变量 uchar asec,amin,ahour ; void delay(uint ms) {

uchar i ; while(ms--)

for(i=135;i>0;i--); }

void di() {

uchar i ;

for(i=0;i<40;i++) {

P35 = 0 ; delay(1) ;

- 33 -

湖南工业职业技术学院学生毕业设计

P35 = 1 ; delay(1) ; } }

void didi() {

uchar i ;

for(i = 2; i>0; i--) {

di();

delay(140); }

}//DS1302的写驱动,传入参数为一个地址和数据 void write(uchar addr,uchar dat) {

uchar i ; RST = 0 ; SCK = 0 ; RST = 1 ;

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

SCK = 0 ;

SDA = (bit)(addr&0x01) ; addr >>=1 ; SCK = 1 ; }

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

SCK = 0 ;

SDA = (bit)(dat&0x01); dat >>= 1 ; SCK = 1 ; }

RST = 0 ; }

//DS1302的读驱动,传入参数为一个地址,返回参数为读到的数据 uchar read(uchar addr) {

uchar i,dat ; RST = 0 ; SCK = 0 ;

- 34 -

湖南工业职业技术学院学生毕业设计

RST = 1 ;

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

SCK = 0 ;

SDA =(bit)(addr&0x01); addr>>=1 ; SCK = 1 ; }

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

SCK=0 ; dat>>=1 ; if(SDA) dat|=0x80 ; SCK=1 ; }

RST=0 ;

dat=(dat/16*10)+(dat&0x0f); return dat ; }

//读取DS1302的时间和日期 void read_time() {

ctime.second = read(0x81); ctime.minute = read(0x83); ctime.hour = read(0x85); ctime.day = read(0x87); ctime.month = read(0x89); ctime.week = read(0x8b); ctime.year = read(0x8d); }

//设定时间和日期 void set_time() {

if(!flag) {

write(0x8e,0x00);

write(0x80,((ctime.second/10)<<4|(ctime.second))); write(0x82,((ctime.minute/10)<<4|(ctime.minute))); write(0x84,((ctime.hour/10)<<4|(ctime.hour))); write(0x8e,0x80);

- 35 -

湖南工业职业技术学院学生毕业设计

} else {

write(0x8e,0x00);

write(0x86,((ctime.day/10)<<4|(ctime.day)));

write(0x88,((ctime.month/10)<<4|(ctime.month))); write(0x8a,((ctime.week/10)<<4|(ctime.week))); write(0x8c,((ctime.year/10)<<4|(ctime.year))); write(0x8e,0x80); }

flag1=1 ; }

//刷新显示缓冲区 void refbuf() {

switch(flag) {

case 1 :

disbuf[0] = LED[ctime.day]; //天的个位显示 disbuf[1] = LED[ctime.day/10]; //天的十位显示 disbuf[2] = 0xbf ;

disbuf[3] = LED[ctime.month]; //月的个位显示 disbuf[4] = LED[ctime.month/10]; //月的十位显示 disbuf[5] = 0xbf ;

disbuf[6] = LED[ctime.year]; //年的个位显示 disbuf[7] = LED[ctime.year/10]; //年的十位显示 break ; case 2 :

disbuf[0] = 0xbf ; disbuf[1] = 0xbf ; disbuf[2] = 0xbf ; disbuf[3] = 0xbf ;

disbuf[4] = LED[ctime.week] ; //周显示 disbuf[5] = 0xbf ; disbuf[6] = 0xbf ; disbuf[7] = 0xbf ; break ; case 3 :

disbuf[0] = LED[asec]; //秒的个位显示 disbuf[1] = LED[asec/10]; //秒的十位显示 disbuf[2] = 0xbf ;

- 36 -

湖南工业职业技术学院学生毕业设计

disbuf[3] = LED[amin]; //分的个位显示 disbuf[4] = LED[amin/10]; //分的十位显示 disbuf[5] = 0xbf ;

disbuf[6] = LED[ahour]; //时的个位显示

disbuf[7] = LED[ahour/10]; //分的时位显示 break ; default :

disbuf[0] = LED[ctime.second]; disbuf[1] = LED[ctime.second/10]; disbuf[2] = 0xbf ;

disbuf[3] = LED[ctime.minute]; disbuf[4] = LED[ctime.minute/10]; disbuf[5] = 0xbf ;

disbuf[6] = LED[ctime.hour]; disbuf[7] = LED[ctime.hour/10]; } }

//初始化,定时器定时3ms用来动态扫描数码管显示 void init() {

TMOD = 0X01 ; P34=1;

TH0 = (65536-3000)/256 ; TL0 = (65536-3000)%6 ;

TR0 = 1 ; ET0 = 1 ;

EA = 1 ;

/*write(0x8e,0x00); //第一次写DS1302芯片,不然开始显示乱码,只需要初始化一次就行了,以后就屏蔽掉 write(0x80,0X10); write(0x82,0X10); write(0x84,0X10); write(0x86,0x23); write(0x88,0x07); write(0x8a,0x06); write(0x8c,0x11); write(0x8e,0x80);*/ read_time();

//每次初始化的时候都读取时钟芯片的时间,用来显示。

- 37 -

湖南工业职业技术学院学生毕业设计

}

void main() {

init(); while(1) {

while(shuiman==0||sw3==0||sw2==0||sw1==0) {

Display(); } } }

void time0()interrupt 1 {

TH0=(65536-3000)/256 ; TL0=(65536-3000)%6 ; if(i==8) {

i=0 ; j++; }

//实现调节是闪烁的效果 if(mod|flag) {

if(j==10) {

switch(mod) {

case 1 :

disbuf[0]=0xff ; disbuf[1]=0xff ; break ; case 2 :

disbuf[3]=0xff ; disbuf[4]=0xff ; break ; case 3 :

disbuf[6]=0xff ; disbuf[7]=0xff ; break ; }

- 38 -

湖南工业职业技术学院学生毕业设计

} }

P2=~(0x80>>i); P0=disbuf[i]; i++;

//3msx8x20,大约480ms从DS1302芯片读取一下时间 if(j==20) {

j=0 ; refbuf(); if(mod==0) read_time(); } }

- 39 -

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

Top