毕业设计(论文)基于AT89S52单片机的鱼缸自动换水系统设计_第1页
毕业设计(论文)基于AT89S52单片机的鱼缸自动换水系统设计_第2页
毕业设计(论文)基于AT89S52单片机的鱼缸自动换水系统设计_第3页
毕业设计(论文)基于AT89S52单片机的鱼缸自动换水系统设计_第4页
毕业设计(论文)基于AT89S52单片机的鱼缸自动换水系统设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、河南农业职业学院毕业设计报告河南农业职业学院毕业设计报告课题:鱼缸自动换水系统设计系 部: 电子信息工程系专 业: 电气自动化班 级: 07-1姓 名: xxx指导老师: xxx2010年6月26日目 录:第一章 总体方案设计3第二章 硬件设计 4 2.1 控制核心at89s52单片机42.2 八段四位共阳极数码管 72.3稳压电路设计 92.4电磁阀的结构原理 102.5热继电器 102.6微型水泵 112.7水位器的选择 11第三章 软件设计 123.1换水时间及换水量选择 123.2控制过程 123.3程序设置 143.4编程程序 16第四章 系统安装与调试 264.1软件调试 264.

2、2系统调试 26结束语 27辞谢 27参考文献 28附录1 29附录2 30摘 要:养鱼的朋友都知道,水质对鱼儿影响是最严重的,好的水质可以使你的鱼儿健康生长,怎样才能保证水质呢?只有经常换水,对现在上班族来说换水是很麻烦的,占用很长的时间,对鱼缸的市场前景考虑,分析自动换水鱼缸实现的必要性和可行性,选用合适的单片机芯片和多种外围器件,完成硬件和软件的整体设计,最终实现了一个每天按时定量换水控制系统关键词:自动换水系统;定时控制;实时显示第一章 总体方案设计鱼缸自动换水系统的原理图如图1-1所示:图1-1 鱼缸自动换水系统原理图原理图中的电磁阀(2)和水位器主要控制水位起到双保险,用单片机控制

3、更精确。有效防止水流出缸外。电磁阀(1)和抽水马达是把想要换的沉水抽出,换水的多少由单片机设定,流量的大小是用微量调控运行的情况。工作过程为:用单片机控制电磁阀.电源接通电磁阀就开起,水管就通了。反之电磁阀电源关闭水管断流。进水管直接接在自来水管子上。进水的多少要看想要换多少水(抽掉的水)这也是用单片机控制电磁阀和抽水马达。排水管接在抽水马达喷水口只要接通电源水就会往外排,如果每天按排水一小时30升水来计算的话,一个星期能换掉210升水(定时器控制排水电磁阀开起电源一小时)。方法是用定时器设定时间比如下午1-2点排水 2-3点进水 ,这个过程就是自动循环的换水。定时器设定时间长短和调节电磁阀上

4、的微调是控制换水的多少和水的流量。水位器是控制水位的高度,进水管接在水位器上起到双重保护,以防水溢出鱼缸。第二章 硬件设计本章中,我主要介绍组成自动换水鱼缸的硬件,以及它们之间的联系,在这个系统中起到的作用。2. 1 控制核心at89s52单片机2.1.1功能特性概述at89s52是一种低功耗、高性能cmos8位微控制器,在系统可编程flash中拥有8k容量的存储器。它是使用atmel 公司高密度非易失性存储器技术制造,与工业80c51 产品指令和引脚完全兼容。而且flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得at89

5、s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s52具有以下标准功能: 8k字节可编程flash存储器,256字节ram,32 位i/o 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工uart串行通道,片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2.1.2 单片机的特点主要有一下几点:l 与mcs-5

6、1单片机产品兼容;l 1000次擦写周期;l 全静态操作:0hz33hz;l 三级加密程序存储器;l 八个中断源;l 低功耗空闲和掉电模式;l 掉电后中断可唤醒;l 掉电标识符;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口也用来接收指令字节;在程序校验时

7、,输出指令字节。程序校验时,需要外部上拉电阻。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 逻辑电平。对

