毕业设计-自动浇水控制器 - 图文

更新时间:2024-05-09 16:21:01 阅读量: 综合文库 文档下载

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

目 录

第一章 引言..........................................................................................................................1 1.1单片机的概述..........................................................................................................1 1.2单片机的分类及发展..............................................................................................1 1.3灌溉技术的发展简介..............................................................................................2 第二章 设计题目与要求......................................................................................................4

2.1 课程设计要求.........................................................................................................4 2.2 课程设计目的..........................................................................................................4 第三章 设计的方案选择与论证..........................................................................................5

3.1 整体设计框架.........................................................................................................5 3.2 系统硬件的选择......................................................................................................5 3.3最终方案决定及电路设计......................................................................................6 第四章 系统硬件电路的设计..............................................................................................7

4.1 AT89C51的介绍......................................................................................................7 4.1.1 内部结构......................................................................................................7 4.1.2 引脚说明......................................................................................................8 4.2 显示模块...............................................................................................................11 4.2.1 显示功能及实现........................................................................................12 4.2.2 数码管介绍................................................................................................12 4.3 时钟电路及复位电路的设计...............................................................................14 4.3.1 时钟电路....................................................................................................14 4.3.2 复位电路....................................................................................................16 4.4 键盘输入模块.......................................................................................................16 4.5 浇水模块设计.......................................................................................................17 4.5.1 ULN2803的介绍........................................................................................17 4.5.2 浇水功能的实现........................................................................................18 4.6 电源的设计...........................................................................................................19 第五章 系统的程序设计....................................................................................................21

5.1 系统时间显示.......................................................................................................21 5.2 键盘控制时间设置...............................................................................................22 5.2.1 按键校对系统时间....................................................................................22 5.2.2 按键设置浇水时间....................................................................................23

5.3 浇水执行程序框图...............................................................................................24 5.4 主程序....................................................................................................................25 第六章 仿真........................................................................................................................39

6.1 仿真说明...............................................................................................................39 6.2 仿真电路图............................................................................................................39 第七章 结论........................................................................................................................41 致谢......................................................................................................................................42 参考文献..............................................................................................................................43 附录 电路图

烟台大学毕业论文(设计)

第一章 引言

目前,农业、工业、生活、军事等各个方面都向自动化、智能化、数字化发展。为了适应时代的发展电子技术迅猛发展。数字化、智能化、自动化的实现方式多种多样,从而产生了很多的设计工具。单片机就是其中之一,它正朝着多品种和高性能发展,正在进一步向着COMS化、小体积、低功耗、高性能、大容量和外部电路内装化等多个方向发展。卓越的性价比受到了设计者们的欢迎。

随着农业的规模化、系统化,传统的管理方法需要大量的人力而且不能及时。为了满足更高效更高产,并提高管理水平。本文将介绍一个可以自动定时、多路浇水、定浇水时间的系统,它主要基于51单片机来设计,并将随着社会生活的进步、人们

对效率的要求,将会得到大量的应用和不断的完善。

本论文中将会应用单片机等电子技术,实现自动浇水控制。

1.1 单片机的概述

为了适应社会发展的需求,微型计算机不断地更新换代,新产品层出不穷。在微型计算机的大家庭中,几年来单片微型计算机异军突起,发展极为迅速。

单片微型计算机(Single-Chip Microcomputer)简称单片机。它是微型计算机的一个重要分支,也是一种非常活跃且具生命力的机种。特别适用于控制领域,故又称微控

通常单片机由单块集成电路芯片构成,内部包含有计算机的基本功能功能部件:中央处理器(Central Processing Unit,CPU)、随机存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、定时/计数器及I/O(Input/Output)接口电路等部件。因此单片机只需要与适当的软件及外部设备相结合,便可成为一个单

片机控制系统。

它的特点是:高性能、高速度、体积小,价格低廉,稳定可靠,应用广泛。

制器(Microcontroller)。

1.2 单片机的分类及发展

20世纪80年代以来,单片机有了新的长足发展,各个半导体器件厂商也相继推出自己的产品。到目前为止,市面上出售的单片机品种已达60多个系列,600多个品种。如果按照CPU对数据处理的位数来分,通常可以把单片机分为4位的单片机、8位的单片机、16位的单片机、32位的单片机四类。它的产生和发展过程也经历了

相应的四个阶段。

1

烟台大学毕业论文(设计)

第一阶段(1970-1974)为4位的单片机的阶段。这种单片机的特点为:价格便宜并且控制功能强,片内含有多种I/O接口,有的根据不同用途还配有许多专用接口,丰富的I/O功能大大增强了四位单片机应用于录音机、摄像机、电冰箱、电视机、洗衣

第二阶段(1974-1978)为低中档的8位单片机的阶段。它是八位单片机的早期产品,以Intel公司的MCS-48系列单片机为代表产品,这个系列的单片机在片内集成八位CPU、并行I/O口、8位定时/计数器、RAM和ROM等,中断处理较简单,片

内RAM和ROM容量较小,且寻址范围不大于4KB。

第三阶段(1978-1983)为高档的8位单片机阶段。这类单片机在低、中档基础上发展起来的,其性能有明显额提高。还是以Intel公司的MCS-48系列单片机为代表,在片内还增加了串行接口,有多级的中断处理系统,还有16位定时/计数器,片内RAM和ROM容量也增大了,寻址范围已经可达64KB,有的片内还加有A/D转换接口。这类单片机功能强大,应用领域广阔,是现在各类单片机中应用最多的一种。

第四阶段(1983-现在)为8位额单片机巩固发展的阶段和16位单片机、32位单片机推出的阶段。这个阶段特点是:一方面不断的发展16位的单片机、32位的单片机和一些专用的单片机。近年来,各个计算机厂家已进入了高性能的32位单片机的研制和生产阶段,32位单片机除了具有更高的集成度以外,主振频率已经达到20MHz,这使32位的单片机的数据处理速度可以16位单片机快得多,性能比8位、16位单

而需要说明的是,单片机的发展虽然经历了4位、8位、16位三阶段,但4位、8位、16位单片机仍然各有其应用领域,比如4位单片机在简单家用电器、高档玩具中还有应用,而8位单片机在中、小规模应用的场合仍占主流的地位,16位的单片机在比较复杂的控制系统中才有应用,32位单片机因控制领域对它的要求并不十分

正是由于单片机具有上述显著的特点,使得单片机应用的范围也日益扩大。单片机的应用打破了人们传统的设计思想,原来很多用模拟电路、脉冲数字电路和逻辑部件来实现的功能,现在均可以使用单片机。使用软件来实现。使用单片机具有体积小、可靠性高、性价高和容易产品化的优点。

机等产品。

