基于单片机的蓄水池自动控制系统完整资料Word格式.docx
- 文档编号:19525444
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:139
- 大小:1.45MB
基于单片机的蓄水池自动控制系统完整资料Word格式.docx
《基于单片机的蓄水池自动控制系统完整资料Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的蓄水池自动控制系统完整资料Word格式.docx(139页珍藏版)》请在冰豆网上搜索。
备注
1
Vss
逻辑负电源输入引脚,0V
2
Vdd
逻辑正电源输入引脚,+5V
3
Vo
LCD驱动电源输入引脚,调节其对比度
接502粗调电阻
4
RS
数据/指令寄存器选择
5
R/W
读写选择引脚
若只需要读,则接地
6
EN
读写使能引脚
7~14
D0~D7
8位数据引脚线
15
A
背光电源输入引脚,+5V
不带背光的LCD则无此引脚
16
K
背光地
一般接入小电阻限流
显示模块使用了该单片机的P0口,由于P0口采用了漏极开路输出的方式,故作为IO口使用时,P0口必须接上拉电阻。
控制口线接到了P2口,RS接P2.5,EN接P2.7.在应用中,可以直接将RW短接到地,使用短延时的方法跳过1602的数据处理忙信号,这样单片机就可以不读取1602的忙信号而直接对1602进行写操作。
4.3水位的ADC采样和水温的测量。
3.1STC单片机内置ADC的使用方法
STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。
这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。
ADC转换过程需要17个机器周期。
通过对相关功能寄存器的适当配置,就可以控制其工作。
下面就对相关功能寄存器进行介绍。
A/D转换寄存器总表:
寄存器
地址
名称
7
6
5
4
2
1
初始初
P1_ADC_EN
97H
允许P1.x
成为A/D口
P17
P16
P15
P14
P13
P12
P11
P10
0000
0000
ADC_
CONTR
C5H
A/D转换
控制寄存器
-
—
-
ADC_FLAG
ADC_START
CHS2
CHS1
CHS0
xxx0
ADC_DATA
C6H
A/D转换
结果寄存器
0000
(1)P1_ADC_EN:
特殊功能寄存器
P1。
x作为A/D转换输入通道来用允许特殊功能寄存器。
相应位为“1”时,对应的P1。
x口作为A/D转换使用,内部上拉电阻自动断开。
(2)ADC_CONTR:
CHS2/CHS1/CHS0是模拟输入通道选择,CHS2/CHS1/CHS0的取值如下表所示:
CHS2
CHS1
CHS0
模拟输入通道选择
0
选择P1.0为A/D输入
选择P1.1为A/D输入
选择P1.2为A/D输入
选择P1。
3为A/D输入
选择P1.4为A/D输入
选择P1.5为A/D输入
选择P1.6为A/D输入
选择P1。
7为A/D输入
ADC_START是模拟/数字转换(ADC)启动控制位,设置为1时,开始转换。
ADC_FLAG是模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1.
(3)ADC_DATA:
A/D转换结果特殊功能寄存器
模拟/数字转换结果计算公式为结果=256×
Vin/Vcc
Vin是模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。
3。
2水温的测量
DS18B20简介是美国美信(Maxim)公司生产的单线数字温度传感器DS1820,可把温度信号直接转换成串行数字信号供微机处理。
DS18B20的主要特性是:
适应电压范围更宽,电压范围:
3。
0~5。
5V,在寄生电源方式下可由数据线供电独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内温范围—55℃~+125℃,在-10~+85℃时精度为±
0.5℃可编程的分辨率为9~12位,对应的可分辨温度分别为0。
5℃、0.25℃、0。
125℃和0。
0625℃,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快测量结果直接输出数字温度信号,以"
一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作.
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
如图4-3—1
图4-3-1
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
如下图4—3-2
图4-3-2
4电脑上位机控制.
由于采用的是三星公司的专业下载线,所以只要USB与电脑相连,只要配置好电脑的波特率就可以实现上位机实时获取蓄水池的相关数据信息以便控制远程控制蓄水池。
5 按键和电机开关的控制选择方式。
用两个按键用于手动控制电机的正反转,而电机的关断则采用继电器来控制。
5 设计方案的实施:
5.1微控芯片的选择。
图5-1-1是单片机最小系统。
它必须满足如下四个条件:
1、电源的滤波及供电;
2、单片机的复位——上电复位和手动复位。
3、程序下载接口。
4、晶振电路。
如图3—3中所示,两路开关并联使用,增大了开关触点能通过的最大电流,控制单片机的供电电源,另外P0口接了10K的上拉排阻,PIN9复位引脚通过一个电阻下拉到地,接入了一个电容和一个开关,分别为上电复位电容和手动复位开关。
与晶振相接的电容为33PF,起作用是帮助晶振起振。
下载口外接出了单片机的RXD以及TXD,加上了VCC和GND的引脚,方便与下载线相连
图5-1-1
5.2数据现示的方式.
如图5-2-1所示,背光K引脚接入4.7欧姆的电阻限流。
1602数据口D0~D7接到单片机P1口,RS接到P2.7,RW接到P2.5,EN接到P2。
6。
图5-2-1
5.3水位的ADC采样和水温的测量。
图5-3-1
水位的AD采样测量采用的是单片机内部携带的AD采样功能。
如下图5-3—1所示,把芯片的P1口上拉,并用排针把该端口引出来;
而图5-3—2则是温度传感器DS18B20的电路接线图,其数据线经上拉后与单片机的P0.3口相连。
图5-3-2
5。
4、电脑上位机控制。
图5-4—1所示此下载线接口既可为单片机供电也可作为其与电脑的通讯接口。
5.5按键和电机开关的控制选择方式。
图5-5-1
如右图5-5-1所示用单片机的两个中
断口P3。
2和P3.3作为按键的控制输
入口。
而图5—5-2所示的继电器则使
用P0.4和P0.5作为其被控的端口。
图5-5-2
6软件设计实现方案
1程序的主要流程图(见于附图1)
6.2程序C语言源代码(见于附页)
7系统硬件制作与软件的调试
设计好整个系统的硬件原理图(见于附图2)并做好电路PCB之后,按如下步骤进行硬件的制作:
一、用Protel2004软件制作原理图,然后生成网络报表,接着生成PCB文件,布线要注意器件的封装和安放合理性等方面多考虑。
二、用热转印纸打印PCB印刷电路图。
三、经热转印后、放到双氧水、盐酸、水为2:
2:
1的溶液中腐蚀.
四、给电路板打孔,并擦除电路的碳化物后,立即涂上一层经天那水溶解的松香,以防止铜氧化。
五、焊接元件后就进行了硬件的调试。
接着是系统硬件的调试,首先检查电路上有否漏焊、开路和短路的现象;
然后按如下步骤进行测试:
一、在没有插上芯片之前给电路板供电,观察电路板上的电源指示灯是否正常并用万用表测电路板的电压是+5V的直流电压。
二、如果电压正常,然后电路板安装上主控芯片,此时要注意芯片的电源和地管脚与电路板上的对应。
三、然后检查继电器是否工作,按键是否按下时可以短路,如果一切正常则说明系统板可以工作了,不正常则说明系统硬件有问题,重新仔细检查电路的电气性连接。
8系统测试数据:
经测试系统达到了如期的要求,正常时现示水位处于稳定的状态并相应现示水的温度。
超出最低水位时,系统报警并向蓄水池中加水,直到合适的水位,然后停止加水;
水超出最高水位时系统报警并从蓄水池中放水,直到低于水位的警界线为止。
系统的两个按键可以直接的加水和放水,比如按下加水键,电机通电往蓄水池中加水,当再次按下此按键时则停止加水。
也可以通过上位机来控制系统的所有功能,如可直接控制加放水,获取水的温度。
参考文献
1、郭天翔.新概念51单片机C语言教程。
北京:
电子工业出版社,2009。
2、电子技术基础:
模拟部分.第四版.北京:
高等教育出版社.19993、C语言程序设计.北京:
中国铁道出版社,2007
4、李全利,迟荣强.单片机原理及接口技术。
北京:
高等教育出版社,2008
附页
源程序代码
#include<
reg51。
h〉
#include<
stdio.h>
#include<
intrins.h〉
#include〈absacc.h〉
#defineuchar unsigned char
#define uintunsigned int
sbitDQ=P2^0;
//ds18b20与单片机接口
sbitRS=P1^4;
sbitEN=P2^7;
sbit k1=P3^5;
sbitk2=P3^6;
sbitds1=P2^5;
sbitds2=P2^4;
sbit relay1=P2^3;
sbitrelay2=P2^2;
sbitbee=P2^1;
bit flag;
ucharget_data;
unsignedcharcodestr1[]={"
Tempis:
"};
unsignedcharcodestr2[]={"
18b20error”};
unsignedcharcodest1[]={"
IN"
};
unsigned charcodest2[]={"
OUT ”};
unsigned charcodekeep[]={"KEEPON”};
unsignedcharcode err[]={”error"
uchar datadisdata[5];
uchar shuju[]={'
0','
1'
,’2’,'
3'
’4’,’5'
'6'
,'7'
,'
8'
9'
};
uchar a=0x1e,b=0x15;
uinttvalue;
//温度值
uintt;
uchartflag;
//温度正负标志
//---—-—-——与STC12C5A32S2单片机ADC相关的寄存器声明———--—---—----——--
sfr P1ASF =0x9d;
//P1口模数转换功能控制寄存器
sfr ADC_CONTR =0xbc;
//AD转换控制寄存器
sfr ADC_RES =0xbd;
//AD转换结果寄存器高
sfr ADC_RESL =0xbe;
//AD转换结果寄存器低
sfr AURX1 =0xa2;
//AD转换结果存储方式控制位
//--——-----—---—--—-—----—-—-——-—-—---—-—--—---------—-———--—-——----
//P1ASF寄存器:
8位,对应P1口8根口线,用于指定哪根口线用作ADC功能
//哪个口用作ADC就应置相应的位为“1”,注意:
不能位寻址
//—-—----—-—-———-----———--—---—--——---——-—---——--———-—----—------———
#define ADC_POWER 0x80 //ADC电源开
#define ADC_SPEED0x60//设为90个时钟周期ADC一次
#define ADC_START 0x08//ADC启动控制位设为开
#define ADC_FLAG0x10//ADC结束标志位
/*
ADC_CTRL寄存器:
ADC_POWERSPEED1 SPEED0ADC_FLAG ADC_STAR CHS2CHS1 CHS0
1 2 3 4 5 6 7 8
第1位:
=1 打开ADC电源;
=0关闭ADC电源;
ADC前要一定要打开
第2-3位:
=11 90个时钟周期ADC一次;
=10180个时钟周期ADC一次;
=01 360个时钟周期ADC一次;
=00540个时钟周期ADC一次;
第4位:
ADC结束标志位,每次ADC结束时自动=1,需要用软件清零才可以进行下一次ADC
第5位:
ADC启动控制位,置“1”则ADC转换开始,转换结束后为0
第6-7-8位:
ADC通道选择000—->
0。
.。
。
...。
111-—〉P1.7
*/
//-——---—--串口发送-———-—---
/*void send_char_com(unsignedcharch)
{
SBUF=ch;
while(TI==0);
TI=0;
}*/
//-----—--第n通道ADC初始化函数--—-——---
voidADC_int(ucharn)
{ n&=0x07;
//确保n=0—--—7通道
AURX1|=0x04;
//转换结果存储格式:
数据的高2位放ADC_RES,低8位放ADC_RESL
P1ASF=1〈<
n;
//将P1。
n设为ADC采样功能
}
//---—-—-—-—第n通道ADC采样函数—---———
uintADC_GET(unsignedcharn)
{ unsignedintadc_data;
n&=0x07;
//确保n=0——--7通道
ADC_RES=0;
//清零
ADC_RESL=0;
//清零
ADC_CONTR=0;
//清零,以便重构
ADC_CONTR|=(ADC_POWER|ADC_SPEED|n|ADC_START);
//打开AD转换电源、设定转换速度、设定通道号、AD转换开始
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//延时4个时钟周期左右
while(!
(ADC_CONTR&ADC_FLAG));
//等待转换结束=0x10 ADC_FLAG位=1
adc_data=(ADC_RES&
0x03)*256+ADC_RESL;
//转换结果计算,取高位结果存储器的低2位+低位结果存储器
ADC_CONTR&=~ADC_FLAG;
//清零转换结束标志位(ADC_FLAG位=0)
returnadc_data;
//返回ADC的值(0——--1023)
}
/*************************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒
{unsignedinti,j;
for(i=0;
i<
ms;
i++)
for(j=0;
j〈100;
j++);
voiddelay(uintz)//延时函数
{
uint x,y;
for(x=z;
x〉0;
x-—)
for(y=110;
y>0;
y--);
voidwr_com(unsigned charcom)//写指令//
{delay1ms
(1);
RS=0;
// RW=0;
EN=0;
P0=com;
//
delay1ms(1);
EN=1;
delay1ms
(1);
EN=0;
void wr_dat(unsignedchar dat)//写数据//
{ delay1ms
(1);
;
RS=1;
// RW=0;
EN=0;
P0=dat;
delay1ms
(1);
EN=1;
delay1ms
(1);
EN=0;
voidlcd_init()//初始化设置//
// RW=0;
delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
delay1ms(5);
wr_com(0x01);
delay1ms(5);
wr_com(0x06);
delay1ms(5);
wr_com(0x0c);
delay1ms(5);
void display(unsignedchar*p)//显示//
while(*p!
=’\0'
)
wr_dat(*p);
p++;
delay1ms
(1);
init_play()//初始化显示
{lcd_init();
wr_com(0x80);
display(str1);
}
/**********************ds1820程序******************/
bitds1820rst(void)/*ds1820复位*/
bitflg;
DQ=1;
//DQ复位
for(t=0;
t<
16;
t++);
//延时
DQ=0;
//DQ拉低
for(t=0;
800;
t++);
//精确延时大于480us
DQ=1;
//拉高
for(t=0;
t<80;
flg=DQ;
for(t=0;
t<1600;
t++);
return(flg);
uchards1820rd()/*读数据*/
unsigned chari=0;
unsignedchardat =0;
for(i=8;
i〉0;
i—-)
{
DQ=1;
//先将数据拉高
_nop_();
//等待一个机器周期
_nop_();
_nop_();
DQ=0;
//启动读时序
_nop_();
_nop_();
DQ= 1;
//人为拉高
for(t=0;
t〈16;
t++);
dat>
>
=1;
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
for(t=0;
t<16;
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
unsignedchari=0;
for (i=8;
i>0;
i-—)
{
DQ=1;
_nop_();
_nop_();
DQ=0;
DQ=wdata&0x01;
for(t=0;
t<80;
DQ=1;
for(t=0;
t++);
wdata〉>
=1;
for(t=0;
t〈30;
t++);
read_temp()/*读取温度值并转换*/
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 蓄水池 自动控制系统 完整 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)