8、p2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行movxdptr)时,p2 口送出高八位地址。在这种应用中,p2 口使用很强的内部上拉发送1。在使用8位地址(如movx ri)访问外部数据存储器时,p2口输出p2锁存器的内容。在flash编程和校验时,p2口也接收高8位地址字节和一些控制信号。p3 口:p3 口是一个具有内部上拉电阻的8 位双向i/o 口,p2 输出缓冲器能驱动4 个ttl 逻辑电平。对p3 端口写“1”时,内部上拉电阻把

9、端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。p3口亦作为at89s52特殊功能(第二功能)使用;在flash编程和校验时,p3口也接收一些控制信号。引脚的功能如表2-1所示:表2-1 p3口的特殊功能引脚名称含义p3.0 rxd串行输入p3.1 txd串行输出p3.2 int0外部中断0p3.3 int0外部中断0p3.4 t0定时器0外部输入p3.5 t1定时器1外部输入p3.6 wr外部数据存储器写选通 p3.7 rd外部数据存储器写选通rst: 复位输入。晶振工作时,rst脚持续2 个机器周期时,高电平将使单片机复位。当看门

10、狗计时完成后,rst 脚输出96 个晶振周期的高电平。另外,在地址8eh上的特殊寄存器auxr上的disrto位可以使此功能无效,当disrto处于默认状态下,复位高电平有效。ale/prog:地址锁存控制信号ale是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(prog)也用作编程输入脉冲。在一般情况下,ale 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ale脉冲将会跳过。如果需要,通过将地址为8eh的sfr的第0位置设置为 “1”时,ale操作将无效。这一位置为“0”时,ale 仅在执行mo

11、vx 或movc指令时有效。否则,ale 将被微弱拉高。这个ale 使能标志位(地址为8eh的sfr的第0位)的设置对微控制器处于外部执行模式下无效。psen:表示外部程序存储器选通信号。当at89s52从外部程序存储器执行外部代码时,psen在每个机器周期中被激活两次,而在访问外部数据存储器时,psen不被激活。ea/vpp:访问外部程序存储器控制信号。为使能从0000h 到ffffh的外部程序存储器读取指令,ea必须接gnd。为了执行内部程序指令,ea应该接vcc。在flash编程期间,ea也接收12伏vpp电压。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反

12、相放大器的输出端。2.1.4单片机硬件资源的分配p0.0-p0.7连接四位共阳极数码管;p20连接按键k1;p21 连接按键k2;p22 连接按键k3;p23连接按键k4;2.2 七段四位共阳极数码管2.2.1数码管介绍七段数码管是由7个发光二极管单构成。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(com)的数码管。共阳数码管在应用时应将公共极com接到+5v,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。结构图如图2-2所示:图2-2 数码管结构示意2.2.2数码管的驱动方式数码管与单片机的连接电路如图2-3所示,数码管动态显

13、示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极com增加位选通控制电路,位选通由各自独立的i/o线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,每个数码管显示出字形取决于单片机对位选通com端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就会显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的com端,就会使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,能够节省大量的i/o端口,而且功耗更低。图

14、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

15、18v) 35v ;rjc热阻 5/w;rja热阻 65/w;topr工作结温范围 0125;h7805在硬件电路中的使用,起到固定输出电压作用,使按键更好的使用,如图所示2-5所示:图2-5 h7805在电路中的连接24电磁阀的结构原理 直动式电磁阀有常闭型和常开型二种。在我的鱼缸自动换水的系统中主要采用常闭型,它在断电时呈关闭状态,当线圈通电时产生电磁力,使动铁芯克服弹簧力同静铁芯吸合直接开启阀,介质呈通路;当线圈断电时电磁力消失,动铁芯在弹簧力的作用下复位,直接关闭阀口,介质不通。此电磁阀结构简单,动作可靠,在零压差和微真空下正常工作。结构如图2-6所示:图2-6 直动式电磁阀结构图2.