片机也更加优越。

迫切所以32位单片机在我国的应用并不多。

1.3 灌溉技术的发展简介

生命之起源,水为必然条件。没有了水,地球上的生命将会枯竭。人文明之数千年的历史,为水而奋斗可以说是非常重要的篇章。比如我国古代的灵渠、郑渠和都江

20世纪以前,人类经过了数个世纪的探索,学会了拦河蓄水,筑渠引水和开畦

2

堰,埃及尼罗河两岸的历史非常悠久的灌溉工程都是非常好的例证。

烟台大学毕业论文(设计)

灌溉的技术。但水的利用效率比较低下,限制了灌溉的面积扩大。怎样生产大量的粮食,来为飞快增长的人口提供粮食,如何提高水的利用率已经成了20世纪的一大难题,而且伴随着劳务成本大的迅速提高,怎样节省人力来消减劳务成本也成了亟待解 我国从70年代开始引进喷灌、滴灌技术,80年代中期曾一度得到迅速发展。但因为经济及技术落后,不几年即纷纷下马。进入90年代中期以来,我国充分意识到我国水资源的短缺问题,重新积极推广节水技术。经过数年努力,已取得长足进步。

尽管各种节水技术已经发展的很成熟,但是还不能满足的是智能化的定时浇水,要两者结合才能更自动化及智能化。限于本论文的篇幅,这里只设计自动系统,有八路出水,而采用什么节水设备,可根据实际应用场合自行选取,只需对接到出口即可。

决的问题。

3

烟台大学毕业论文(设计) 第二章 设计题目与要求

2.1 课程设计要求

设计一种自动浇水控制器,可以实现设定每周内任意几天需要浇水,每天何时开始浇水,每路每次浇水多长时间,八路依次自动浇水。状态显示在平时模式现实当前时间及星期几,从左至右,前两位显示时,中间两位显示分,最后一位显示星期。时与分之间两个LED为秒闪指示,每秒闪动一次。制作出适合系统运行的电源。

2.2 课程设计目的

(1) 巩固、加深和扩大单片机应用的知识面。提高综合及灵活运用所学知识解决

实际控制的能力;

(2) 培养针对课题需要,选择和查阅有关手册、图标及文献资料的自学能力,提

高组成系统、编程、调试的动手能力;

(3) 学会对课程设计方案的分析、选择、比较、熟悉系统开发、研制的过程,软

硬件设计的方法、内容及步骤;

(4) 掌握计数器、加法器、LED的使用; (5) 掌握数码管显示电路的应用与按键设置。

4

烟台大学毕业论文(设计) 第三章 设计的方案选择与论证

3.1 整体设计框架

图3-1是本次设计的整体系统框图,本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,高性能等优点;显示模块有三个数码管,CD4511译码器构成,使用动态扫描的显示方式对数字进行显示;按键模块位五个独立按键构成,分别设定时、分、星期、定时、定天;电源电路是为了给AT89C51提供稳定的工作电压而设计;时钟电路采用晶振提供时钟频率,再结合编程来实现时间的显示与设定。

键盘模块 时钟电路 复位电路 显示模块 浇水输出模块 AT89C51 电源模块

图3-1 系统整体设计框图

3.2 系统硬件的选择

(1)控制系统模块的方案选择和论证 方案一:采用89C2051芯片作为硬件核心,有2KB的存储空间,虽然加上端口扩展,键盘不做独立式的,也可以满足电路要求,但是它无法扩展ROM,也不能用C语言编程,因为C的第一条指令是跳转,会浪费很多空间,因此导致空间不够,就只能用汇编语音。 并且2051的P3.7在芯片的引脚上没有,只在内部有用,P1.0,P1.1

方案二:采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KB ROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,有40个

5

没有内部上拉,要用做输入输出,就需要外接上拉。

烟台大学毕业论文(设计)

引脚,完全满足电路要求,具有电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片进行多次拔插,所以不会对芯片造成损坏。

结合两者优缺点考虑,在本设计中选择采用AT89C51作为主控制系统。

(2)显示模块选择方案和论证

方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,如果用在显示数字显得太浪费,且价格也相对比较高,所以

方案二:采用LED液晶显示器,液晶显示器的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中也不

方案三:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合在本设计中选择采用了LED数码管作为显示。

(3)时钟电路的选择方案和论证

方案一:采用DS12887时钟芯片实现时钟,DS12887芯片是一种高性能的时钟芯片,可自动对秒、分、时、周、月、年以及闰年补偿的年进行计数,虽然精度高,

但是成本相对高,本设计不需要如此显示精度及详细度。

方案二:采用外部晶振提供时钟频率,直接采用单片机定时计数器提供秒信号,使用程序实现星期、时、分、秒的计数。采用此种方案可以减少芯片的使用,节约成

在本设计中直接采用方案二的时钟电路为电路提供时钟控制模块。

(4)键盘模块的选择方案和论证

方案一:采用独立式的非编码键盘模式,在此种连接方式中,每个按键都是相互方案二:采用行列式的非编码键盘,它是一种把所有按键排列成行列矩阵的键盘,所以,一个M×N的行列式的非编码键盘只需M条行线以及N条列线,共要占用M+N

在本设计中采用方案一的键盘来对现实电路,和浇水设置进行设定。

不采用此种作为显示。

用这种作为显示。

适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

本,适用更多的用户需求。

独立的,均需占用CPU的一条I/O输入数据线。

条单片机的端口线,本设计中按键只有五个,因此不采用此方案。

3.3 最终方案决定及电路设计

综上各方案所述,对此次设计的方案选定:采用AT89C51作为主控制系统;LED数码管动态扫描作为显示系统;采用单片机自身的定时计数器作为时钟电路;系统电路图见附录。

6

烟台大学毕业论文(设计)

第四章 系统硬件电路的设计

硬件电路是系统的重要部分,在本次设计中主要是以AT89C51为核心控制器。外加一些控制电路来实现本系统的基本功能。下面分别介绍各个控制电路的功能及工作原理。

4.1 AT89C51的介绍

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的CMOS8位微处理器,简称单片机。它低电压、高性能。该器件采用ATMEL高密度肥肉非易失存储器制造技术来加工的,并且可以与工业标准的MCS-51指令集和输出管脚相兼容。因为将多功能8位CPU和闪烁存储器结合在一个芯片中,使得ATMEL的89C51成为一种高效的微控制器 89C单片机,为许多嵌入式的控制系统完美的提供了一种不仅灵活性高而且价廉的方案。 4.1.1 内部结构

AT89C51的内部结构框图如图4-1所示

图4-1 89C51内部结构框图

7

烟台大学毕业论文(设计)

89C51单片机基本组成包括有:

