基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx

上传人:b****2 文档编号:4038358 上传时间:2023-05-02 格式:DOCX 页数:18 大小:250.74KB
下载 相关 举报
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第1页
第1页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第2页
第2页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第3页
第3页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第4页
第4页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第5页
第5页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第6页
第6页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第7页
第7页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第8页
第8页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第9页
第9页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第10页
第10页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第11页
第11页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第12页
第12页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第13页
第13页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第14页
第14页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第15页
第15页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第16页
第16页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第17页
第17页 / 共18页
基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx

《基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。

基于单片机的自动滴灌控制系统的设计Word文档下载推荐.docx

内部振荡和外部振荡。

MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图2所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。

图3中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30P左右,晶振频率选6MHz。

2.2.2复位电路

为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。

单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。

复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H,SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。

复位操作有两种情况,即上电复位和手动(开关)复位。

本系统采用上电复位方式。

图2中R9和Cl组成上电复位电路,其值R取为1KQ,C取为1pF.

2.3数据采集电路(数字温湿度传感器DHT11)

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT11传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。

单线制串行接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。

产品为4针单排引脚封装。

连接方便,特殊封装形式可根据用户需求而提供。

测量分辨率分别为8bit(温度)、8bit(湿度)。

图3

2.4LED显示系统电路

微机化测控系统中常用的测量数据的显示器有发光二极管显示器(简称LED或数码管)和液晶显示器(简称LCD)。

这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点,本系统输出结果选用4个LED显示。

数码管有共阴共阳之分,本系统采用8段共阴型LED,其原理图如图6所示,每位数码管内部有8个发光二极管,公共端由8个发光二极管的阴极并接而成,正常显示时公共端接低电平(GND),各发光二极管是否点亮取决于a-dp各引脚上是否是高电平。

LED数码管的外形结构如图6,外部有10个引脚,其中3,8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。

由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。

LED有共阴极和共阳极两种。

如图5所示。

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。

一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。

当在某段发光二极管施加一定的正向电压时,该段笔划即亮;

不加电压则暗。

为了保护各段LED不被损坏,需外加限流电阻。

符号和引脚共阴极共阳极

图5LED数码管结构原理图:

数码管显示器有两种工作方式,即静态显示方式和动态扫描显示方式。

为节省端口及降低功耗,本系统采用动态扫描显示方式。

动态扫描显示方式需要解决多位LED数码管的“段控”和“位控”问题,本电路的通过P1口实现:

而每一位的公共端,即LED数码管的“位控”,则由P3口控制。

这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。

在这一瞬时,只有这一位在显示,其他几位则暗。

在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开头”状态。

2.5超限报警电路

为了在某些紧急状态或反常状态下,能使操作人员不致忽视,以便及时处理,往往需要有某种更能引起人们注意提起警觉的报警信号产生,这种报警信号通常有三种类型:

闪光报警、鸣音报警、语音报警,本系统采用简单易行的LED发光报警电路。

如图6所示报警电路,报警设备选用LED发光二极管,图中接入的发光二极管LED为超高限与超低限报警器,在湿度低于最低湿度或高于最高湿度时,二极管发光报警。

报警设备选用LED发光二极管,图中发光二极管的一端接在高电平+5V,另一端分别接P2.6与P2.7,当P2.6、P2.7端输出为低电平0时,二极管导通,灯亮发出报警信号。

图6报警电路

第三章系统的软件设计

#include<

reg51.h>

intrins.h>

//

typedefunsignedcharU8;

/*无符号8位整型变量*/

typedefsignedcharS8;

/*有符号8位整型变量*/

typedefunsignedintU16;

/*无符号16位整型变量*/

typedefsignedintS16;

/*有符号16位整型变量*/

typedefunsignedlongU32;

/*无符号32位整型变量*/

typedefsignedlongS32;

/*有符号32位整型变量*/

typedeffloatF32;

/*单精度浮点数(32位长度)*/

typedefdoubleF64;

/*双精度浮点数(64位长度)*/

#defineucharunsignedchar

#defineuintunsignedint

#defineData_0_time4

sbitP2_0=P2^0;

U8U8FLAG;

U8U8count,U8temp;

U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8U8comdata;

U8outdata[5];

//定义发送的字节数

U8indata[5];

U8count,count_r=0;

U8str[5]={0,0,0,0,0};

U16U16temp1,U16temp2;

ucharLedOut[4];

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

//段码控制

//此表为8个数码管位选控制,共阴数码管1-8个-

unsignedcharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};

//反转

unsignedcharcodeFFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

//正转

uintK;

sbitLS138A=P2^2;

//定义138译码器的输入A脚由P2.2控制

sbitLS138B=P2^3;

//定义138译码器的输入脚B由P2.3控制

