为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

2012毕业设计--鱼缸自动换水系统设计

2017-09-01 32页 doc 314KB 127阅读

用户头像

is_601191

暂无简介

举报
2012毕业设计--鱼缸自动换水系统设计目 录: 第一章 总体方案设计„„„„„„„„„„„„„„„„„„„„3 第二章 硬件设计 „„„„„„„„„„„„„„„„„„„4 2.1 控制核心AT89S52单片机„„„„„„„„„„„„„„„„4 2.2 八段四位共阳极数码管 „„„„„„„„„„„„„„„„7 2.3稳压电路设计 „„„„„„„„„„„„„„„„„„„„9 2.4电磁阀的结构原理 „„„„„„„„„„„„„„„„„„10 2.5热继电器 „„„„„„„„„„„„„„„„„„„„„„10 2.6微型水泵 „„„„„„„„„„„„„„„„„...
2012毕业设计--鱼缸自动换水系统设计
目 录: 第一章 总体设计„„„„„„„„„„„„„„„„„„„„3 第二章 硬件设计 „„„„„„„„„„„„„„„„„„„4 2.1 控制核心AT89S52单片机„„„„„„„„„„„„„„„„4 2.2 八段四位共阳极数码管 „„„„„„„„„„„„„„„„7 2.3稳压电路设计 „„„„„„„„„„„„„„„„„„„„9 2.4电磁阀的结构原理 „„„„„„„„„„„„„„„„„„10 2.5热继电器 „„„„„„„„„„„„„„„„„„„„„„10 2.6微型水泵 „„„„„„„„„„„„„„„„„„„„„„11 2.7水位器的选择 „„„„„„„„„„„„„„„„„„„„11 第三章 软件设计 „„„„„„„„„„„„„„„„„„„„„„12 3.1换水时间及换水量选择 „„„„„„„„„„„„„„„„12 3.2控制过程 „„„„„„„„„„„„„„„„„„„„„„12 3.3程序设置 „„„„„„„„„„„„„„„„„„„„„„14 3.4编程程序 „„„„„„„„„„„„„„„„„„„„„„16 第四章 系统安装与调试 „„„„„„„„„„„„„„„„„„„26 4.1软件调试 „„„„„„„„„„„„„„„„„„„„„„26 4.2系统调试 „„„„„„„„„„„„„„„„„„„„„„26 结束语 „„„„„„„„„„„„„„„„„„„„„„„„„„27 辞谢 „„„„„„„„„„„„„„„„„„„„„„„„„„„27 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„28 附录1 „„„„„„„„„„„„„„„„„„„„„„„„„„„29 附录2 „„„„„„„„„„„„„„„„„„„„„„„„„„„30 摘 要: 养鱼的朋友都知道,水质对鱼儿影响是最严重的,好的水质可以使你的鱼儿健康生长,怎样才能保证水质呢,只有经常换水,对现在上班族来说换水是很麻烦的,占用很长的时间,对鱼缸的市场前景考虑,自动换水鱼缸实现的必要性和可行性,选用合适的单片机芯片和多种外围器件,完成硬件和软件的整体设计,最终实现了一个每天按时定量换水控制系统 关键词:自动换水系统;定时控制;实时显示 -1- 第一章 总体方案设计 鱼缸自动换水系统的原理图如图1-1所示: 图1-1 鱼缸自动换水系统原理图 原理图中的电磁阀(2)和水位器主要控制水位起到双保险,用单片机控制更精确。有效防止水流出缸外。电磁阀(1)和抽水马达是把想要换的沉水抽出,换水的多少由单片机设定,流量的大小是用微量调控运行的情况。 工作过程为:用单片机控制电磁阀.电源接通电磁阀就开起,水管就通了。反之电磁阀电源关闭水管断流。进水管直接接在自来水管子上。进水的多少要看想要换多少水(抽掉的水)这也是用单片机控制电磁阀和抽水马达。排水管接在抽水马达喷水口只要接通电源水就会往外排,如果每天按排水一小时30升水来计算的话,一个星期能换掉210升水(定时器控制排水电磁阀开起电源一小时)。方法是用定时器设定时间比如下午1-2点排水 2-3点进水 ,这个过程就是自动循环的换水。定时器设定时间长短和调节电磁阀上的微调是控制换水的多少和水的流量。水位器是控制水位的高度,进水管接在水位器上起到双重保护,以防水溢出鱼缸。 -2- 第二章 硬件设计 本章中,我主要介绍组成自动换水鱼缸的硬件,以及它们之间的联系,在这个系统中起到的作用。 2. 1 控制核心AT89S52单片机 2.1.1功能特性概述 AT89S52是一种低功耗、高性能CMOS8位微控制器,在系统可编程Flash中拥有8k容量的存储器。它是使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。而且Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节可编程Flash存储器,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工UART串行通道,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 2.1.2 单片机的特点主要有一下几点: 与MCS-51单片机产品兼容; 1000次擦写周期; 全静态操作:0Hz,33Hz; 三级加密程序存储器; 八个中断源; 低功耗空闲和掉电模式; 掉电后中断可唤醒; 掉电标识符; -3- 2.1.3 AT89S52的芯片管脚图如图2-1 图2-1 AT89S52芯片管脚图 各引脚的功能说明: VCC:电源 GND: 接地点 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱;为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),含义如下: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电 -4- 流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用;在flash编程和校验时,P3口也接收一些控制信号。引脚的功能如2-1所示: 表2-1 P3口的特殊功能 引脚名称 含义 P3.0 RXD 串行输入 P3.1 TXD 串行输出 P3.2 INT0 外部中断0 P3.3 INT0 外部中断0 P3.4 T0 定时器0外部输入 P3.5 T1 定时器1外部输入 P3.6 WR 外部数据存储器写选通 P3.7 RD 外部数据存储器写选通 RST: 复位输入。晶振工作时,RST脚持续2 个机器周期时,高电平将使单片机复位。当看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。另外,在地址8EH上的特殊寄存器AUXR上的DISRTO位可以使此功能无效,当DISRTO处于默认状态下,复位高电平有效。 ALE/PROG:地址锁存控制信号ALE是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。 在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。 如果需要,通过将地址为8EH的SFR的第0位置设置为 “1”时,ALE操作将无效。这一位置为“0”时,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。 -5- PSEN:表示外部程序存储器选通信号。 当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期中被激活两次,而在访问外部数据存储器时,PSEN不被激活。 EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。 在flash编程期间,EA也接收12伏VPP电压。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 2.1.4单片机硬件资源的分配 P0.0-P0.7连接四位共阳极数码管; P2(0连接按键K1; P2(1 连接按键K2; P2(2 连接按键K3; P2(3连接按键K4; 2.2 七段四位共阳极数码管 2.2.1数码管介绍 七段数码管是由7个发光二极管单构成。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。 结构图如图2-2所示: -6- 图2-2 数码管结构示意 2.2.2数码管的驱动方式 数码管与单片机的连接电路如图2-3所示,数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,每个数码管显示出字形取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就会显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就会使各个数码管轮流受控显示,这就是动态驱动。在轮流 -7- 显示过程中,每位数码管的点亮时间为1,2ms,能够节省大量的I/O端口,而且功耗更低。 图2-3 数码管与单片机连接电路 2.3稳压电路设计 稳压电路中含有元器件H7805,它的外形图如图2-4所示,它是3 端正稳压电路,TO-220 封装,能提供多种固定的输出电压,应用范围比较广。内含过流、过热和过载保护电路,带散热片时,输出电流可达 1A。虽然是固定稳压电路,但使用外接元件,可获得不同的电压和电流。 它的各个脚的含义为: 1―输入,INPUT ;2―地,GND ;3―输出,OUTPUT TO-220。 图2-4 元器件H7805的外形图 它的主要特点:输出电流可达 1A;输出电压有5V ;内含有过热保护、短路保护、输出晶体管 SOA 保护;以及一些极限值: (Ta=25?) VI——输入电压(VO=5,18V)??????????? 35V ; RθJC——热阻???????????? 5?/W; RθJA——热阻?????????? 65?/W; -8- TOPR——工作结温范围??????????? 0~125?; H7805在硬件电路中的使用,起到固定输出电压作用,使按键更好的使用,如图所示2-5所示: 图2-5 H7805在电路中的连接 2(4电磁阀的结构原理 直动式电磁阀有常闭型和常开型二种。在我的鱼缸自动换水的系统中主要采用常闭型,它在断电时呈关闭状态,当线圈通电时产生电磁力,使动铁芯克服弹簧力同静铁芯吸合直接开启阀,介质呈通路;当线圈断电时电磁力消失,动铁芯在弹簧力的作用下复位,直接关闭阀口,介质不通。此电磁阀结构简单,动作可靠,在零压差和微真空下正常工作。结构如图2-6所示: 图2-6 直动式电磁阀结构图 2.5热继电器 -9- 继电器在通俗意义上来说就是开关,在条件满足的情况下关闭或者开启。继电器的开关特性在很多的控制系统尤其是离散的控制系统中得到广泛的应用。在我的鱼缸自动换水系统中用到了5V继电器。它在电路中为交流电动机起到过载保护作用,也起到了开关的作用。在我的系统电路中,继电器的位置如图2-7所示: 图2-7 继电器与原理图 由图中可以看出继电器是用作开关使用的,控制电磁阀开与关, 当K5接通时,电磁阀1运转 当K6接通时,电磁阀2运转 2(6微型水泵 微型水泵,在我鱼缸自动换水系统中起到抽水以及杂质的作用。选用的水泵抽水量为0.015立方米/min 它的主要特点有:体积超小;独有水气两用功能,工作介质可以为气体和液体(非油,无强腐蚀),有水抽水、有气抽气;可24小时连续运转;长期空转属正常工作,不会损坏泵;具备可靠自吸功能,吸程:1.5米,扬程:3米。无油、不污染工作介 质,免维护、任意方向安装。 2. 7水位器的选择 在我的自动换水系统里,定位器其实就是抽水马桶里的定位器,为什么选择它呢,主要是价格便宜,市场广,在马桶专卖店里就可以买到,定位器的原理很简单,就是靠水的浮力和水的压力来控制的。把定位器连接进水管上,起到双重保护。 -10- 第 三 章 软 件 设 计 我的鱼缸自动换水系统是用单片机控制电磁阀的开与关,每天换水的时间也是经过精确的计算设置的。可在自动模式中的设置时间,也可以通过手动设置时间。 3(1 换水时间及换水量选择 图3-1 鱼缸尺寸示意(长2米,宽0.65米,高0.8米) 鱼缸的大小如图3-1所示,首先我们要先求出鱼缸水的体积,公式为: Vs=2*0.65*0.8*0.85=0.884(立方米) (注: 0.85的意思是水的体积是鱼缸总体积的85%) 根据有关资料证明,每天换水量占水总体积的15%是最好的,对鱼儿的生长是最有利的,故可以算出每天换水量,所用公式为: Vh=0.884*0.15=0.1326立方米 根据前面水泵的选择,计算每天只要排15分钟水就可以了。由于家里自来水每分钟流量是一定的,根据实际考察所得算出进水只需要20分钟。 算出每天换水的时间后,即在系统中设置,本系统开机后显示实时时间,默认是自动控制两个电磁阀。每天换水一般在中午,所以整个单片机程序设置如下: 电磁阀1接通时间为每天13:00,断开时间13:20。 电磁阀2接通时间为每天14:00,断开时间14:15。 3. 2控制过程: 在自动模式中,系统是根据我自己设定的时间控制两个电磁阀在指定的时间接通和断开。 在手动模式中,即在非设置状态下,可通过按键控制电磁阀的接通与断开,如下: -11- 点按K1键控制电磁阀1接通和断开; 点按K2键控制电磁阀2接通和断开。 自动与手动控制模式的切换方法为: 首先点按K3键可查看状态, 自动数码管显示OPEN, 手动显示OFF, 继续点按K3 键切换自动/手动,数码管会有相应的显示。 在设置定时时间状态下: LED2(out1on)亮表示设置电磁阀1定开时间 LED3(out1off)亮表示设置电磁阀1定关时间 LED4(out2on)亮表示设置电磁阀2定开时间 LED4(out1off)亮表示设置电磁阀2定关时间 -2 详细内容请看图3 图3-2 -12- 3.3程序设计 3.3.1 主程序设计 主程序开始 初始化变量 初始化定时器 扫描显示器更新时间数据 是否按K1、K2、 K3、K4键, K1: 继电器1 ON/OFF K2: 继电器2 ON/OFF K3:点按显示钟控状态,长按设置定时时间 K4:点按显示秒,长按设置现在的时间 3.3.2 子程序设计 主要控制子程序说明如下: ? Timer2_Server:定时器2计时中断程序每隔31.25ms中断一次; ? DELAY:延时子程序; ? feng:蜂鸣器鸣响处理程序; -13- ? display:工作LED闪动控制;转换数据为七段显示器显示数据并写入显 示内存内 ? LED_out:七段数码管显示程序; ? CONV:将时及分的数据转换为七段显示器显示数据并写入显示内存内; ? key:按*键检测包括设置现在的时间小时及分钟,查看/设置定时时间等 中断时间到 1秒是否到, 对时分秒进行计数 对比2路定时时 间是否到, 执行 继电器1 ON/OFF 继电器2 ON/OFF 中断退出 -14- 3.4编程程序 /********************************************** P0.0,P0.7与数码管中的ABCDEFGH端口连接。 P1.0,P1.3与数码管中的S1,S2,S3,S4端口。 **********************************************/ #include #define uint unsigned int #define uchar unsigned char uchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xFF,0xC0,0x8E,0x8C,0x86,0xC8,}; /* O F P E N */ uchar timecount,Hour,Cent,Second,qian,bai,shi,ge,THour,TCent,offTH,offTC, onTH2,onTC2,offTH2,offTC2; uchar disL,disH,keytemp,mbiao,App,onHour,onCent,offHour,offCent; uchar onHour2,onCent2,offHour2,offCent2; bit biaoA; sbit led0=P1^0; sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; sbit led4=P3^7; sbit K0=P2^0; sbit K1=P2^1; sbit K2=P2^2; sbit K3=P2^3; -15- sbit BP=P3^2;sbit Aout=P1^6;sbit Aout2=P1^7; void display(); void key(); uchar AddReduce(uchar dd,uchar max,char min); void Alarm_clock(); void LED_out(); void delay(uchar i) /***延时***/ { uint x; for(;i>0;i--) for(x=114;x>0;x--); //22.1184=228,,11.0592=114 } void feng(uchar i) /***蜂鸣器***/ { uint x; for(;i>0;i--){BP=~BP; for(x=114;x>0;x--);} BP=1; } void main(void) { Hour=12;Cent=00;//Second=50; onHour=13;onCent=0;offHour=13;offCent=20;biaoA=1; onHour2=14;onCent2=0;offHour2=14;offCent2=15; RCAP2H=0x8F; /* 11.0592=8F80,,22.1184=1F00 */ RCAP2L=0x80; ET2=1; // 允许T2定时器中断 TR2=1; // 启动T2定时器 EA=1; while(1) { display(); -16- key(); } } /***T2***中***断***函***数***/ void Timer2_Server(void) interrupt 5 using 3 { TF2=0; //清除溢出标记 timecount++; if(timecount==32) {timecount=0; Second++; if(Second==60) {Second=0; Cent++; if(Cent==60) {Cent=0; Hour++; if(Hour==24) Hour=0; } } Alarm_clock(); } switch (mbiao) { case 0: {disH=Hour;disL=Cent;} break; case 1: {disH=100;disL=Second;} break; } } /***显***示***函***数***/ void display() {if(disH==100) -17- {qian=10;bai=10;shi=disL/10;ge=disL%10;} else {if(disL==100) {qian=disH/10;bai=disH%10;shi=10;ge=10;} else {qian=disH/10;bai=disH%10;shi=disL/10;ge=disL%10;} } if(mbiao>3)if(timecount>16) {if(keytemp%2){shi=10;ge=10;} if(keytemp%2==0){qian=10;bai=10;}} LED_out(); } void LED_out() { if(qian){ //千位处理 P0=dispcode[qian]; led0=0;delay(2);led0=1;} P0=dispcode[bai]; //百位处理 led1=0;delay(2);led1=1; if((timecount<16)&&(mbiao==0)) //十位处理 P0=dispcode[shi]&0x7f; else P0=dispcode[shi]; led2=0;delay(2);led2=1; if((timecount<16)&&(mbiao==0)) //个位处理 P0=dispcode[ge]&0x7f; else P0=dispcode[ge]; led3=0;delay(2);led3=1; if(mbiao==5){ switch (keytemp) -18- { case 0: {P0=0xFE;} break; case 1: {P0=0xFE;} break; case 2: {P0=0xFD;} break; case 3: {P0=0xFD;} break; case 4: {P0=0xFB;} break; case 5: {P0=0xFB;} break; case 6: {P0=0xF7;} break; case 7: {P0=0xF7;} break; } led4=0;delay(2);led4=1; } } /***按***键***检***测***/ void key() { uchar i,temp; if(K3==0){delay(5);if(K3==0) {while(!K3){display();temp++; if(temp==125){if(mbiao==0) {feng(20);mbiao=4;THour=Hour;TCent=Cent;keytemp=0;break;} else {temp=0;break;} }} if(mbiao<4){ feng(20);mbiao++; if(mbiao==2)mbiao=0;} if((temp<125)&&(mbiao>3)){feng(20);keytemp++; -19- switch (mbiao) { case 4: if(keytemp==2)mbiao=0; break; case 5: if(keytemp==8)mbiao=0; break; } } while(!K3)display();} temp=0; } if(mbiao==0) {if(K2==0) {delay(5); if(K2==0) {while(!K2) {display();temp++; if(temp==125) {feng(20);mbiao=5;keytemp=0; THour=onHour;TCent=onCent;offTH=offHour;offTC=offCent; onTH2=onHour2;onTC2=onCent2;offTH2=offHour2;offTC2=offCent2; while(!K2) {disH=THour;disL=TCent;display();} break; } } if(temp<125){feng(20);mbiao=6;} temp=0; } } } switch (mbiao) -20- { case 0:{if(K0==0){delay(5);if(K0==0) {feng(20);Aout=~Aout;}} if(K1==0){delay(5);if(K1==0) {feng(20);Aout2=~Aout2;}} while(!(K0&K1))LED_out(); } break; case 2:{;} break; case 3: {} break; case 4:{if(keytemp==0){THour=AddReduce(THour,23,0);disH=THour;disL=TCent ;display();} if(keytemp==1){TCent=AddReduce(TCent,59,0);disH=THour;disL=TCent;d isplay();} if(K2==0){delay(5);if(K2==0) //保存数据并退出 {TR2=0;Second=0;timecount=0;Hour=THour; Cent=TCent;TR2=1;feng(20);mbiao=0; while(!K2)display();}}} break; case 5:{if(keytemp==0){THour=AddReduce(THour,23,0);disH=THour;disL=TCent ;display();} if(keytemp==1){TCent=AddReduce(TCent,59,0);disH=THour;disL=TCent;d isplay();} -21- if(keytemp==2){offTH=AddReduce(offTH,23,0);disH=offTH;disL=offTC;display();} if(keytemp==3){offTC=AddReduce(offTC,59,0);disH=offTH;disL=offTC;display();} if(keytemp==4){onTH2=AddReduce(onTH2,23,0);disH=onTH2;disL=onTC2;display();} if(keytemp==5){onTC2=AddReduce(onTC2,59,0);disH=onTH2;disL=onTC2;display();} if(keytemp==6){offTH2=AddReduce(offTH2,23,0);disH=offTH2;disL=offTC2;display();} if(keytemp==7){offTC2=AddReduce(offTC2,59,0);disH=offTH2;disL=offTC2;display();} if(K2==0){delay(5);if(K2==0) //保存数据并退出 {feng(20);mbiao=0;keytemp=0; onHour=THour;onCent=TCent;offHour=offTH;offCent=offTC; onHour2=onTH2;onCent2=onTC2;offHour2=offTH2;offCent2=offTC2; while(!K2)display();}} } break; case 6: {i=100;while(--i) {if(biaoA){qian=11;bai=13;shi=14;ge=15;LED_out();} else {qian=0;bai=11;shi=12;ge=12;LED_out();} if(K2==0){delay(5);if(K2==0){feng(20);biaoA=~biaoA; i=100; while(!K2) {if(biaoA){qian=11;bai=13;shi=14;ge=15;LED_out();} else -22- {qian=0;bai=11;shi=12;ge=12;LED_out();} }}}} mbiao=0;} break; } } /*加减按键子程序*/ uchar AddReduce(char dd,uchar max,uchar min) {uint x=15; if(K1==0){delay(5);if(K1==0){ feng(20);dd++; if(dd>max) dd=min; while(--x){display();if(K1)break;} }} if(K0==0){delay(5);if(K0==0){ feng(20);dd--; if(dd
/
本文档为【2012毕业设计--鱼缸自动换水系统设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索