? 片内数据存储器RAM有128B ? 片内程序存储器Flash ROM 有4KB ? 可寻址片外64KB的RAM ? 一个全双工通用异步串行接口UART

? 一个8位的微处理器

? 21个特殊功能寄存器SFR

? 可寻址片内外统一编址的64KB的ROM

? 4个8位并行I/O接口(P0—P3)

? 两个16位的定时器/计数器

? 五个中断源、两个优先级的中断控制系统 ? 片内振荡器和时钟产生电路 AT89C51主要部件也可以划分为CPU、存储器、I/O端口、定时器/计数器和终端系统等五部分。CPU包括运算器、控制器;存储器包括程序存储器、片内数据存

储器、片外数据存储器。 4.1.2 引脚说明

AT89C51共含有40个引脚,分为端口线、电源线、控制线三类。如图4-2所示:

? 具有位操作功能的布尔处理机及位寻址功能

图4-2 AT89C51封装和引脚分配

8

烟台大学毕业论文(设计)

1. 电源引脚(2条)

② GND(20脚):接地端,接地端。

① XTAL1和XTAL2:片内振荡电路输入线。 XTAL1(19脚):片内振荡电路反相放大器输入。 当采用内部时钟时,片外连接石英晶体和微调电容,产生原始的振荡脉冲信号。采用外部时钟时,XTAL1输入外部时钟脉冲信号, XTAL2悬空。相应电路如图4-3所示。

① Vcc (40脚):电源端,接+5V电源。

2. 控制引脚(6条)

XTAL2(18脚):片内振荡电路反相放大器输出。

图4-3 89C51的晶振连接图 高电平有效,保持两个机器周期高电平时,完成复位操作。

③ALE/PROG (30脚) :地址锁存允许输出端/编程脉冲输入端 。 正常时,连续输出振荡器频率的1/6正脉冲信号。访问片外存储器时:作为锁存P0口低8位地址的控制信号。对89C51片内 ROM编程写入时:作为编程脉冲输入

④PSEN (29脚): 外部程序存储器读选通输出信号 。 访问片外ROM时,输出负脉冲作为读ROM选通.常连接到片外ROM芯片的输出

⑤EA/Vpp (31脚): 外部程序存储器地址使能输入/编程电压输入端。 平常,接“1”时,CPU访问片内4KB的ROM,当地址超4KB时,自动转向片外

——————

————

②RST (9脚) : 复位信号输入端。

端。

允许端(OE)作外部ROM的读选通信号。

ROM中的程序。当接“0”时,CPU只访问片外ROM.

9

烟台大学毕业论文(设计)

第2功能Vpp 对89C51编程时,编程电压输入端。 3. 端口线(4×8=32条) 4个8位的并行输入/输出端口,共32个引脚。作为通用输入/输出端口,P0、P2

和P3端口又各自有第2功能。 准双向口:作输入时要先对锁存器写“1”. P0端口(P0.0—P0.7,第39—32脚): P0口作通用I/O口,是一个准双向口。地址为80H。输出漏极开路,可驱动8个74LS类型的TTL门电路。分时复用的地址/数据总线:外部扩展时,MOVX或MOVC指令):P0口首先输出低8位地址,由地址锁存器(74LS373)在ALE号作用下锁存 (A0-A7)。然后P0口就作为双向的数据总线 (D0-D7) 使用。P2口输出高8位地

址(A8-A15). P1端口(P1.0—P1.7,第1—8脚): 8位准双向口,只作通用输入/输出口使用。输出可以驱动4个74LS类型的TTL门电路。P1口作为一个特殊功能寄存器,和内部RAM统一编址,地址为90H。它可

P2端口(P2.0—P2.7,第21—28脚): P2口作通用I/O口 : 是一个准双向口。地址为A0H。可驱动4个74LS类型的TTL门电路。P2口作高8位地址总线:外部扩展时,( MOVX 或 MOVC指令): P0口分时复用作;低位地址(A0-A7) 数据总线(D0-D7) 用。P2口输出高8位地址

A8-A15. P3端口(P3.0—P3.7,第10—17脚):

P3口作通用I/O口 : 是一个准双向口。地址为 B0H。输出可驱动4个74LS类型的TTL门电路。

(2)P0、P2、P3端口的第二功能 P0端口:在CPU访问外部存储器或I/O接口时,P0口分时提供低8位地址(A0-A7)和8位数据(D0-D7)总线。这时,需要一个8位锁存器,利用ALE(地址锁存允许)来锁存 P2端口:在CPU访问外部存储器或I/O接口时,P2口提供高8位地址(A8-A15)

P3端口:在CPU访问外部存储器或I/O接口时,P3口提供读、写控制总线信号。

10

(1)通用输入/输出端口

进行字节操作,用直接寻址方式,也可以按位操作,用位寻址方式。

P0口低8位地址信号。

的总线信号。

还提供串行通信、外部中断、计数器的外部计数输入信号等。如表4-1所示。

烟台大学毕业论文(设计)

表4-1 P3口的第二功能

口线 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 信号 RXD TXD INT0 INT1 T0 T1 WR RD 功能 串行口数据输入(接收数据) 串行口数据输出(发送数据) 外部中断0输入 外部中断1输入 定时器0的外部输入(计数输入) 定时器1的外部输入(计数输入) 外部数据存储器写选通控制输出 外部数据存储器读选通输出控制

4.2 显示模块

本设计的显示模块有三个LED数码管及两个发光二极管组成,数码管包括两个二位数码管及一个一位数码管,皆为共阴极显示,其中两个二位数码管分辨用于现实小时及分钟,一位的数码管用于现实星期几,两个发光二极管在时与分之间,每秒闪

动一次。

显示部分的电路图如图4-4所示:

+5V16LED1134712658LTBIABCDLEGNDVCCLED12aabfgcdbabcdefgdpafgbfagcdbabcdefgdpLED13afedgcbQAQBQCQDQEQFQG1312111091514R21R22R23R24R25R26R27R286060606060606060abcdefgdpfgedceedceCD4511C130pfQ18550Q28550Q38550Q48550Q58550C230pf 图4-4 显示模块电路

11

烟台大学毕业论文(设计)

4.2.1 显示功能及实现

显示模块可以分为三个模式,分别为平时模块、设定模块浇水模块。

用于在平时不进行设定时显示当下时间与星期。

在要对浇水的时间及时长进行设定时现实需要设定的每天开始浇水的时间以及每路浇水的时长,设定每天浇水时刻时,星期位显示“8”,分别按动按键设定小时与分钟,此时两个秒LED9和LED10还是正常闪的。

在对每路浇水时长进行设置时,LED9和LED10是不亮的,星期位显示“9”,时与分的四位都表示时长,范围为0~9999秒。

