基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx

上传人:b****6 文档编号:21730573 上传时间:2023-02-01 格式:DOCX 页数:49 大小:210.30KB
下载 相关 举报
基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx_第1页
第1页 / 共49页
基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx_第2页
第2页 / 共49页
基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx_第3页
第3页 / 共49页
基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx_第4页
第4页 / 共49页
基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx

《基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx(49页珍藏版)》请在冰豆网上搜索。

基于52单片机的自动浇灌系统毕业设计论文Word文件下载.docx

水阀开关蜂鸣器继电器液晶显示器(TG12864B)电源电线;

d.开发和测试环境

Keil2;

Proteus;

e.系统框架图和系统功能说明

温度仪(感应周边温度)

水阀

功能说明:

蜂鸣器响兰花草从常温进入高温时,浇灌时间为50分钟,浇灌次数间隔为4小时。

蜂鸣器响兰花草

蜂鸣器响兰花草从常温进入低温时,浇灌时间为0分0秒,阀关闭。

f.接口概述

蜂名器

g.开发计划

序号

任务

内容

负责人

计划开始时间

计划结束时间

实际开始时间

实际结束时间

1.

任务和要求

概述,功能,性能,接口

刘路

2013.9.09

2013.9.10.

2013.9.10

2.

方案

总的思考软硬件选择开发和测试环境系统框架图和系统功能说明接口概述开发计划

2013-9-12

3.

系统设计

列出所需要的硬件软件电路及功能状态图

2013.9.12

2013.9.17

4.

详细设计

将主体程序分解成各个功能模块列出各模块的功能所需

2013.9.23

5.

编码

依照详细设计所考虑的思路进行编码

2013.10.12

2013.10.8

6.

系统测试

利用Proteus进行仿真通过控制DS18B20的值测试程序在各个温度下显示浇灌时间功能是否完整有无错误

2013.10.17

3.系统设计

a)硬件设计

i.框图

ii.功能描述

硬件设计主要包括:

DS18B20温度采集模块:

用于温度采集;

汉字液晶屏显示状态信息模块:

用于将相关信息显示出来;

将数字温度传感器DS18B20并接在一起,数据线与单片机的P1.0相连,液晶显示器与单片机的连接采用模拟接口方式。

蜂鸣器:

利用外部中断触发定时器t0控制音调高低T1控制节拍长短

(1)传感器DS18B20

图1-4DS18B20引脚图

DS18B20是美国DALLAS公司推出的数字温度传感器,将温度传感器、数字转换电路集成到了一起,外形如同一只三极管。

微型化、低功耗、高性能、抗干扰能力强;

它采用独特的单线接口方式,与单片机连接时,仅需一根口线;

这样可以非常方便地构成多路温度测量系统。

DS18B20的测温范围为-55度~125度,可完全满足要求。

其引脚图如图1-4所示。

DQ:

数据输入/输出。

在数据总线供电方式可给传感器提供电源。

VDD:

可选的电源电压DS18B20有两种供电方式:

数据总线供电方式和外部供电方式。

若采用数据总路线供电方式,VDD应接地,这样可省一根线,但测浊的时间较长。

GND:

电源地。

温度与数字量的对应关系表如右表

所示。

(2)单片机80C52

单片机内部有P0、P1、P2、P34个8位双向I/O口,其引脚如图1-8所示,外设与这些端口可以直接连接,无需另外的接芯片。

P0~P3既可以按字节输入或输出,也可以按位进行输入或输出,共32条口线,其控制十分灵活方便。

各个端口的结构功能有所不同。

在自动浇灌系统的设计中主要用到了P0、P1、P3这3个口。

1)P0口

图-10P0口作输出口时需加上拉电阻

P0口每一位内部结构如图1-9所示,其基本功能是数据的输入与输出,此外在扩展程序存储器、外部数据存储器或I/O口时,作为数据总线和低8位地址总线。

需要说明的是P0口作为输出口使用时,“控制”引脚为低,使场效应管VT1截止,P0口实际上为漏极开路输出电路,因此需加上拉电阻,如图1-10所示;

P0作为输入口使用时,必须首先写端口输出“1”,使VT2截止,否则如果VT2导通,在输入引脚数据时,引起的的高电平会被强制拉成低电平。

2)P1口

在自动浇灌系统设计中,P1.1与传感器DS18B20的DQ连接,将温度传感器上的值传送到单片机80C51在液晶屏上显示出来。

3)P3口

P3口险了双向I/O口功能外,还具有第二功能。

在自动浇灌系统中P3.7、P3.6、P3.5不再是P3口的第二功能,RD、WR、T1是作为I/O口分别控制液晶模块的RS、R/W、E引脚,产生相应的时序信号。

(3)TG12864B液晶屏

图1-11TG12864B模块引脚图