16、5热继电器继电器在通俗意义上来说就是开关,在条件满足的情况下关闭或者开启。继电器的开关特性在很多的控制系统尤其是离散的控制系统中得到广泛的应用。在我的鱼缸自动换水系统中用到了5v继电器。它在电路中为交流电动机起到过载保护作用,也起到了开关的作用。在我的系统电路中,继电器的位置如图2-7所示:图2-7 继电器与原理图由图中可以看出继电器是用作开关使用的,控制电磁阀开与关,当k5接通时,电磁阀1运转当k6接通时,电磁阀2运转26微型水泵微型水泵,在我鱼缸自动换水系统中起到抽水以及杂质的作用。选用的水泵抽水量为0.015立方米/min它的主要特点有:体积超小;独有水气两用功能,工作介质可以为气体和液

17、体(非油,无强腐蚀),有水抽水、有气抽气;可24小时连续运转;长期空转属正常工作,不会损坏泵;具备可靠自吸功能,吸程:1.5米,扬程:3米。无油、不污染工作介质,免维护、任意方向安装。2. 7水位器的选择 在我的自动换水系统里,定位器其实就是抽水马桶里的定位器,为什么选择它呢?主要是价格便宜,市场广,在马桶专卖店里就可以买到,定位器的原理很简单,就是靠水的浮力和水的压力来控制的。把定位器连接进水管上,起到双重保护。第 三 章 软 件 设 计我的鱼缸自动换水系统是用单片机控制电磁阀的开与关,每天换水的时间也是经过精确的计算设置的。可在自动模式中的设置时间,也可以通过手动设置时间。31 换水时间及

18、换水量选择图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分钟。算出每天换水的时间后,即在系统中设置,本系统开机后显示实时时间,默认

19、是自动控制两个电磁阀。每天换水一般在中午,所以整个单片机程序设置如下:电磁阀1接通时间为每天13:00,断开时间13:20。电磁阀2接通时间为每天14:00,断开时间14:15。3. 2控制过程:在自动模式中,系统是根据我自己设定的时间控制两个电磁阀在指定的时间接通和断开。在手动模式中,即在非设置状态下,可通过按键控制电磁阀的接通与断开,如下:点按k1键控制电磁阀1接通和断开;点按k2键控制电磁阀2接通和断开。自动与手动控制模式的切换方法为:首先点按k3键可查看状态, 自动数码管显示open, 手动显示off, 继续点按k3键切换自动/手动,数码管会有相应的显示。在设置定时时间状态下: led

20、2(out1on)亮表示设置电磁阀1定开时间 led3(out1off)亮表示设置电磁阀1定关时间 led4(out2on)亮表示设置电磁阀2定开时间 led4(out1off)亮表示设置电磁阀2定关时间详细内容请看图3-2图3-23.3程序设计3.3.1 主程序设计主程序开始扫描显示器更新时间数据初始化定时器初始化变量k1: 继电器1 on/offk2: 继电器2 on/offk3:点按显示钟控状态,长按设置定时时间k4:点按显示秒,长按设置现在的时间是否按k1、k2、k3、k4键?3.3.2 子程序设计主要控制子程序说明如下: timer2_server:定时器2计时中断程序每隔31.25

21、ms中断一次; delay:延时子程序; feng:蜂鸣器鸣响处理程序; display:工作led闪动控制;转换数据为七段显示器显示数据并写入显示内存内 led_out:七段数码管显示程序; conv:将时及分的数据转换为七段显示器显示数据并写入显示内存内; key:按*键检测包括设置现在的时间小时及分钟,查看/设置定时时间等中断时间到对时分秒进行计数执行继电器1 on/off继电器2 on/off1秒是否到?对比2路定时时间是否到?中断退出3.4编程程序/*p0.0p0.7与数码管中的abcdefgh端口连接。 p1.0p1.3与数码管中的s1,s2,s3,s4端口。 */#include

22、 #define uint unsigned int#define uchar unsigned charuchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc0,0x8e,0x8c,0x86,0xc8,;/* o f p en */ uchar timecount,hour,cent,second,qian,bai,shi,ge,thour,tcent,offth,offtc,onth2,ontc2,offth2,offtc2;uchar disl,dish,keytemp,mbiao,ap