上述功能的实现皆通过编程来完成,由时钟电路提供频率,单片机内部的定时计数器在经过一秒后在P2.7端口输出一个高电平,LED9和LED10导通,变亮;随即P2.7端口在下一个频率时就变回低电平,LED9和LED10就熄灭,这样在每个秒周期LED9和LED10将会闪动一次。

显示功能的程序实现将在下一章软件设计中介绍。 4.2.2 数码管介绍

本设计的 显示模块采用两个二位数码管与一个一位数码管来显示,都为共阴极连接方式。通过CD4511的译码输入到阳极端,阴极由P2.1-P2.6控制,其中为低电平时,数码管选通,因为是高频动态扫描显示,并且程序加以视觉余辉的延时程序,

①平时模块

②设定模块

便可以完成所需要的显示。下面介绍CD4511与数码管的具体功能。

34712658LTBIABCDLEGNDQAQBQCQDQEQFQGVCC131211109151416 图4-5 CD4511的引脚图 (1)CD4511的简介

CD4511的引脚图如图4-5所示:

12

这个片子是一个用来驱动共阴极LED数码管显示器的BCD码-七段码译码器。

烟台大学毕业论文(设计)

CD4511引脚功能介绍:

? BI(4脚):是消隐输入控制端,当BI=0时,不管其他输入状态如何,七段译? LT(3脚):为测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入

ABCD的状态如何,七段均发亮,显示数字“8”,它是用来检测数码管是否损坏。 ? LE:所存控制端,LE=0时,才允许译码输出。当LE=1时,译码器是锁存保

持状态,译码器输出将会被保持在LE=0时的数值。 ? QA、QB、QC、QD、QE、QF、QG:为译码输出端,输出为高电平1有效。 因为数码管电压一般用0.7V而电流最大15mA,所以可计算限流电阻R: U?U15V?0.7VR? ? ? 287 ? (4-1)

I115mA

而本设计以动态扫描的方式显示,那么每位的显示时间在一个扫描周期中实际只占1/5,数码管得到的平均电流也只有点亮时驱动电流的1/5,所以本设计中限流电阻

R21-R28选用60Ω的电阻。

作为本设计显示模块的表现部分,选择了两个二位数码管和一个一位数码管,都为共阴极连接,输入端a,b,c,d,e,f,g与CD4511的输出端a,b,c,d,e,f,g相对应连接,小数点dp连接到89C51的P2.0端口,由于采用高频动态扫描于视觉余辉的效果,便可以达到所要求的显示效果,又由于阴极都分别连在P2口的端口上,这些端口负责选通小时高低位、分钟高低位、星期位的显示。P2.1-P2.6信号为0时,选通。下面简

码管均处于熄灭(消隐)状态,不能显示数字,因此正常时直接接高电平。

? A、B、C、D:为BCD码输入端。

(2)LED数码管的简介

单的介绍二位数码管。二位数码管的引脚图如下所示:

121078569abfcdeefgdp3agcdbfagcdbe

图4-6 二位数码管的引脚图

两个数字的阳极都连接到CD4511相应的输出,而3,4脚则负责选通那个数字显另外,为了使数码管更亮一些,此处选用五个PNP三极管起放大作用,型号为

13

示。

4

烟台大学毕业论文(设计)

普通高频放大PNP8550三极管,在秒信号的放大上,因为是P2.7高电平导通,所以选用普通低频放大NPN9013型号的三极管,为保护三极管,将采用五个限流电阻接在P2.1-P2.6与三极管之间。通常选用1k-10k之间,本设计采用1k的电阻。与NPN之间因为要有0.7的压差,所以选用更大的电阻此处选用2.2kΩ的电阻。三极管到两

个秒信号之间,仍用300Ω的做保护发光二极管。

由于89C51P0口内部没有上拉电阻,P0口是一组8为漏极开路双向I/O,没有电源不能输出高电平,不用上拉电阻是不能工作的,所以P0口要加上拉电阻。这样还

能让输出高电平信号更稳定,根据一般规律,此处R17-R20选用1kΩ的上拉电阻。

4.3 时钟电路及复位电路的设计

AT89C51单片机各功能部件的运行都是以时钟控制信号为基准,有条不紊的一排一排的工作,因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常见的时钟电路设计有两种方式,一种是内部时钟方式,另一种是外部时钟方式。 4.3.1 时钟电路 (1)内部时钟方式

89C51内部有一个用于构成振荡器的高增益反向放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2,这两个引脚跨接石英晶体振荡器(简称晶振)和瓷介电容,就构成一个稳定的自己振荡器,图4-7为89C51内部时钟方式的振荡器电路。

图4-7 89C51时钟方式的振荡电路

电路图中的电容C1和C2典型值通常选择为30pF左右。对外界电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、起振的快速性和振荡器的稳定性。晶振的振荡频率范围通常是选在1.2MHz-12MHZ之间,本设计选用12MHz的晶振。晶振的频率会越高,则系统的时钟频率也就越高,单片机的运行速度也就越高。但是反过来运行速度快对存储器的速度要求也就越高,对印刷电路板的工艺要求也相

14

烟台大学毕业论文(设计)

应的高,即要求线间的寄生电容要小;晶振和电容要尽可能安装的跟单片机芯片靠近, (2)外部时钟方式

外部时钟方式是使用外部振荡脉冲信号,常用于多片89C51单片机同时工作,以便于多片89C51单片机之间的同步,一般为低于12MHz的方波。

外部时钟源直接接到XTAL2端,通过XTAL2端输入到片内的时钟发生器上。电路如图4-8所示。由于XTAL2的逻辑电平不是TTL,故建议接一个4.7-10kΩ的上拉电阻。

本系统只用到一片单片机芯片,不存在同步的问题,因此采用内部时钟方式。

这样可以减少寄生电容,能更好的保证振荡器稳定、可靠地工作。

图4-8 外部时钟方式振荡电路

4.3.2 复位电路 计算机在启动时,系统进入复位状态。在复位状态,CPU和系统都处于一个确定的初始状态或成为原始状态,在这种状态下,所有的专用寄存器都赋予默认值。

单片机复位电路包括片内、片外两部分,片外复位电路通过引脚加到内部复位电路上,内部复位电路在每个机器周期S5P2对片外信号进行一次采样,当RST引脚上出现连续两个机器周期的高电平时,单片机就可以完成一次复位。外部复位电路就是为内部复位电路提供两个机器周期以上的高电平而设计的,AT89C51单片机通常采

上电自动复位电路在通电瞬间,在RC电路充电过程中,RST端出现正脉冲,从而使单片机复位。