TG12864B是128*64点阵的液晶显示模块,能够显示各种字符(128个8*8点阵字符,或32个16*16点阵的汉字)或图形,具有8位标准数据总线及相应的控制信号,可与单片机接口直接相连。

其外观及引脚排列如图1-11所示:

其引脚功TG12864B液晶模块实际上是由左右两块独立的64*64点阵液晶屏拼接而成,每半屏有一个8*64*8bitDDRAM,左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。

它可显示4行16*16点阵的汉字,每行显示8列,如果列号小于4,则显示在左半屏,否则显示在右半屏。

TG12864B液晶模块内部没有字库,因此必须将ASCII的点阵信息放在程序存储器中,显示时根据ASCII值找到该字符的点阵码送到液晶显示模块DDRAM中。

(4)蜂鸣器

三极管主要是做驱动用的。

因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。

b)软件设计

i.运行环境

keil2;

在低温时,电磁阀始终关,浇灌时间为0分0秒;

从常温进入高温时,浇灌时间为50分钟,浇灌次数间隔为4小时。

响起音乐兰花草从常温进入低温时,浇灌时间为0分0秒,阀关闭。

1.主程序模块

功能:

主要是要调用的函数的声明;

变量的定义;

根据温度,在该屏上逐行显示:

温度、水龙头开关状态、浇灌时间等信息。

2.DS18B20温度采集模块

温度采集,通过温度传感器获取当前的温度值,再将温度值传到主程序中,然后在液晶屏显示相应的温度值。

3.汉字液晶屏显示状态信息模块

对液晶屏进行初始化、复位、打开显示、设置起始行、清屏。

4.定时器模块

实现记录不同温度段的浇灌时间及浇灌间隔时间等信息

5.控制电磁阀开/关模块

根据温度信息控制继电器吸合及断开,从而控制电磁阀的开关,实现浇灌与否。

6.响乐模块

单片机可以依据不同频率的脉冲信号让蜂鸣器产生与音符相应的声音可以利用单片机p3.2或者.p3.3引脚外部中断来控制控制蜂鸣器相关。

iii.状态图

常温/开阀

高温/开阀

低温

低温不浇灌

高温

低温/关阀

常温浇灌

高温浇灌

常温/开阀蜂鸣器开,显示

浇灌时间到/关阀

降温

高温/开阀蜂鸣器开,显示

高温不浇灌

NO

状态

条件

事件

动作

目标状态

1

常温

开阀门/蜂鸣器响显示

2

关阀门/显示

3

常温不浇灌

4

30分钟

时间到

5

8小时

开阀门/显示

6

蜂鸣器响显示

7

显示

8

50分钟

9

4小时

10

开阀门/显示蜂鸣器响

11

iii.

iv.主要流程图

初始化

浇灌系统

浇灌

v.程序总体结构图

水阀处理

vi.接口设计

4.详细设计

c)硬件详细设计

i.

Proteus图

d)软件详细结构图

Reset(初始化DS18B20)

Convert(启动温度转换)

Readt(读取温度暂存器的值)

Wrbyte(写字节)

Rdbyte(读字节)

Ds18b20

InitTimer0(定时器T0中断)

InitTimer0(定时器T1中断)

定时器——

Lcd_LCD_DispFill(填充液晶屏)

Lcd_dispIni(初始化液晶屏)

LCD_DispChar(显示字符)

LCD_DispStr(显示字符串)

LCD_DispHZ(显示汉字)

LCD_DispHZStr(显示汉字字符串)

液晶显示模块

e.软件详细设计

i.函数描述

名称:

voidwrbyte(uchard)

功能:

向DS18B20写入一个字节

入口参数:

d(uchar型写入字节)

出口参数:

返回值:

ucharrdbyte(void)

从DS18B20读取一个字节

intreadt(void)

读取DS18B20暂存器中的温度值

voidLCD_DispChar(ucharcy,ucharcx,chardispdata)

在液晶屏的cy(0-7)行、cx(0-15)列显示字符dispdata

入口参数:

cy(uchar型设置行);

cx(uchar型设置列);

dispdata(char型显示字符);

出口参数:

返回值:

voidLCD_DispStr(ucharcy,ucharcx,char*disp_str)

在液晶屏的cy(0-7)行、cx(0-15)列显示字符串disp_str

cy(uchar型设置行)cx(uchar型设置列)*disp_str(char型显示字符串)