sbitLS138C=P2^4;

//定义138译码器的输入脚C由P2.4控制

//Motor

sbitF1=P1^0;

sbitF2=P1^1;

sbitF3=P1^2;

sbitF4=P1^3;

sbitled1=P2^7;

sbitled2=P2^6;

voidDelay(U16j)

{U8i;

for(;

j>

0;

j--)

{

for(i=0;

i<

27;

i++);

}

voidDelay_10us(void)

{

U8i;

i--;

/*步进电机驱动*/

voidmotor_ffw()

{

unsignedchari;

unsignedintj;

for(j=0;

j<

12;

j++)//转1*n圈

for(i=0;

i<

8;

i++)//一个周期转30度

if(K==1)P1=FFW[i]&

0x0f;

//取数据

if(K==2)P1=FFZ[i]&

Delay(10);

//调节转速,速度太快会使电机只震动不转动

}

voidCOM(void)

for(i=0;

i++)

U8FLAG=2;

while((!

P2_0)&

&

U8FLAG++);

Delay_10us();

Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

while((P2_0)&

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

//如果高电平高过预定0高电平值则数据位为1

U8comdata<

<

=1;

U8comdata|=U8temp;

//0

}//rof

//--------------------------------

//-----湿度读取子程序------------

//----以下变量均为全局变量--------

//----温度高8位==U8T_data_H------

//----温度低8位==U8T_data_L------

//----湿度高8位==U8RH_data_H-----

//----湿度低8位==U8RH_data_L-----

//----校验8位==U8checkdata-----

//----调用相关子程序如下----------

//----Delay();

Delay_10us();

COM();

voidRH(void)

//主机拉低18ms

P2_0=0;

Delay(80);

P2_0=1;

//总线由上拉电阻拉高主机延时20us

Delay_10us();

//主机设为输入判断从机响应信号

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(!

P2_0)//T!

U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否结束

while((!

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

while((P2_0)&

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

U8RH_data_L_temp=U8comdata;

U8T_data_H_temp=U8comdata;

U8T_data_L_temp=U8comdata;

U8checkdata_temp=U8comdata;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

voidxianshi(uchara)

{

uchari;

//LedOut[0]=Disp_Tab[a/1000];

//LedOut[2]=Disp_Tab[a/100];

LedOut[1]=Disp_Tab[a%100/10];

LedOut[0]=Disp_Tab[a%10];

for(i=0;

3;

i++)//实现4位动态扫描循环

P0=LedOut[i];

//将字模送到P0口显示

Delay

(2);

switch(i)//使用switch语句控制位选也可以是用查表的方式学员可以试着自己修改

case0:

LS138A=0;

LS138B=0;

LS138C=0;

break;

case1:

LS138A=1;

//case2:

LS138B=1;

//Delay(10);

}

voidtime0_init()//计数器初始化函数

TMOD=0x01;

//计数器0工作在方式模式1

TH0=(65536-800)/256;

//晶振是11.0592,产生PCA时钟为1.3824M

TL0=(65536-800)%256;

//TH0=(65536-6556)/256;

//TL0=(65536-6536)%256;

//AUXR=0xC0;

//计数器均工作在1T模式。

计数频率11.0592M

ET0=1;

//开中计数器0断

TR0=1;

//开启计数器0

EA=1;

voidmain()

ucharm,flag=0,n;

time0_init();

while

(1)

{for(n=0;

n<

2;

n++)

{

RH();

str[n]=U8RH_data_H;

//str[1]=U8RH_data_L;

//str[2]=U8T_data_H;

//str[3]=U8T_data_L;

//str[4]=U8checkdata;

Delay(20000);

xianshi(str[n]);

if(str[n]<

50)

{

K=1;

led1=0;

led2=1;

}

if(str[n]>

60)

K=2;

led1=1;

led2=0;

50&

str[n]<

60)

if((str[0]>

60&

str[1]<

=50)||(str[0]<

str[1]>

=60))

flag=1;

elseflag=0;

if(flag==1)

for(m=0;

m<

m++)

{

motor_ffw();

}

}

voidti()interrupt1

TH0=(65536-6000)/256;

TL0=(65536-6000)%256;

xianshi(str[0]);

第四章总结

通过本次设计,让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。

既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。

在设计过程中,总是遇到这样或那样的问题。

有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。

自然而然,我的耐心便在其中建立起来了。

为以后的工作积累了经验,增强了信心

本文设计了基于单片机的自动滴灌控制系统,通过本次课程设计对单片机控制系统原理有了进一步的了解,提高了科学的分析和运用能力,由于本人水平有限,因此对其中的原理和实际操作方法有待深入的学习研究和提高。

指导教师评语:

成绩:

指导教师签字:

年月日

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2