按键手动复位电路可分为按键电平复位及按键脉冲复位两种,按键电平复位是将复位端通过电阻与Vcc相连,而按键脉冲复位电路是利用RC微分电路产生的正脉冲

来达到复位目的。

本设计采用按键脉冲复位,电路如图4-9所示。

用上电自动复位和按键手动复位两种方式。

15

烟台大学毕业论文(设计)

图4-9 复位电路

根据只要电容充电时间大于两个机器周期以上的时间,就能复位的原则,t=RC(其中电阻单位欧姆,电容单位法拉,时间单位秒),选取电容为22uf,电阻R2为200Ω。其中电阻R1为了保护电容而加入,5V本已小于C3的击穿电压,故在此,R1可选用常用的1kΩ的电阻即可。

4.4 键盘输入模块

本设计采用的是独立式非编码键盘的接口电路,连接如图4-10所示。

图4-10 键盘电路

图中的每个按键均和89C51的P3口中一条相连。若没有按键按下时,89C51从P3口读得引脚电平平均为“1”(+5V); 若某一按键被按下,则该键所对应的端口线变为低电平。单片机定时对P3口进行程序查询,即可发现键盘上是否有按键按下以及哪个

16

烟台大学毕业论文(设计)

按键被按下。从而通过程序执行相应的操作。

这五个按键实现的功能分别如下:

? AN1按下,对系统时间小时位进行调整; ? AN2按下,对系统时间分钟位进行调整; ? AN3按下,对系统时间星期位进行调整;

? AN4按下,一次时,对浇水时间进行设定,再通过AN1和AN2对需要的小时与分钟进行设定;AN4按下两次时,为对浇水时长进行设定,范围为0~9999,AN1调整千位和百位,AN2设定十位和个位;按下三次回到正常系统显示; ? AN5按下,是为了点亮星期位的小数点,表示此天不浇水,其在AN3调整到不需要浇水的天时按下,来点亮此天的小数点位。

虽然89C51的P3口内有上拉电阻,可以不用外界电阻,但是为了增强抗干扰的能力,本设计在按键电路上都接上一个上拉电阻,大小仍按习惯选用1kΩ即可。

4.5 浇水模块设计

作为系统的最终执行模块,本设计选取实现八路自动浇水的功能,在系统设置好每天浇水时间与每路浇水时长后,定时器将会在设定时间开始浇水,每路依次浇水,浇水的出口,是采用浇灌还是喷灌,由用户根据具体情况自行选用安装,水量结合设置的浇水时长与选用的水源及管道大小来具体设置。 4.5.1 ULN2803的介绍

浇水开关采用继电器的设计,因此选用了一个ULN2803,它是驱动用集成电路,片内有8路驱动器。脚1、2、3、4、5、6、7、8分别是这8路驱动器的输入,输入信号可直接是TTL或CMOS(5.0V)信号。脚18、17、16、15、14、13、12、11分别是8路驱动器输出。输出是OC门,集电极VCE=50V,驱动电流500MA。可直接驱动灯或感性负载继电器等。常连接在阵列非常适合逻辑接口电平数字电路(例如TTL,CMOS或PMOS上/ NMOS)和较高的电流/电压,如电灯、电磁阀、继电器、打印锤或其他类似的负载,广泛的使用范围:计算机、工业和消费应用。

片内8路输出都代有续流二极管,从10脚并联接出。作用是为了防止继电器断开时产生的反向高压损坏89C51。使用时9脚接地,驱动继电器时10脚接继电器驱动正电源。例:第一路1脚输入,那么18脚就是输出,驱动继电器,继电器线圈一端接继电器电源正,继电器线圈另一端接18脚。1脚加高电平,继电器就吸合。

其引脚图如图4-11所示:

17

烟台大学毕业论文(设计)

181716151413121110123456789VCCGND

图4-11 ULN2803引脚图 引脚功能如下:

1-8引脚:输入端 11-18引脚:输出端 9引脚:地端 10引脚:电源+

10脚接正极,9脚接地,1进18出,2进17出,3进16出,以此类推共8路 。 4.5.2 浇水功能的实现

通过上述ULN2803的介绍,它是一个反向器的作用,设定的浇水的一天到了浇水时刻时,P1.0-P1.7输出10000000,ULN2803的1口输入高电平,相应的18脚输出低电平,继电器K1得点,一路开始浇水,显示模块显示浇水倒计时,倒计时为0000后,P1.0-P1.7输出01000000,从而使第二路开始浇水,以此类推,完成八路自动浇水后,重新显示当前时间。

浇水电路如图4-12所示。其中二极管起到在ULN2803输出电压发生波动时,保护继电器的作用,所以选择普通的整流二极管H1N4001,发光二极管是在继电器导通时随之导通显示本路浇水,其中R9-R16为发光二极管的限流电阻,在上述计算中取大于287Ω的就可,本处选用1kΩ的作为限流电阻。

18

烟台大学毕业论文(设计)

VD14001+5VK1R91kVD2400118K2R101kVD34001LED21716151413K3R111kVD44001LED31211LED1+5V1012345678ULN2803 图4-12 浇水控制电路

4.6 电源的设计

稳压电源是单片机系统的重要组成部分,它不仅可为系统提供多路电源,还直接影响到系统的技术指标和抗干扰性,是电路设计中非常关键的一个环节。直流电源电路一般由电源变压器、整流滤波电路及稳压电路所组成。如图4-13所示。

图4-13 直流稳压电源基本组成电框图

整流电路的作用是将交流电压U1变换成脉动的直流U2,它主要有半波整流、全波整流方式,可以由整流二极管构成整流桥堆来执行,常见的整流二极管有1N4007、1N5148等,本设计选用1N4007,桥堆有RS210等。滤波电路作用是将脉动直流U2滤

19

9烟台大学毕业论文(设计)

除纹波,变成纹波小的U3,常见的电路有RC滤波、KL滤波、∏型滤波等,常用的选RC滤波电路。

其中它们的关系为:

Ui?nU1 (4-2) 其中,n分别为变压器的变比。

U2?(1.1~1.2)U1 (4-3)

每只二极管或桥堆所承受的最大反向电压URM

RC滤波电路中,C的选择应适应下式,即RC放电时间常数应满足:

RC=(3~5)T/2 (4-5)

式中T为输入交流信号周期;R整流滤波电路的等效负载电阻。稳压的作用是将滤波电路输出电压经稳压后,输出较和稳定的电压。常见的稳压电路有三端稳压器、串联式稳压电路等。电源电路图如图4-14所示。

11 URM?2U1 (4-4)

LM7805VinGNDVout3+5V220V50Hz8V42C42000uF1N4007×43C50.1uF2C6100uFC70.1uF 图4-14 电源电路

