单片机---鱼缸自动换水系统设计(编辑修改稿)内容摘要:

时间及换水量选择 图 31 鱼缸尺寸示意 (长 2米,宽 ,高 ) 鱼缸的大小如图 31所示,首先我们要先求出鱼缸水 的体积 ,公式为: Vs=2***=( 立方米 ) (注: 的 意思是水的体积是鱼缸总体积的 85%) 根据有关资料证明,每天换水量占水总体积的 15%是 最 好的,对鱼儿的生长是最有利的,故可以算出每天换水量 ,所用公式为: Vh=*= 立方米 根据前面水泵 的 选择,计算每天只要排 15 分钟水就可以了。 由于家里自来水每分钟流量是一定的,根据实际考察所得算出进水只需要 20分钟。 算出每天换水的时间后,即在系统中设置, 本系统开机后显示实时时间,默认是自动控制两个电磁阀。 每天换水一般在中午,所以整个单片机程序设置如下 : 电磁阀 1接通时间为每天 13: 00,断开时间 13: 20。 电磁阀 2接通时间为每天 14: 00,断开时间 14: 15。 3. 2 控制过程: 在 自动模式中 , 系统 是根据我自己 设定的时间控制两个电磁阀在指定的时间接通和断开。 在 手动模式中 ,即 在非设置状态下 ,可通过按键控 制电磁阀的接通与断开,如下: 点按 K1键控制电磁阀 1 接通和断开 ; 点按 K2键控制电磁阀 2 接通和断开。 13 自动 与 手动控制 模式的 切换 方法为 : 首先 点按 K3键可查看状态 , 自动数码管显示 OPEN, 手动显示 OFF, 继续点按 K3键切换自动 /手动,数码管 会 有相应的显示。 在设置定时时间状态下: LED2( out1on)亮表示设置电磁阀 1 定开时间 LED3( out1off)亮表示设置电磁阀 1定关时间 LED4( out2on)亮表示设置电磁阀 2 定开时间 LED4( out1off)亮表示设置电磁阀 2定关时间 详细内容请看图 32 图 32 14 主程序设计 子程序设计 主要控制子程序说明如下: ● Timer2_Server:定时器 2 计时中断程序每隔 中断一次; ● DELAY:延时子程序; ● feng: 蜂鸣器鸣 响处理程序; ● display:工作 LED 闪动控制;转换数据为七段显示器显示数据并写入显示内存内 主程序开始 扫描显示器更新时间数据 初始化定时器 初始化变量 K1: 继电器 1 ON/OFF K2: 继电器 2 ON/OFF K3:点按显示钟控状态,长按设置定时 时间 K4:点按显示秒,长按设置现在的时间 是否按 K KK K4 键。 15 ● LED_out:七段数码管显 示程序; ● CONV:将时及分的数据转换为七段显示器显示数据并写入显示内存内; ● key: 按 *键检测 包括设置现在的时间小时及分钟,查看 /设置定时时间等 中 断时间到 对时分秒进行计数 执行 继电器 1 ON/OFF 继电器 2 ON/OFF 1秒是否到。 对比 2 路定时时间是否到。 中 断退出 16 /********************************************** - 与数码管中的 ABCDEFGH 端口连接。 - 与数码管中的 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。 sbit BP=P3^2。 sbit Aout=P1^6。 sbit Aout2=P1^7。 17 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(。 i0。 i) for(x=114。 x0。 x)。 //=228,=114 } void feng(uchar i) /***蜂鸣器 ***/ { uint x。 for(。 i0。 i){BP=~BP。 for(x=114。 x0。 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。 /* =8F80,=1F00 */ RCAP2L=0x80。 ET2=1。 // 允许 T2 定时器中断 TR2=1。 // 启动 T2 定时器 EA=1。 while(1) { display()。 key()。 18 } } /***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。 } } /***显 ***。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。