voidLCD_DispHZ(ucharcy,ucharcx,uchardispdata

在液晶屏cy,cx位置显示汉字字符

dispdata(uchar显示汉字字符)

voidLCD_DispHZStr(ucharcy,ucharcx,uchar*disp_str)

在液晶屏cy,cx位置显示汉字字符串

cy(uchar型设置行)cx(uchar型设置列)*disp_str(uchar型显示汉字字符)

voidLCD_DispFill(ucharfilldata)

以filldata充填液晶屏

filldata(uchar);

voidLCD_DispIni(void)

初始化液晶

voidInitTimer0(void)

定时器中断

5.编码、集成和调试

主函数模块:

#include<

reg52.h>

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

#definewater_time3//常温的浇灌时间

#definewater_time16//高温的浇灌时间

externvoidLCD_DispIni(void);

externvoidLCD_DispFill(ucharfilldata);

externvoidLCD_DispChar(ucharcy,ucharcx,chardispdata);

externvoidLCD_DispStr(ucharcy,ucharcx,char*disp_str);

externvoidLCD_DispHZ(ucharcy,ucharcx,uchardispdata);

externvoidLCD_DispHZStr(ucharcy,ucharcx,uchar*disp_str);

externvoidlate();

externintreadt(void);

externvoidconvert(void);

ucharcodedp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};

//小数部分转换

ucharcount,count1;

uchars;

ucharm;

ucharh;

uchars1;

ucharm1;

ucharh1;

uchartime_s,time_m;

ucharcounter;

//定义的一个判断浇灌时间的中间变量

uchardbuf[]="

"

;

//小数部分转换

uchardbuf1[]="

ucharidatadbuf2[]="

ucharidatat;

sbitled=P1^1;

sbitSOUND=P1^7;

voidtime0(void)interrupt1//interruptN表示函数声明为中断服务函数,1:

定时器/计数器T0中断

{

TH0=-50000/256;

//定时时间为50MS//取高8位

TL0=-50000%256;

//取低8位

count++;

//每中断一次,计数器加1

if(count==20)//每秒执行一次

{count=0;

s++;

if(s==60)

{m++;

s=0;

if(m==60)

{m=0;

h++;

}

}

}

}

voidtime1(void)interrupt3//3:

定时器/计数器T1中断

TH1=-50000/256;

TL1=-50000%256;

count1++;

if(count1==20)

{count1=0;

s1++;

if(s1==60)

{m1++;

s1=0;

if(m1==60)

{m1=0;

h1++;

main()

{

inttemp,i;

//用来存放传感器的温度值

ucharstr[7]={0,0,0,0,0,0};

//用于将温度值转换为字符串

ucharst[2]={0,0};

ucharbuf[]={0,1,2,3,4,5,0xff};

uchardu[]={24,0xff};

ucharchang[]={9,10,8,0xff};

uchardi[]={11,12,8,0xff};

uchargao[]={6,7,8,0xff};

ucharjgsj[]={13,14,8,0xff};

uchardcf[]={13,14,8,0xff};

ucharon[]={22,0xff};

ucharoff[]={23,0xff};

ucharfen[]={20,0xff};

ucharmiao[]={21,0xff};

ucharcou[]={15,16,25,26,0xff};

intfleg=1,flag=1;

bitzf;

//正负标记温度在0度以下为1,否则为0

LCD_DispIni();

str[1]='

:

'

//在屏幕指定位置显示

LCD_DispHZStr(0,1,buf);

LCD_DispHZStr(1,6,du);

LCD_DispHZStr(1,0,dcf);

LCD_DispHZStr(2,0,jgsj);

LCD_DispHZStr(2,5,fen);

LCD_DispHZStr(2,7,miao);

LCD_DispHZStr(3,0,cou);

count=0;

s=0;

TMOD=0x11;

//定时器0和1都设置成方式1

ET0=1;

//允许T0中断

TR0=1;

//启动T0中断

ET1=1;

TR1=1;

EA=1;

//开CPU中断

while

(1)

EA=0;

convert();

for(i=0;

i<

10000;

i++);

EA=1;

temp=readt();

zf=0;

if(temp>

0x01E0)//判断温度是否大于30度

{

LCD_DispHZStr(1,0,gao);

counter=m*60+s;

if(counter<

=water_time1)//高温浇灌时间

{

TR0=1;

//打开定时器0

TR1=0;

//关闭定时器1

LCD_DispHZStr(2,3,on);

if(fleg==1)

{

t=t+1;

fleg=0;

}

s1=0;

m1=0;

h=0;

time_s=s;

time_m=m;

led=0;

SOUND=~SOUND;

else

{

TR0=0;

//关闭定时器0

TR1=1;

//打开定时器1

LCD_DispHZStr(2,3,off);

if(s1>

3)//高温浇灌时间间隔

{

s=0;

m=0;

h=0;

fleg=1;

}

time_s=0;

time_m=0;

led=1;

elseif(temp<

0x0190)//判断温度是否低于25度

TR0=0;

TR1=0;

m=0;

h=0;

m1=0;

LCD_DispHZStr(1,0,di);

LCD_DispHZStr(2,3,off);

time_s=0;

time_m=0;

led=1;

else

{

LCD_DispHZStr(1,0,chang);

=water_time)//常温浇灌时间

TR0=1;

if(flag==1)

flag=0;

3)//常温浇灌时间间隔

{

s=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1