一个稳压电源输出电压和最大输出电流决定于所选择的三端稳压器。而三端稳压器是一种标准化的、系列化的通用的线性稳压电源集成电路,本设计中采用+5V电压所以选用LM7805稳压器。它具有很好的电压输出精度和稳定性,内部有过流、热过载及输出晶体管安全区提供保护功能,电路使用起来安全可靠。220V的交流电压通过变压器变化为交流的低压,然后再经过桥式整流电路的整流和滤波电容C4滤波阶段,将会在LM7805的Vin和GND两端形成一个并不是十分稳定的直流的电压,该电压经常会因为市电压的波动或负载的变化而发生相应的变化。此直流电压在经过LM7805的稳压和电容C6的滤波作用后便在稳压电源的输出端产生了一个精度高且稳定性好的直流输出电压,这个最终的稳压电压可作为TTL电路或者单片机电路的电源。

20

烟台大学毕业论文(设计) 第五章 系统的程序设计

系统软件部分的设计,是实现系统功能的核心部分,通过编程来完成所需要的各种功能,是单片机学习的基础。为了更好的实现编程逻辑,就要先画程序框图来帮助理清,下面将分几个模块的程序框图来了解程序的逻辑。

5.1 系统时间显示

本模块将用到定时控制器,本设计通过定义TINER0中断产生50ms定时,由flag累计定时,20个为1s。程序框图如图5-1所示。

flag=20 ? 否

否 秒=60? flag=0 开始 是 flag加一 秒加 1 , LED9 、 10 闪 是 秒清零, 分加一

否 是 分=60? 分清零,时加一 否 时=24?

是 时清零,星期加一 否 是 星期=8? 星期归一 图5-1 正常模式下系统时间显示程序框图

21

烟台大学毕业论文(设计)

5.2 键盘控制时间设置

系统键盘模块共设计AN1-AN6六个按键,AN1-AN3负责时间校对,结合AN4、AN5按实现浇水时间设置,AN6为复位按键。框图分为校对系统时间和设置浇水时间两个模块来介绍。 5.2.1 按键校对系统时间 是否有按 是 键按下? 否 AN1 否 按下? 正常模式,等待按键按下 是 小时加 1 AN2 否 AN3 是 否 按下? 小 时 否 分钟加 1 =24 ? 是 是 AN6 否 星期加1 按下? 按下? 分 钟 否 星 期 否 =8 ? 分钟清零 小时清零 =60 ? 是

初始化系统时间 是 星期归 1 图5-2 正常模式下按键校对系统时间程序框图

22

显示系统时间 烟台大学毕业论文(设计)

5.2.2 按键设置浇水时间 是否有按 否 键按下? 是 否 是 AN3 按下? 否 AN4 否 是 星期加1 AN4三次? 显示系统时间 正常模式,等待按键按下 按下? 是 否 否 一次? 两次? 是 是 否 AN5 按下? 设置浇水时间 设置浇水时长 AN1 否 AN1 否 是 按下? 按下? 按下? 按下? AN2 否 AN2 否 点 亮 是 是 小数小时加前两位 点,此 1 , 并执 是 是

加1, 日不行校时后两位分钟加并执行 浇水。 的24加1,1,并执100进 进位。 并执行行校时位。 100进的60 位。 进位。

图5-3 设置模式下按键调整浇水时间程序框图

23

烟台大学毕业论文(设计)

5.3 浇水执行程序框图

正常模式,显示时间 是 是否到时 ? 是 今日浇水 ? 1路浇水,显示倒计时 否 否 是 否 倒计时重置 倒计时减1 倒计时=0? 2路浇水,显示倒计时 是 否 倒计时重置 倒计时减1 倒计时=0? 3路浇水,显示倒计时 是 否 倒计时重置 倒计时减1 倒计时=0? 4路浇水,显示倒计时 是 否 倒计时重置 倒计时减1 倒计时=0? 5路浇水,显示倒计时 是 否 倒计时重置 倒计时减1 倒计时=0? 6路浇水,显示倒计时 是 否 倒计时重置 倒计时减1 倒计时=0? 7路浇水,显示倒计时 倒计时重置 =0? 否 是 倒计时显示系统时间 8路浇水,显示倒计时 是 否 倒计时重置 倒计时=0? 返回 图5-4 浇水执行程序框图

24

倒计时减1 倒计时减1 烟台大学毕业论文(设计)

5.4 主程序

/*

系统一共有两套时间体系:系统时间(定时器控制)和浇水开始时间 系统时间是由Timer0 中断产生 */

//#include \#include \

//=============================================================== //-------------------------宏定义和位定义------------------------

//===============================================================

//-------端口定义---------- #define SEG P0 // 数码管数据口 #define LED P1 // 仿真时LED灯数据口 实际是浇水控制口 #define KEY_DATA P3 // 按键接口

//-------位定义---------- sbit DP =P2^1; // 小数点 sbit TIME_1 =P2^2; // 时 高 sbit TIME_2 =P2^3; // 时 低 sbit TIME_3 =P2^4; // 分 高 sbit TIME_4 =P2^5; // 分 低 sbit TIME_5 =P2^6; // 星期几 sbit TIME_6 =P2^7; // 秒闪烁

//-------宏定义----------

#define KEY_NULL 0xff #define TIME 50000 //TIMER0一次定时50ms #define uchar unsigned char #define uint unsigned int

//=============================================================== //--------------------------全局变量-----------------------------

//=============================================================== uchar flag=0; // 定时器50Ms标志 uchar SysSecond; // 系统时间 秒 uchar SysHour; // 系统时间 时 uchar SysMinute; // 系统时间 分 uchar SysDay; // 系统时间 周

25

烟台大学毕业论文(设计)

uchar SECOND_FLAG; // 秒显示标记,1时9 10 LED 闪烁,0 闪烁停止

uchar MON_FLAG; // 浇水天控制标记位:周一,为1的时候周一浇水,否则不浇水 uchar TUE_FLAG; // 浇水天控制标记位:周二,为1的时候周二浇水,否则不浇水

uchar WEN_FLAG; // 浇水天控制标记位:周三,为1的时候周三浇水,否则不浇水

uchar THIR_FLAG; // 浇水天控制标记位:周四,为1的时候周四浇水,否则不浇水

uchar FRI_FLAG; // 浇水天控制标记位:周五,为1的时候周五浇水,否则不浇水

uchar SAT_FLAG; // 浇水天控制标记位:周六,为1的时候周六浇水,否则不浇水

uchar SUN_FLAG; // 浇水天控制标记位:周日,为1的时候周日浇水,否则不浇水