23、p,onhour,oncent,offhour,offcent;uchar onhour2,oncent2,offhour2,offcent2;bit biaoa;sbit led0=p10;sbit led1=p11;sbit led2=p12;sbit led3=p13;sbit led4=p37;sbit k0=p20;sbit k1=p21;sbit k2=p22;sbit k3=p23;sbit bp=p32;sbit aout=p16;sbit aout2=p17;void display();void key();uchar addreduce(uchar dd,uchar ma

24、x,char min);void alarm_clock();void led_out();void delay(uchar i) /*延时*/ uint x; for(;i0;i-) for(x=114;x0;x-); /22.1184=228,11.0592=114void 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

25、;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();key();/*t2*中*断*函*数*/void timer2_server(void) interrupt 5 using 3tf2=0;/清除溢出标记timecount+;if(timecount=32)timecount=0;second+;if(second=60)seco

26、nd=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)qian=10;bai=10;shi=disl/10;ge=disl%10;else if(disl=100)qian=dish/10;bai=dish%10;shi=10;ge=10;elseqian=dish/10;ba

27、i=dish%10;shi=disl/10;ge=disl%10;if(mbiao3)if(timecount16)if(keytemp%2)shi=10;ge=10;if(keytemp%2=0)qian=10;bai=10;led_out();void led_out()if(qian) /千位处理 p0=dispcodeqian; led0=0;delay(2);led0=1;p0=dispcodebai;/百位处理 led1=0;delay(2);led1=1;if(timecount16)&(mbiao=0) /十位处理p0=dispcodeshi&0x7f;else p0=disp

28、codeshi; led2=0;delay(2);led2=1; if(timecount16)&(mbiao=0) /个位处理p0=dispcodege&0x7f;else p0=dispcodege; led3=0;delay(2);led3=1;if(mbiao=5)switch (keytemp)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;

29、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;elsetemp=0;break;if(mbiao4)feng(20);mbiao+;if(mbiao=2)mbiao=0;if(temp3)feng(20);keytemp+;sw

30、itch (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=o

31、ffhour2;offtc2=offcent2;while(!k2)dish=thour;disl=tcent;display();break;if(tempmax)dd=min;while(-x)display();if(k1)break;if(k0=0)delay(5);if(k0=0)feng(20);dd-;if(ddmin)dd=max;while(-x)display();if(k0)break;return dd;/*定时功能子程序*/void alarm_clock()if (biaoa)if (hour=onhour)if (cent=oncent)if (second=0)

32、feng(120);aout=0;if (biaoa)if (hour=offhour)if (cent=offcent)if (second=0)feng(120);aout=1;if (biaoa)if (hour=onhour2)if (cent=oncent2)if (second=0)feng(120);aout2=0;if (biaoa)if (hour=offhour2)if (cent=offcent2)if (second=0)feng(120);aout2=1;第四章 系统安装与调试41 软件调试采用模块化程序设计思想,首先调试子程序,然后逐级叠加调试。42 系统调试 软硬

33、件结合在一起,看是否能工作正常,由于在模块调试过程中,我们把软硬件所出现的错误都调整过来了,所以系统调试通过。结束语在这次毕业设计中,我学到了很多东西,真的没有想到搞一篇毕业设计这么难,每天脑子里总想着怎么做才能更好,本人专业知识有限,设计出来的东西还存在很多很多问题,这是专业知识的不够。在以后走入工作岗位中,要把技术学到位,等以后再来设计这样产品就是轻而易举的事情了。从这次毕业设计中,明白了单片机的重要性,平时没有感觉到单片机在生活中的作用这么大,通过这次设计,才明白单片机无处不在,生活中到处都用的到它。谢辞快要毕业了,感觉自己没有学到什么,但学校提供给我们这次机会,大大弥补了我的理论学习,感谢学校!还要感谢我的指导老师,焦振宇老师,没有他每时每刻提醒我督促我,我不会按时完成的,在我想不出来设计什么产品时,是焦老师提醒了我。给我启发!在这次毕业设计中遇到一些问题,特别是编程问题,说实话我个人

温馨提示

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

评论

0/150

提交评论