智能花盆浇水系统设计_第1页
智能花盆浇水系统设计_第2页
智能花盆浇水系统设计_第3页
智能花盆浇水系统设计_第4页
智能花盆浇水系统设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目盆花自动浇水系统的设计学生姓名学号专业班级指导教师2012年6月5日毕业论文﹙设计﹚任务书院(系)专业班级学生姓名一、毕业论文﹙设计﹚题目盆花自动浇水系统设计与实现二、毕业论文﹙设计﹚工作自___2012__年__2_月__27__日起至__2012_年6月__15日止三、毕业论文﹙设计﹚进行地点:电子信息工程系实验室四、毕业论文﹙设计﹚的内容要求:本课题要求设计一个盆花自动浇水系统,要求:1.实现湿度与温度的显示;2.配合使雨水检测器,即使你设定的浇水时间天突然下雨了,浇水控制器就会自动关阀停止浇水;3.每天可设定八次定时浇水选择,每次为1分钟至9小时59分,也可以根据需要的时间设计;4.采用电机阀技术,浇水自动控制器不受水压影响,而且不易受水质影响和堵塞。解决途径:用51系列单片机作为主控芯片,配合温、湿度传感器、雨水检测器以及对应的测量电路完成对环境的检测,驱动数码管或LCD进行温、湿度显示,驱动浇水装置实现自动浇水。主要任务:进行硬件电路设计和软件程序的编写调试,烧录程序并完成系统联调,最后撰写毕业设计论文。进度安排:2月27日-3月30日:查阅资料及方案论证4月2日-5月11日:编写软件、调试运行及单元电路调试5月14日-5月25日:整体联调5月28日-6月8日:整理数据及撰写论文6月11日-6月15日:准备辩论指导教师应用电子技术教研室系(教研室主任签名批准日期学生签名盆花自动浇水系统的设计〔陕西理工学院物理与电信工程学院电子信息工程专业电子083班,陕西汉中723003〕指导教师:[摘要]本次设计的盆花自动浇水系统包括土壤温湿度的采集与显示,和计数器的设置与显示及浇水报警两大局部。土壤温湿度的采集与显示局部,又包括了土壤温湿度的采集和显示、自动浇水系统。土壤温湿度的采集和显示以ADC0809相连接配合两个电位器作为感应电路,将采集到的土壤温湿度值送入AT89C51单片机,再由其传输到LCD屏进行显示。自动浇水系统设计为智能和手动两个局部:智能浇水局部是通过单片机程序设计浇水的上下限值与感应电路送入单片机的土壤湿度值相比拟,当低于下限值时,单片机输出一个信号控制浇水,高于上限值时再由单片机输出一个信号控制停止浇水;手动局部是由单片机从数码管读入月份与每天的实时时刻,通过软件程序设定定时浇水的时间。[关键词]AT89C51温湿度的采集于显示计数器LCDDesignofpottedflowerssautomaticwateringsystemGaoHuili(Grade08,Class3,Majorelectronicsandinformationengineering,SchoolofphysicsandTelecommunicationEngineering,ShaanxiUniversityofTechnology,Hanzhong723003,Shaanxi)Tutor:ZhuYaliAbstractthedesignofpottedplantautomaticwateringsystemincludessoiltemperatureandhumidityacquisitionanddisplay,andthecountersettinganddisplayandalarmtwopartswater.Soiltemperatureandhumidityacquisitionanddisplaypart,andcomprisesasoiltemperatureandhumidityacquisitionanddisplay,automaticwateringsystem.SoiltemperatureandhumidityacquisitionanddisplayinADC0809isconnectedwithtwopotentiometersasaninductioncircuit,thecollectedsoiltemperatureandhumidityvalueissendtotheAT89C51singlechip,thenbyitstransmissiontotheLCDscreendisplay.Automaticwateringsystemdesignforintelligentandmanualtwoparts:intelligentwateringsectionthroughtheMCUprogrammingwateringtheupperlimitandthelowerlimitandtheinductioncircuitintothemicrocontroller'ssoilhumidityvaluearecompared,whenlessthanthelowerlimitvalue,theMCUoutputasignaltocontrolthewatering,highintheupperlimitvaluebythemicrocontrolleroutputasignalcontrolstopwatering;manualpartiscomposedofsingle-chipdigitaltubeintothemonthanddayfromrealtime,throughthesoftwareprogrammedtimingwateringtime.Keywords:AT89C51temperatureandhumidityacquisitioninthedisplaycounterLCD引言1选题的目的和意义随着社会的进步,人们的生活质量越来越高。在家里养养盆花可以陶冶情操,丰富生活。同时盆花可以通过光合作用吸收二氧化碳,净化室内空气,在有花木的地方空气中阴离子聚集较多,所以空气也特别清新,而且许多花木还可以吸收空气中的有害气体,因此,养盆花如今被许多人喜爱。盆花浇水量是否能做到适时适量,是养花成败的关键。但是,在生活中人们总是会有无暇顾及的时候,比方工作太忙,或者出差、旅游等。花草生长问题80%以上是由花儿浇灌问题引起的;好不容易种植几个月的花草,因为浇水不及时,长势不好,用来美化环境的花草几乎成了“鸡肋”;不种植吧,家里没有绿色衬托,感觉没有生机;保存吧,花草长得不够旺盛,还影响家庭装饰效果。虽然市场上有卖盆花自动浇水器,但价格十分昂贵,并且大多只能设定一个定时浇水的时间,很难做到给盆花自动适时适量浇水。夜有较经济的盆花缺水报警器,可以提醒人们及时的给盆花浇水。可是这种报警器只能报警,浇水还需要人们亲自动手。当家里无人时,即使报警也无人浇水,就起不到应有的作用了。因此,我想设计一种集盆花土壤湿度检测,自动浇水以及蓄水箱自动供水于一体的盆花自动浇水系统。让人们无暇顾及时也能得到及时的浇灌。2自动浇水器的诞生背景及国内外开展现状微喷系统是近几年利用国内外先进技术组装的新型灌溉设施,主要是利用水流通过管道系统以一定速度从特制的喷头喷出,在空气中分散成细小的水滴着落在花草植物。作物及周围的地面上,从而到达及时补充水分的目的。该系统具有用水量少、冲击力小的灌溉特性,适用于栽培密度大、植被柔软细嫩的植物。自动浇水器的诞生时随着人们生活水平的提高和生活节奏的加快而诞生的一种懒人园艺用品。它把微喷的概念应有家庭盆花浇灌中,通过相应地改良,到达合理给盆花自动浇水的目的。早在很多年前,国外就已经开始普及,国内实用的电子类自动浇水器多数从国外进口的,价格昂贵,但质量比拟可靠。不过这不太适用于国内,目前国内外比拟流行的是玻璃制作的自动浇水器。这种类型的浇水器多数在我国山西和浙江一带生产的,价格比拟低廉,实用性没有电子类自动浇水器好。随着国内居民消费水平和生活质量的提高,居家园艺市场异常火爆,但是由于生活节奏加快,种花容易养花难,浇水问题就暴露出来,因此国内上加已经看到了这种需求潜力。目前这类小居家用品的厂家主要集中在广东,上海,浙江一带。现在市场上所出售的自动浇水器主要有电子类自动浇水器和玻璃、陶瓷类自动浇水器。电子类自动浇水器电子类自动浇水器又叫时控喷淋装置,系统构成为:主机〔或者〕、主管〔可以是花园管也可以是七分之四毫米的微喷淋管〕、分水接头〔3通、4通、5通、6通、分水器〕、副管〔五分之三毫米〕喷淋管〔雾化喷头、旋转喷头、折射雾化喷头等〕。电子类自动浇水器根据电源的不同分为交流电自动浇水器和电池自动浇水器两种。控制器的一般性能有:电磁阀控制;智能时控电路、微电脑芯片控制;适用电源为AC220V/50Hz;最适水压0.3-0.6Mpa;待机功率〔4VA,浇水时小于12VA〕;可控制连续作业时间试1分钟至168个小时;可每天自动完成十次以上浇水作业,可每天、隔天、隔多天自动循环进行浇水,手动自动两用;每天计时误差小于正负3秒;电器适应环境温度为-10~50摄氏度;相对湿度小于90%RH。2)玻璃、陶瓷类自动浇水器玻璃。陶瓷类自动浇水器又叫自动渗水装置,它由本身材质的物理结构构成,根据器具的物理渗水原理完成自动浇灌,当自动浇水器内部存水,自身形成一定的压力,当遇到枯燥的土壤,水就会自上而下的流出,当土壤湿润以后,会形成一个堵塞压力,从而导致水流速度变慢或者停止。器具工艺不同,效果也不一样,当然也因土壤的疏松情况决定器具内水流的速度。当前传感器技术与单片机技术开展迅速,其应用逐步由工业、军事等领域向其它领域渗透,已经和我们的日常生活息息相关。而且智能家居概念也越来越受到人们的推崇,因此,微电脑控制的电子类自动浇水系统有很好的开展前景。3毕业设计所采用的研究方法和手段本次毕业设计是设计一种单片机控制的自动浇水系统,实现室内盆花浇水的自动化系统。该系统可对土壤的湿度进行监控,并对作物进行适时适量的浇水。其核心是单片机和温湿度采集和显示电路以及浇水驱动电路构成的检测控制局部。主要研究土壤湿度与浇水量之间的关系、浇灌控制技术及设备系统的硬件、软件编程各个局部。检测局部,单片机选用AT89C51单片机,软件选用C51语言编程。土壤温湿度采集于显示电路可将检测到的土壤温湿度模拟量放大转换成数字量通过单片机内程序控制精确的将温度与湿度分别显示在LCD显示屏上,同时把程序发给另外一块单片机,通过单片机内的中断效劳程序判断是否要给盆花浇水,假设需浇水,那么单片机系统发出浇水信号,开始浇水,假设不需要浇水,那么进行下一次循环检测。在浇水系统中也同时设计一个定时浇水局部,通过按键开关设置不同的浇水时间段,在时间段以内时,单片机驱动浇水系统,开始浇水,如不在时间段内,那么不浇水。目录1AT89C5111.1AT89C51的简介11.2AT89C51单片机的根本组成11.3AT89C51主要特性:21.4AT89C51的管脚说明21.5AT89C51单片机的存储器41.6振荡电路和时钟51.7AT89C51的中断系统61.7.1中断系统结构和中断控制61.7.2中断响应过程81.8定时器/计数器81.8.1定时器/计数器0和1简介81.8.2与定时器/计数器0和1相关的特殊功能存放器92液晶显示器LCD112.1液晶显示器的简介112.2液晶显示器的分类112.3液晶显示器160211管脚功能112.3.2LCD1602的特性122.3.3LCD1602特征及应用123ADC0809133.1ADC0809的简介133.2ADC0809引脚图133.3ADC0809的主要特性143.4ADC0809的内部结构143.5ADC0809的工作过程15474ls373164.174ls373引脚图164.274ls373真值表165盆花自动浇水系统的设计185.1土壤温湿度采集与显示185.1.1硬件电路设计18具体的土壤温湿度采集于显示系统硬件电路18系统软件设计195.2定时器局部22按键开关操作简介22定时器局部硬件电路设计235.2.3.定时器局部硬件电路236总结247致谢258参考文献269附录27附录AProtues仿真图27附录B温湿度采集与显示程序27附录C计时器局部程序311AT89C511.1AT89C51的简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集合输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ALMEL的AT89C51是一种高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的方案。1.2AT89C51单片机的根本组成AT89C51由一个8位的微处理器,128KB片内数据存储器RAM,21个特殊功能存放器SFR,3KB片内程序存储器FlashROM,64KB可寻址片内外一编址的ROM,64KB可寻址片外的RAM,4个8位并行I/O接口〔P0-P3〕,一个全双工通用异步串行接口UART,两个16位的定时器、计数器,具有位操作功能的布尔处理机及位寻址功能的五个中断源、两个优先级的中断控制系统以及片内振荡器和时钟产生电路。其根本组成框图如图1.1所示。图1.1AT89C51单片机的根本组成1.3AT89C51主要特性:与MCS-51兼容4K字节可编程闪烁存储器寿命:1000写、擦循环数据保存时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器、计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路1.4AT89C51的管脚说明AT89C51的引脚图如图1.2所示。各引脚的具体说明如下:VCC:供电电压GND:接地P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写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口也可作为AT89C51的一些特殊功能口,如下所示:各口管脚备选功能P3.0RXD〔串行输入口〕P3.1TXD〔串行输出口〕P3.2/INT0〔外部中断0〕P3.3/INT1〔外部中断1〕P3.4T0〔记时器0外部输入〕P3.5T1〔记时器1外部输入〕P3.6/WR〔外部数据存储器写选通〕P3.7/RD〔外部数据存储器读选通〕P3口同时为闪烁编程和编程校验接收一些控制信号。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〕。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。图1.2AT89C51的引脚图1.5AT89C51单片机的存储器在单片机中,存储器分为程序存储器ROM和数据存储器RAM,并且两个存储器是独立编址的。AT89C51单片机芯片内配置有8KB(0000H-1FFFH)的Flash程序存储器和256字〔00H-FFH〕的数据存储器RAM,根据需要可外扩到最大64KB的程序存储器和64KB的数据存储器,因此AT89C51的存储器结构可分为4个局部:片内程序存储器、片外程序存储器、片内数据存储器和片外程序存储器。如果以最小系统使用单片机,即不扩展,那么AT89C51的存储器结构就较简单:只有单片机自身提供的8Flash程序存储器和256字节数据存储器RAM。图1.3给出了AT89C51单片机的存储器分布空间。左侧框中为单片机自身提供的8KBFlash程序存储器和256字节数据存储器RAM。右侧为可扩展的64KB的程序存储器ROM和64KB的数据存储器RAM。图1.3存储器空间分布〔1〕程序存储器AT89C51单片机出厂时片内已带有8KB的Flash程序存储器,使用时,引脚/EA要按高电平〔5V〕,这时,复位后CPU从片内ROM区0000H单元开始读取指令代码,一直运行到1FFFH单元,如果外部扩展有程序存储器ROM,那么CPU会自动转移到片外ROM空间2000H-FFFH读取指令代码。〔2〕数据存储器AT89C51单片机出厂时片内已带有256字节的数据存储器RAM,如果不够用,可以在片外扩展,最多可扩展64KBRAM.单片机自带的数据存储器RAM结构如图2-4所示,此字节单元〔00H-FFH〕的低128字节〔00H-7FH〕单元为用户使用区,高128字节〔80H-FFH〕单元为特殊功能存放器SFR区。片内数据存储器的00H-7FH单元又划分为3块:00H-1FH块是工作存放器所用;20-2FH块是位寻址功能的单元区;30H-3FH是普通RAM区。工作存放器又分为4组,在当前的运行程序中只有一组是被激活的,谁被激活有程序状态存放器PEW的RS1,RS0两位决定。1.6振荡电路和时钟在AT89C51芯片内部,有一个振荡电路和时钟发生器,引脚XTAL1和XTAL2之间接入晶体振荡器和电容后构成内部时钟方式。也可以使用外部振荡器,由外部振荡器产生的信号直接加载到振荡器的输入端,作为CPU的时钟源,称为外部时钟方式。采用外部时钟方式时,外部振荡器的输出信号接至XTAL1,XTAL2悬空。两种方式的电路连接图1.6所示。大多数的单片机采用内部时钟方式,本次设计亦然。在AT89C51单片机内部,引脚XTAL2和引脚XTAL1连接着一个高增益反相放大器,XTAL1引脚是反相放大器的输入端,XTAL2引脚是反相放大器的输出端。芯片内部的时钟发生器是一个二分频触发器,振荡器的输出fosc为其输入,输出为两相时钟信号(状态时钟信号),频率为振荡器输出信号频率fosc的二分之一。状态时钟经三分频后为低字节地址锁存信号ALE,频率为振荡器输出信号频率fosc的六分之一,经六分频后为机器周期信号,频率为fosc/12。C1,C2一般取20-30pF的陶瓷电容器。图1.4AT89C51振荡器的连接方式1.7AT89C51的中断系统为了提高系统的工作效率,AT89C51单片机设置了中断系统,采用中断方式与外设进行数据传送。所谓“中断”,是指单片机在执行某一段程序的过程中,由于某种原因〔如异常情况或特殊请求〕,单片机暂时中止正在执行的程序,而去执行相应的处理程序,待处理结束后,再返回到被打断的程序除,继续执行原程序的过程。1.7.1中断系统结构和中断控制AT89C51有六个固定的可屏蔽中断源,分别是三个片内定时器/计数器溢出中断TF0、TF1和TF2,两个外部中断/INT0(P3.2)和/INT1(P3.3),一个片内串行口中断T1或RI。6个中断源有两个中断优先级,可形成中断嵌套。它们在程序存储器中各有固定的中断入口地址,由此进入相应的中断效劳程序。引起6个中断源的符号、名称及产生的条件如下:/INT0:外部中断0,由P3.2端口线引入,低电平或下降沿引起;/INT1:外部中断1,由P3.3端口线引入,低电平或下降沿引起;T0:定时器/计数器0中断,由T0记满回零引起;T1 :定时器/计数器1中断,由T1记满回零引起;T1/RI:串行口I/O中断,串行口完成一帧字符发送/接收后引起中断;T2:定时器/计数器2中断,由T2记满回零引起。在本次设计中采用了定时器/计数器0中断,它的中断控制存放器包括定时器/计数器0、1控制存放器TCON和中断允许控制存放器IE。定时器控制存放器TCONTCON是定时器/计数器和外部中断两者合用的一个可寻址的特殊功能存放器,它的格式如下:D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0各控制位定义如下:TF1:定时器/计数器1溢出中断请求标志位。当定时器/计数器1计数产生溢出时,由内部硬件置位TF1,向CPU响应中断并转向该中断效劳程序执行时,由硬件内部自动TF1清0。TR1:定时器/计数器1启动/停止位。由软件置位/复位控制位/计数器1的启动或停止计数。TF0:定时器/计数器0溢出中断请求标志位。当定时器/计数器0计数产生溢出时,由内部硬件置位TF0,向CPU响应中断并转向该中断效劳程序执行时,由硬件内部自动TF1清0.TR0:定时器/计数器0启动/停止位。由软件置位/复位控制定时器/计数器0的启动或停止计数。IE1:外部中断请求标志位。当CPU检测到INT0低电平或下降沿且IT1=1时,由内部硬件置位IE1标志位〔IE=1〕向CPU请求中断,当CPU响应中断并转向该中断效劳程序执行时,由硬件内部将IE1清0。IE0:外部中断请求标志位。当CPU检测到INT0低电平或下降沿且IT0=1时,由内部硬件置位IE0标志位〔IE0=1〕向CPU请求中断,当CPU响应中断并转向该中断效劳程序执行时,由硬件内部将TE0清0。IT1:用软件置位/复位IT1来选择外部中断INT1是下降沿触发还是电平触发中断请求。当IT1置1时,那么外部中断INT1为下降沿触发中断请求,即INT1端口由前一个机器周期的高电平跳变为下一个机器周期的低电平,那么触发中断请求;当IT1复位清0,那么INT1的低电平触发中断请求。IT0:由软件置位/复位IT0来选择外部中断INT0是下降沿触发还是低电平触发中断请求,其控制原理同IT1。中断允许控制存放器中断允许控制存放器IE的格式如下:D7D6D5D4D3D2D1D0EAET2ESET1EX1ET0EX0各控制定义如下:EA:中断总控制位,EA=1。CPU开中断,它是CPU是否响应中断的前提,在此前提下,如果某中断源的中断允许置位1,才能响应应该中断源的中断请求。如果EA=0,无论哪个中断源有请求,CPU都不予回应。ET2:定时器/计数器T2中断控制位,ET2=1,允许T2计数溢出中断;ET=2,禁止T2中断。ES:串行口中断控制位,ES=1,允许串行口发送/接受中断;ES=0禁止串行口中断。ET1:定时器/计数器T1中断控制位,ET1=1,允许T1计数溢出中断;ET1=0,禁止T1中断。EX1:外部中断1控制位,EX1=1,允许中断;EX=0,禁止外部中断1中断。ET0:定时器/计数器T0中断控制位,ET0=1,允许T0计数溢出中断;ET0=0,禁止T0中断。EX0:外部中断0控制位,EX0=1,允许中断;EX0=0,禁止外部中断0中断。1.7.2中断响应过程CPU中断处理从响应中断、控制程序转向对应的中断矢量地址入口处执行中断效劳程序,到执行返回〔RET1〕指令为止。中断响应可分为以下几个步骤:〔1〕保护断点,即保存下一个将要执行的指令的地址,把这个地址送入堆栈。〔2〕寻找中断入口,根据6个不同的中断源所产生的中断,中断系统必须能够正确地识别中断源,查找6个不同的入口地址。以上工作是由单片机自动完成的,与编程者无关。在6个入口地址处存放有中断处理程序。执行中断处理程序。〔4〕中断返回:执行完中断指令后,从中断处返回到朱程序,继续执行。1.8定时器/计数器AT89C51单片机内部设有两个16位可编程定时器/计数器,即定时器/计数器0和定时器/计数器1。除此之外还有一个可编程定时器/计数器2。1.8.1定时器/计数器0和1简介定时器/计数器0和1内部有一个计数存放器〔THx和TLx〕,它实际上是一个累加存放器加1计数。定时器和计数器共用这个存放器,但定时器/计数器同一时刻只能工作在其中一种方式下,不可能既工作在定时器方式,同时又工作在计数器方式。这两个工作方式的根本区别是在于计数脉冲的来源不同。工作在定时器方式时,对振荡器12分频的脉冲计数,即每过一个机器周期〔1个机器周期在时间上和12个振荡周期的时间相等〕,计数存放器中的值就加1。工作在计数器方式时,计数器不是来自内部的机器周期,而是来自外部输入。对定时器/计数器0、定时器/计数器1,计数脉冲分别来自T0、T1引脚。当这些引脚上输入的信号产生高电平至低电平的负跳变时,计数器存放器的值就加1。单片机每个机器周期都要对对外部输入进行采样,如果在第一个周期,即第三个机器周期计数存放器的值才增加1。1.8.2与定时器/计数器0和1相关的特殊功能存放器〔1〕计数器存放器TH0、TL0和TH1、TL1计数存放器是16位的,再启动定时器时需要对它设定初始值。THx是计数器存放器的高8位,THx是计数存放器的低8位。TH0、TL0对应T/C0,TH1,TL1对应T/C1。定时器/计数器控制存放器TCON的格式如下:TF1TR1TF0TR1IE1IT1IE0IT0TF1为T/C1的溢出标志,溢出时由硬件置1,进入中断后又由硬件自动清0。TR1为T/C1的启动和停止位,由软件控制。置1时启动T/C1;清0时停止T/C1。TF0和TR0的功能和使用方法以TF1、TR1类似,只是它们针对的是T/C0.(3)定时器/计数器方式控制存放器TMOD定时器/计数器方式控制存放器TMOD的格式如下所示。它的控制位都是由软件控制的,其中高4位是针对T/C1的,低4位是针对T/C0的,其功能和使用方法相似。GATEM1M0GATEM1M0现在以T/C0来说明各控制位的使用方法:GATE是一个选通位,当GATE位置1时,T/C0受到双重控制,只有/INT0为高电平且TR0位置1是T/C0才开始工作,当GATE位清0时,T/C0仅受到TR0的控制。C//T用来选择工作在定时器方式还是计数器方式。当该位置1时工作在计数器方式,清0时工作在定时器方式。M1和M0联合起来用于选择操作模式,一共有四种操作模式,如表所示。表1.1定时器/计数器的四种模式M1M0操作模式计数器配置00模式013位计数器10模式2自动重转载的8位计数器10模式2自动重转载的8位计数器11模式3T0分为两个8位计数器,T1停止计数2液晶显示器LCD2.1液晶显示器的简介液晶显示器是一种低功能耗液晶显示器件。工作电流小,适合于仪表和低功耗系统。常用的有笔画型液晶显示器、点阵字符型液晶显示器和图形点阵式液晶显示器。LCD液晶显示器的原理是利用液晶的物理特性,通过电压对其显示区域进行控制。有电就显示黑色,这样就显示出图形。液晶显示器适应于大规模电路直接驱动,易于实现全彩色显示的特点。目前被广泛应用于计算机,数字摄像机等众多领域。2.2液晶显示器的分类液晶显示器按显示图案的不同可分为笔段型LCD、字符型LCD和点阵图型LCD三种。笔段型笔段型是以长条状作为根本单位显示。该类型主要用于数字显示,也可用于显示西文字或某些字符。这种段型显示通常有6段。7段、8段、9段、14段和16段等,在形状上与数码管类似,总是围绕“8”的结构变化。其中以7段显示器常用,常用于数字仪表、电子仪器中。字符型字符型液晶显示器是专门用来显示英文和其他拉丁字母、数字、符号等点阵型液晶显示模块。它一般由假设干个5乘8或5乘11点阵组成,每个点阵显示一个字符。这类模块一般应用于数字寻呼机、数字仪表等电子设备中。点阵图型点阵图形型是在一平板上排版多行多列的矩阵式的晶格点,点的大小可根据显示精细度来设计,可显示数字、字母、汉字、图像,甚至动画。这液晶显示器广泛应用于、笔记本电脑等需要显示大量信息的设备中。2.3液晶显示器16021602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有假设干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。管脚功能图2.1LCD1602引脚图1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高〔比照度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整比照度〕。第4脚:RS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。2.3.2LCD1602的特性〔1〕n+5V电压,比照度可调〔2〕n内含复位电路〔3〕n提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能〔4〕n有80字节显示数据存储器DDRAM〔5〕n内建有192个5X7点阵的字型的字符发生器CGROM〔6〕n8个可由用户自定义的5X7的字符发生器CGRAM2.3.3LCD1602特征及应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。3ADC08093.1ADC0809的简介ADC0809其实就是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片。3.2ADC0809引脚图图3.1ADC0809引脚图ADC0809主要信号引脚的功能说明如下:IN7~IN0——模拟量输入通道ALE——地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。START——转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。本信号有时简写为ST.A、B、C——地址线。通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。其地址状态与通道对应关系见表1。CLK——时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号EOC——转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。D7~D0——数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高OE——输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。Vcc——+5V电源。Vref——参考电源参考电压用来与输入的模拟信号进行比拟,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V,Vref(-)=-5V)3.3ADC0809的主要特性(1)8路8位A/D转换器,即分辨率8位。(2)具有转换起停控制端。(3)转换时间为100μs(4)单个+5V电源供电(5)模拟输入电压范围0~+5V,不需零点和满刻度校准。(6)工作温度范围为-40~+85摄氏度(7)低功耗,约15mW。3.4ADC0809的内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如下图,它由8路模拟开关、地址锁存与译码器、比拟器、8位开关树型D/A转换器、逐次逼近图3.2ADC0809的内部结构3.5ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比拟器。START上升沿将逐次逼近存放器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门翻开,转换结果的数字量输出到数据总线上。3.6四位共阴数码管图3.3四位七段共阴数码管474ls3734.174ls373引脚图图4.174ls373引脚图373的输出端O0~O7可直接与总线相连。当三态允许控制端OE为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端LE为高电平时,Q随数据D而变。当LE为低电平时,D被锁存在已建立的数据电平。当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。引出端符号:D0~D7数据输入端OE三态允许控制端〔低电平有效〕LE锁存允许端Q0~Q7输出端4.274ls373真值表图4.274ls373真值表L——低电平;H——高电平;X——不定态;Q0——建立稳态前Q的电平;G——输入端,与8031ALE连高电平:畅通无阻低电平:关门锁存。图中OE——使能端,接地。当G=“1”时,74LS373输出端1Q—8Q与输入端1D—8D相同;当G为下降沿时,将输入数据锁存。5盆花自动浇水系统的设计该系统包括土壤温湿度采集与显示系统和定时器的设置与显示系统两个系统。5.1土壤温湿度采集与显示土壤温湿度采集与显示系统以单片机AT89C51为控制核心,通过软件设置到达具体动作实现。土壤的温湿度是由ADC0809和两个点位器进行模拟并送入单片机,通过单片机的I/O口把检测到的土壤温湿度值用LCD显示出来。同时,如果系统在智能浇水设置情况下,那么该值与设定的浇水上下限值相比拟,假设低于下限值,那么单片机发出一个控制信号,开始浇水。假设高于上限值时,单片机再发出一个控制信号控制,停止浇水。如果系统设置在手动浇水情况下,那么按照设定好的定时浇水时间进行浇水,温湿度检测电路把检测到的土壤温湿度值显示在LCD上,以到达对土壤温湿度实时监测的目的。5.1.1硬件电路设计土壤温湿度检测与控制系统由AT89C51单片机、ADC0809、电位器、LCD显示屏、电阻等组成。对于LCD显示屏将D0-D7通过排阻RESPACK8连接到单片机的P0.0-P0.7上,E、R/W、RS与P3.7、P3.6、P3.5连接。5.1.2具体的土壤温湿度采集于显示系统硬件电路图5.1土壤温湿度采集于显示系统硬件电路连接图5.1.3系统软件设计土壤温湿度检测与控制系统有自动和手动两种浇水方式。通过设置键来选择浇水方式,土壤温湿度的检测后在LCD液晶屏上显示由定时器/计数器1中断实现。在本次设计中定时器/计数器均工作在计数器方式的模式1。为方便时间计算,设定中断一次为50ms,这样计数20次就是一秒。可以以此类推计算出所要设定的时间。计时器局部程序如下:#include<at89x51.h>#defineuintunsignedint#defineucharunsignedchar#defineSTARTP3_4 #defineEOCP3_3 #defineOUTPORTP2uchard1[]="Humidity:(RH)";uchard2[]="Temperature:";sbitlcdrs=P3^5; sbitlcdrw=P3^6;sbitlcden=P3^7;sbitIN=P3^0;voiddelay(uintz) //液晶用延时函数{ ucharx,y; for(x=1000;x>1;x--) for(y=z;y>1;y--);}voidwrite_com(ucharcom) //写命令函数{ lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_date(uchardate) //写数据函数{ lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;}voidinit_lcd() //初始化函数{ lcden=0; lcdrw=0; //选择状态为写 write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }unsignedintHumidity(){ unsignedintuiResult; IN=0; START=1; //启动AD转换。 START=0; while(EOC==0); //等待转换结束。 uiResult=OUTPORT; //出入转换结果。 //uiResult=(100*uiResult); uiResult=(20*uiResult)/51; //处理运算结果。 returnuiResult;}unsignedintTemperature(){ unsignedinttt; IN=1; START=1; //启动AD转换。 START=0; while(EOC==0); //等待转换结束。 tt=OUTPORT; //出入转换结果。 tt=(100*tt)/51; //处理运算结果。 returntt;}voidHumidity_show(unsignedintuiNumber){ unsignedcharucaNumber[3],ucCount; if(uiNumber>99) uiNumber=99; ucaNumber[0]=uiNumber/10; ucaNumber[1]=uiNumber%10; //ucaNumber[2]=uiNumber%10; for(ucCount=0;ucCount<2;ucCount++) { write_date((ucaNumber[ucCount])|0x30); }}voidTemperature_show(uintuiNumber){ unsignedcharucaNumber[3],ucCount; ucaNumber[0]=uiNumber/100; ucaNumber[1]=uiNumber/10%10; ucaNumber[2]=uiNumber%10; for(ucCount=0;ucCount<3;ucCount++) { write_date((ucaNumber[ucCount])|0x30); if(ucCount==1) write_date('.'); }}ucharuc_Clock=0; //定时器0中断计数bitb_DATransform=0;uchari,j;voidmain(){ TMOD=0x01; //定时器0,模式1。 TH0=0x0c; TL0=0xb0; TR0=1; //启动定时器。 ET0=1; //开定时器中断。 EA=1; //开总中断 init_lcd(); write_com(0x80); for(i=0;i<16;i++) { write_date(d1[i]); } write_com(0xc0); for(i=0;i<12;i++) { write_date(d2[i]); } while(1) { if(b_DATransform==1) { b_DATransform=0; write_com(0x89); Humidity_show(Humidity()); //delay(2000); write_com(0xcc); Temperature_show(Temperature()); } }}voidTime0()interrupt1{ if(uc_Clock==0) { uc_Clock=5; b_DATransform=1; } else uc_Clock--; TH0=0x0c; //恢复定时器0。 TL0=0xb0;}5.2定时器局部定时器局部以单片机AT89C51为控制核心,通过软件设置到达具体动作实现。通过按键开关对当前时间以及定时浇水时间进行设置,共阴数码管显示,当时间处在所设置的浇水时间内时,单片机发出控制信号,开始浇水。否那么,停止浇水。5.2.1按键开关操作简介运行仿真电路,八位数码管会显示00-00-00;通过P1口八个按键,分别可以调节总时间和定时时间,调节方法如下:P10,P11,P12,P13,是用来控制八段计时时间的,P14,P15,P16,P17是用来控制和调节总时间的,以下分别加以介绍。按下P14,数码管上会显示时钟的运行,即P14是控制总时间的开始和暂停的,按第一下,启动时钟,按第二下,暂停时钟,按第三下,启动时钟……当时间处于暂停时态时,按P15,可进行时间调整设置,按第一下,设置“时”,按第二下,设置“分”,按第三下设置“秒”,即P15为总时钟设置键。P16和P17分别为“加”“减”控制键,配合P15使用,设置总是中的加减。当总时间的时分秒设置完成,按一下P14,即启动时钟,时钟便开始运行。按P10键,便可查询或设置定时时间,当P10按第一下,数码管便显示第一个定时时间点,按第二下,显示第二个定时时间点……当P10键按下时,显示相应的定时时间点,再按一下P11,即可对相应的时间点进行设置,按第一下,设置“时”,按第二下,设置“分”,按第三下,设置“秒”,配合P12和P13键,P12和P13键为定时时间的“加”“减”调节键。5.2.2定时器局部硬件电路设计定时器局部局部由AT89C51、74LS373、四位共阴数码管、电阻等组成5.2.3.定时器局部硬件电路图5.2定时器硬件连接电路图6总结本次设计的盆花自动浇水系统以电子类的自动浇花器的工作原理为参考,运用温湿度采集电路及单片机控制技术构成一个土壤温湿度采集与控制系统。再用数字电路控制自动给水系统及时的浇水系统供水。整个盆花自动浇水系统包括土壤温湿度的采集和显示、计数器的设置与显示两个个局部。土壤温湿度的采集和显示以ADC0809配合两个电位器为感应电路,将检测到的土壤温湿度值送入AT89C51单片机,再由单片机的I/O口输出到LCD液晶显示屏进行显。同时此湿度值也是是否给盆花浇水的参考值。它设计为智能和手动两个局部:智能浇水系统是通过单片机程序设定浇水的上下限值并与温湿度采集电路送入单片机的土壤湿度值相比拟,当传感器检测到的湿度值低于设定的下限值时,单片机输出一个信号,开始浇水,高于设定的上限值时再由单片机输出一个信号,停止浇水;手动局部是由单片机从数码管读入月份与每天的实时时刻,通过软件程序设定定时浇水的时间。通过按键开关对当前时间以及定时浇水时间进行设置,共阴数码管显示,当时间处在所设置的浇水时间内时,单片机发出控制信号,开始浇水。否那么,停止浇水。过本次毕业设计,让我进一步熟悉了一些元器件的功能和属性。也使我真正接触到了控制系统的设计,虽然是一个人们日常生活的小系统,但也让我明白了很多设计上应该注意的问题。比方实用性。经济性以及安装条件等。7致谢本毕业论文是在我的导师朱亚莉老师的亲切关心和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和鼓励着我。从课题的选择到工程的最终完成,朱亚莉等老师都始终给予我细心的指导和不懈的支持。在课题的整个研究工作期间,我曾遇到不少的困难和挫折,是他们给予我的帮助和鼓励,让我重新获得了继续前进的勇气和信心,在此期间,他们对我的论文提出了许多珍贵的修改意见,从而进一步增强了本论文的可读性和严密性。在此谨向朱老师致以衷心的感谢和深深的敬意!在此,我还要感谢在一起愉快的工作的各位同组人员,正是由于他们的帮助和支持团结配合克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!感谢我的同学、我的室友,在大学四年里,他们给我许多的关心和帮助,伴我度过许多快乐时光。和他们在一起度过的日子永远值得回味。感谢各级领导对我的教育培养。他们细心指导我的学习与研究,在此,我要向诸位老师深深地鞠上一躬。感谢我的父母亲和所有家人,焉得谖草,言树之背,养育之恩,无以回报。正是你们的无私爱心和殷殷期盼使得我终于能够走到今天,你们永远健康快乐就是我最大的心愿。8参考文献[1]李泉溪.单片机原理与应用实例仿真[M].北京:北京航天大学出版社,2009.8.[2]李敏.孟臣.数字式温湿度传感器及其应用技术[J].电子元器件应用,2004,11.[3]孙荣超.孙德超,数字温湿度数据记录仪的设计[J].现代电子技术,2005.7[4]黄鸿,吴石增.传感器及其应用技术[M]北京理工大学出版社,2008.7[5]刘灿军.实用传感器[M].北京:国防工业出版社,2004,6.[6]孙惠芹.单片机工程设计教程[M],北京:电子工业出版社,2009,6[7]宗光华,李大寨.多单片机系统应用技术[M].北京:国防工业出版社,2003.10.[8]王芳琴.单片机控制的节水灌溉系统的研究[J].华中农业大学.[9]赵振德.单片机原理及实验/实训[M].西安:西安电子科技大学出版社,2009.[10]艾永乐,付子仪.数字电子技术根底[M].北京:中国电力出版社,2008.9附录附录AProtues仿真图附录B温湿度采集与显示程序#include<at89x51.h>#defineuintunsignedint#defineucharunsignedchar#defineSTARTP3_4 //ATART,ALE接口。0->1->0:启动AD转换。#defineEOCP3_3 //转换完毕由0变1.#defineOUTPORTP2uchard1[]="Humidity:(RH)";uchard2[]="Temperature:";sbitlcdrs=P3^5; //液晶控制引脚sbitlcdrw=P3^6;sbitlcden=P3^7;sbitIN=P3^2;voiddelay(uintz) //液晶用延时函数{ ucharx,y; for(x=1000;x>1;x--) for(y=z;y>1;y--);}voidwrite_com(ucharcom) //写命令函数{ lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_date(uchardate) //写数据函数{ lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;}voidinit_lcd() //初始化函数{ lcden=0; //默认开始状态为关使能端,见时序图 lcdrw=0; //选择状态为写 write_com(0x38); write_com(0x0c); write_com(0x06); //显示模式设置,默认为0x38,不用变。 //显示清屏,将上次的内容去除,默认为0x01. //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪 //设置光标状态默认0x06,为读一个字符光标加1. write_com(0x01); //设置初始化数据指针,是在读指令的操作里进行的} //AD转换函数,返回转换结果。 //转换结果是3位数,小数点在百位与十位之间。unsignedintHumidity(){ unsignedintuiResult; IN=0; START=1; //启动AD转换。 START=0; while(EOC==0); //等待转换结束。 uiResult=OUTPORT; //出入转换结果。 //uiResult=(100*uiResult); uiResult=(20*uiResult)/51; //处理运算结果。 returnuiResult;}unsignedintTemperature(){ unsignedinttt; IN=1; START=1; //启动AD转换。 START=0; while(EOC==0); //等待转换结束。 tt=OUTPORT; //出入转换结果。 tt=(100*tt)/51; //处理运算结果。 returntt;}//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把电压显示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>voidHumidity_show(unsignedintuiNumber){ unsignedcharucaNumber[3],ucCount; if(uiNumber>99) uiNumber=99; ucaNumber[0]=uiNumber/10; //把计算数字的每个位存入数组。 ucaNumber[1]=uiNumber%10; //ucaNumber[2]=uiNumber%10; for(ucCount=0;ucCount<2;ucCount++) { write_date((ucaNumber[ucCount])|0x30); //从首位到末位逐一输出。 }}voidTemperature_show(uintuiNumber){ unsignedcharucaNumber[3],ucCount; ucaNumber[0]=uiNumber/100; ucaNumber[1]=uiNumber/10%10; ucaNumber[2]=uiNumber%10; for(ucCount=0;ucCount<3;ucCount++) { write_date((ucaNumber[ucCount])|0x30); if(ucCount==1) write_date('.'); }}ucharuc_Clock=0; //定时器0中断计数bitb_DATransform=0;uchari,j;voidmain(){ TMOD=0x01; //定时器0,模式1。 TH0=0x0c; TL0=0xb0; TR0=1; //启动定时器。 ET0=1; //开定时器中断。 EA=1; //开总中断 init_lcd(); write_com(0x80); for(i=0;i<16;i++) { write_date(d1[i]); } write_com(0xc0); for(i=0;i<12;i++) { write_date(d2[i]); } while(1) { if(b_DATransform==1) { b_DATransform=0; write_com(0x89); Humidity_show(Humidity()); //delay(2000); write_com(0xcc); Temperature_show(Temperature()); } }}//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>voidTime0()interrupt1{ if(uc_Clock==0) { uc_Clock=5; b_DATransform=1; } else uc_Clock--; TH0=0x0c; //恢复定时器0。 TL0=0xb0;}附录C计时器局部程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitlay1=P2^0;sbitlay2=P2^1;sbitkey0=P1^0;sbitkey1=P1^1;sbitkey2=P1^2;sbitkey3=P1^3;sbitkey4=P1^4;sbitkey5=P1^5;sbitkey6=P1^6;sbitkey7=P1^7;sbitkey32=P3^2;sbitkey33=P3^3;sbitkey34=P3^4;sbitkey35=P3^5;sbitbeep=P3^5;uchartime[3];ucharjt[8][3]={0,21,30,3,10,25, 6,12,43, 9,45,24, 12,26,19, 15,34,54, 18,25,57, 21,43,0};bitflag;ucharduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchartemp[8];uchart[8];ucharaa;voiddelay(uchart){while(--t);}voiddelayy(uchart){while(t--){delay(245); delay(245);}}voiddisplay(){staticuchari=0;temp[0]=duan[time[0]/10]; temp[1]=duan[time[0]%10];temp[2]=0x40; temp[3]=duan[time[1]/10];temp[4]=duan[time[1]%10];temp[5]=0x40;temp[6]=duan[time[2]/10];//秒temp[7]=duan[time[2]%10]; P0=0;//清空数据,防止有交替重影lay1=1;//段锁存lay1=0;P0=wei[i];//取位码lay2=1;//位锁存lay2=0;P0=temp[i];//取显示数据,段码lay1=1;//段锁存lay1=0; i++;if(i==8) i=0;}voidInit(){TMOD|=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;}voidTimer0_isr(void)interrupt1{unsignedintnum;TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==20)//大致1s{num=0; if(time[2]==59)//秒到60,分钟加1 { time[2]=0; if(time[1]==59)//分钟到60,小时加1 { time[1]=0; if(time[0]==23)//小时到24,回零 time[0]=0; elsetime[0]++; } elsetime[1]++; } elsetime[2]++;}}voidKeyScan(){ uchara,c,d; uchara0,a1,a2; if(!key0) { delayy(10);if(!key0) { {a0++; if(a0==10) a0=0; } while(!key0) display(); } } if(!key1) { delayy(10);if(!key1) { {a1++; if(a1==4) a1=0;} while(!key1) display(); } } if(!key2) { delayy(10);if(!key2) { a2=1; while(!key2) display(); } } if(!key3) { delayy(10);if(!key3) { a2=2; while(!key3) display(); } } if(!key4) { delayy(10);if(!key4) { {a++; if(a==2) a=0; } while(!key4) display(); } }if(!key5) { delayy(10);if(!key5) { {c++; if(c==4) c=0; } while(!key5) display(); } } if(!key6) { delayy(10);if(!key6) d=1; while(!key6) display(); } if(!key7) { delayy(10);if(!key7) d=2; while(!key7) display(); }switch(a0){case0:break;case1:{TR0=0;aa=time[0];time[0]=jt[0][0];jt[0][0]=aa;aa=time[1];time[1]=jt[0][1];jt[0][1]=aa;aa=time[2];time[2]=jt[0][2];jt[0][2]=aa;switch(a1){case0:break;case1:{if(a2==1){a2=0;time[0]+=1; if(time[0]>=24)time[0]=0;display(); }if(a2==2){a2=0; time[0]-=1;if(time[0]==255)time[0]=23;display(); } break;}case2:if(a2==1){a2=0;time[1]+=1; if(time[1]>=60)time[1]=0;display(); }if(a2==2){a2=0; time[1]-=1;if(time[1]==255)time[1]=59;display(); }break;case3:if(a2==1){a2=0;time[2]+=1; if(time[2]>=60)time[2]=0;display(); }if(a2==2){a2=0; time[2]-=1;if(time[2]==255)time[2]=59;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论