uchar WateringTimeFlag; // 浇水标志,Timer0 中断倒计时显示控制标志位,为1的时候,Timer0的秒中断让浇水时间递减到0 uint WateringTime; // 浇水时长 全局变量 0~9999 uint WateringTime_H; // 浇水时长 高 uint WateringTime_L; // 浇水时长 低 uchar Startwatering_HOUR; // 浇水开始时间 小时 uchar Startwatering_minute; // 浇水开始时间 分钟

//=============================================================== //--------------------------函 数-----------------------------

//===============================================================

//------------------------------------------ //延迟函数

//------------------------------------------ void delayms(unsigned int n) {

unsigned int i=0,j=0; for(;i

for(;j<35000;j++); }

//------------------------------------------ //延迟函数

//------------------------------------------

26

烟台大学毕业论文(设计)

void delayus(unsigned int n) {

unsigned int i=0,j=0; for(;i

for(;j<35;j++); }

//------------------------------------------ //显示时间,使用扫描显示

//在设置周几不浇水的时候,数码管的小数点显示 //与否由此函数控制

//------------------------------------------

void ShowTime(uchar SysHour,uchar SysMinute,uchar SysDay) {

DP =0; //正常情况下,不点亮小数点

TIME_1 =0; //第一个数码管点亮 SEG =SysHour/10; //显示小时高位 delayus(1); //产生视觉余辉 TIME_1 =1; //第一个数码管点灭

TIME_2 =0; //第二个数码管点亮 SEG =SysHour; //显示小时低位 delayus(1); //产生视觉余辉 TIME_2 =1; //第二个数码管点灭

TIME_3 =0; //第三个数码管点亮 SEG =SysMinute/10; //显示分钟高位 delayus(1); //产生视觉余辉 TIME_3 =1; //第一个数码管点灭

TIME_4 =0; //第四个数码管点亮 SEG =SysMinute; //显示分钟低位 delayus(1); //产生视觉余辉 TIME_4 =1; //第四个数码管点灭

TIME_5 =0; //第五个数码管点亮 SEG =SysDay; //显示天 if(SysDay==1&&MON_FLAG==0) //关闭周一浇水,点亮小数点 { DP = 1; }

else if(SysDay==2&&TUE_FLAG==0) //关闭周二开始,点亮小数点 {

27

烟台大学毕业论文(设计)

DP = 1; }

else if(SysDay==3&&THIR_FLAG==0) //关闭周三开始,点亮小数点 { DP = 1; }

else if(SysDay==4&&WEN_FLAG==0) //关闭周四开始,点亮小数点 { DP = 1; }

else if(SysDay==5&&FRI_FLAG==0) //关闭周五开始,点亮小数点 { DP = 1; }

else if(SysDay==6&&SAT_FLAG==0) //关闭周六开始,点亮小数点 { DP = 1; }

else if(SysDay==7&&SUN_FLAG==0) //关闭周日开始,点亮小数点 { DP = 1; }

delayus(1); //产生视觉余辉 TIME_5 =1; //第五个数码管灭 }

//-------------------------------------- // 显示浇水倒计时 // 最大可以显示9999

//--------------------------------------

void showcountering(uint WateringTime_temp,uchar SysDay) {

DP =0; //正常情况下,不点亮小数点

TIME_1 =0;

SEG =WateringTime_temp/1000; //获取并显示千位

WateringTime_temp=WateringTime_temp00; //得到没有千位的数,只含有百十个

delayus(1); TIME_1 =1;

28

烟台大学毕业论文(设计)

TIME_2 =0;

SEG =WateringTime_temp/100; //百位

WateringTime_temp=WateringTime_temp0; //得到没有百位的数,只含有十个

delayus(1); TIME_2 =1;

TIME_3 =0;

SEG =WateringTime_temp/10; //十位 delayus(1); TIME_3 =1;

TIME_4 =0;

SEG =WateringTime_temp; //个位 delayus(1); TIME_4 =1;

TIME_5 =0;

SEG =SysDay; //天 delayus(1); TIME_5 =1; }

//-------------------------------------- // 浇水控制

//-------------------------------------- void Watering(uchar SysDay) {

uint temp=WateringTime; //不能修改全局变量WateringTime,WateringTime只能在按键AN1 AN2 和 AN4 联合作用下才可被修改,所以需要保存 WateringTimeFlag=1; //Timer0 中断倒计时显示控制标志位

//开启第一路浇水装置的电磁阀开始浇水 LED=0x01;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

//开启第二路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x02;

while(WateringTime>0) {

29

烟台大学毕业论文(设计)

showcountering(WateringTime,SysDay); }

//开启第三路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x04;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

//开启第四路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x08;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

//开启第五路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x10;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

//开启第六路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x20;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

//开启第七路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x40;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

30

烟台大学毕业论文(设计)

//开启第八路浇水装置的电磁阀开始浇水 WateringTime= temp; LED=0x80;

while(WateringTime>0) { showcountering(WateringTime,SysDay); }

WateringTimeFlag=0; //关闭浇水标志 WateringTime= temp; //还原WateringTime, LED=0x00; //熄灭所有的LED //结束浇水,回到正常模式 }

//-------------------------------------- //定时器T0初始化

//当为定时工作方式1时,定时时间的计算公式为: //(2^16-计数初值)x晶振周期x12 //12M晶振 50MS定时

//--------------------------------------- void Init_T0(void) {

TMOD = 0x01; //定时器工作在定时方式下。工作方式1 TH0 = (65536-TIME) /256; //赋初值 TL0 = (65536-TIME) %6; EA = 1; //使能全局中断 ET0 = 1; //定时器0使能 TR0 = 1; //定时器0工作 }

//===================================================== //=====================主函数=========================== //===================================================== void main(void) {

uchar thistime,key,lasttime=KEY_NULL; //按键识别 uchar AN4_CNT; //AN4 按键次数判断 // uchar AN5_CNT;

LED=0x00; //LED全灭

//------------------------------和时间相关的初始设置--------------------------------------------

Startwatering_HOUR =7; //默认每天浇水开始时间 小时

31

烟台大学毕业论文(设计)

Startwatering_minute =0; //默认每天浇水开始时间 分钟 WateringTime =10; WateringTime_H =0; WateringTime_L =10;

SysSecond =0; //上电后系统时间 秒 SysHour =0; //上电后系统时间 时 SysMinute =0; //上电后系统时间 分 SysDay =1; //上电后系统时间 周

SECOND_FLAG =1; //显示秒 9 10 LED 闪烁

MON_FLAG =1; //初始每天都会浇水 TUE_FLAG =1; //初始每天都会浇水 WEN_FLAG =1; //初始每天都会浇水 THIR_FLAG =1; //初始每天都会浇水 FRI_FLAG =1; //初始每天都会浇水 SAT_FLAG =1; //初始每天都会浇水 SUN_FLAG =1; //初始每天都会浇水

//--------------------------------------按键的初始设置------------------------------------------- AN4_CNT=0; //记录AN4 的按键次数,1次是进入时间校对,2次是设置浇水秒数,3次退出时间校对 // AN5_CNT=0; //记录AN5 的按键次数,1次是进入浇水天数,2次退出

Init_T0(); //初始化定时器0,定时50Ms while(1) {

//-------------------------按键控制模式---------------------------- //按键完成模式的选择和控制 //delayus(100);//去按键抖动 lasttime=thistime; thistime=KEY_DATA; key=thistime; if(thistime==lasttime) //连续两次按键一样,认为没有按键 key=KEY_NULL; if(key!=KEY_NULL) //如果有按键,读取值,并作相应的控制 {

32

烟台大学毕业论文(设计)

switch(key|0xC1) //提取中间五位作为按键 { case 0xfd://AN1被按下:AN4=0 小时校对 AN4=1 浇水小时校对 AN4=2 浇水秒数高位校对 { if(AN4_CNT==0) //如果AN4没有按下,则是正常的小时校对 { SysHour++; if(SysHour==24) //24小时时候,转化为0点 SysHour=0; } else if(AN4_CNT==1) //如果AN4被按下一次,则是浇水开始时间设置 { Startwatering_HOUR++; if(Startwatering_HOUR==24) //24小时时候,转化为0点 Startwatering_HOUR=0; } else if(AN4_CNT==2) //如果AN4被按下两次,则是浇水时长的高位设置 { WateringTime_H++; if(WateringTime_H==100) //最大是99 WateringTime_H=0; } break; } case 0xfb://AN2:AN4=0 分钟校对 AN4=1 浇水分钟校对 AN4=2 浇水秒数低位校对 { if(AN4_CNT==0) //如果AN4没有按下,则是正常的分钟校对 { SysMinute++; if(SysMinute==60) //分钟达到60,转化为0 SysMinute=0; } else if(AN4_CNT==1) //如果AN4被按下一次,则是浇水分钟设置 { Startwatering_minute++; if(Startwatering_minute==60) //分钟达到60,转化为0 Startwatering_minute=0;

33

烟台大学毕业论文(设计)

} else if(AN4_CNT==2) //如果AN4被按下两次,则是浇水时长的低位设置 { WateringTime_L++; if(WateringTime_L==100) //最大是99 WateringTime_L=0; } break; } case 0xf7://AN3:AN5=0 周校对 AN5=1 浇水周校对 { SysDay++; if(SysDay==8) //最大为周日 SysDay=1; break; } case 0xef://AN4 { AN4_CNT++; if(AN4_CNT==2) //如果AN4按下两次,则是浇水时长设置,9 10 LED 停止闪烁 { SECOND_FLAG =0; //9 10 LED 停止闪烁 TIME_6 =0; //9 10 LED 熄灭 } else //如果AN4不是被按下两次,则显示正常 { SECOND_FLAG =1; //9 10 LED 正常闪烁 if(AN4_CNT==3) //而且,AN4最大只能是2 AN4_CNT=0; } break; } case 0xdf://AN5,设置周几不浇水 { // AN5_CNT=1; // if(AN5_CNT==1) // { if(SysDay==1) {

34

烟台大学毕业论文(设计)

MON_FLAG=0; //关闭周一浇水, } else if(SysDay==2) { TUE_FLAG=0; //关闭周二浇水, } else if(SysDay==3) { THIR_FLAG=0; //关闭周三浇水, } else if(SysDay==4) { WEN_FLAG=0; //关闭周四浇水, } else if(SysDay==5) { FRI_FLAG=0; //关闭周五浇水, } else if(SysDay==6) { SAT_FLAG=0; //关闭周六浇水, } else if(SysDay==7) { SUN_FLAG=0; //关闭周日浇水, } // } // else if(AN5_CNT==2) //关闭周日浇水, // AN5_CNT=0; break; } default:break; } }//结束按键控制

//-------------------------模式的执行和浇水控制---------------------------- //如果系统时间等于浇水时间,执行浇水,不考虑任何模式 if(SysHour==Startwatering_HOUR&&SysMinute==Startwatering_minute) { if(SysDay==1&&MON_FLAG) //周一开始浇水 {

35

烟台大学毕业论文(设计)

// // // // //

Watering(1); } else if(SysDay==2&&TUE_FLAG) //周二开始浇水 { Watering(2); } else if(SysDay==3&&THIR_FLAG) //周三开始浇水 { Watering(3); } else if(SysDay==4&&WEN_FLAG) //周四开始浇水 { Watering(4); } else if(SysDay==5&&FRI_FLAG) //周五开始浇水 { Watering(5); } else if(SysDay==6&&SAT_FLAG) //周六开始浇水 { Watering(6); } else if(SysDay==7&&SUN_FLAG) //周日开始浇水 { Watering(7); } } else ShowTime(SysHour,SysMinute,SysDay); } else {

//无论浇水与否,都需要判断模式 if(AN4_CNT==0) //正常工作,显示时间 { ShowTime(SysHour,SysMinute,SysDay); } else if(AN4_CNT==1) //设置浇水开始时间 { ShowTime(Startwatering_HOUR,Startwatering_minute,8); } else if(AN4_CNT==2) //设置浇水时间长度 秒 {

36

烟台大学毕业论文(设计)

WateringTime=WateringTime_H*100+WateringTime_L; //计算浇水时间 ShowTime(WateringTime_H,WateringTime_L,9); //显示 }

} }

//----------------------------------------- //定时器0中断服务函数 //Timer0定时50ms,

//----------------------------------------

void Time0_ISR(void) interrupt 1 using 2 {

TR0=0; //关闭定时

TH0 = (65536-TIME) /256; //重载初始值 TL0 = (65536-TIME) %6;

flag++; //为了获取1s,设置的标志flag

if(flag==20) //1s定时到 { SysSecond++; //1s到,秒加1 flag=0; //标志清零 if(SECOND_FLAG) //如果需要显示LED闪烁,着SECOND_FLAG=1,否则不显示 TIME_6=SysSecond&0x01; //时分秒进位判断 //秒 if(SysSecond==60) { SysSecond=0; SysMinute++; } //分 if(SysMinute==60) { SysMinute=0; SysHour++; }

37

烟台大学毕业论文(设计)

}

//时 if(SysHour==24) { SysHour=0; SysDay++; } //天 if(SysDay==8) { SysDay=1; } //如果是倒计时模式,浇水时间每一秒减小一个数值 if(WateringTimeFlag==1) WateringTime--; }

TR0 = 1; // 定时器中断服务函数结束,重新开启定时器

38

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

Top