序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的液位控制系统设计
一、 硬件电路设计
1.1 AT89C51单片机简介
AT89C51单片机作为日常生活中广泛使用的一款,不仅体积小、性能高,而且还能够在一些恶劣的环境条件下使用,克服一切的电子干扰。它是一种带2K字节闪存可编程可擦除只读存储器的单片机,可以使用大概将近100000次。实际的运行过程中,能够同时与多款软件共同运行,兼容性非常好。由于多功能8位CPU和闪存在单一芯片,ATMELAT89C51单片机的结合是一种有效的和微控制器AT89C51的精简版本。AT89C51单片机具体结构如图1-1所示[12]。
图1-1 AT89C51引脚图
从这个图中不难看出,其中的供电电压是VCC(a),GND(b)是接地。P0口主要是作为输出口,能够将收集到的一切数据及时、有效的进行从输出口传输。一般可以是写作“1”,通常都是被作为高阻抗输入。实际的运行过程中,会对相关的数据做访问和收集。同时,在FLASH编程中,P0也能够对于运行过程中的字节及时的查漏补缺。对于P1:P1口它作为内部上拉电阻8位双向I/O端口。
P2口:P2口是一个内部上拉电阻8位双向I/O端口,P2输出缓冲区可以驱动四个TTL逻辑水平。P2端口写“1”,此时内部上拉电阻的端口,可以作为一个输入端口。当用作输入、外部拉销由于内部阻力,输出电流(IIL)。在访问外部程序存储器或16位地址读取外部数据存储器(如执行MOVX)、P2口发出高八地址。在这个应用程序中,P2使用强大的内部上拉发送1口。在使用8位地址(如MOVX)访问外部数据存储、P2的内容输出P2门闩。在FLASH编程和校准,P2口也得到高8位地址字节和一些控制信号。
P3口:P3口是一个内部上拉电阻8位双向I/O端口,P3输出缓冲区可以驱动四个TTL逻辑水平。P3写“1”,这次内部上拉电阻的端口,可以作为一个输入端口。当用作输入、外部拉销由于内部阻力,输出电流(IIL)。P3口也被用作AT89C51特殊功能使用[13]。
1.2 复位电路及时钟电路
图3-2所示的RC复位电路可以实现上述基本功能,图3为其输入-输出特性。但解决不了电源毛刺(A点)和电源缓慢下降(电池电压不足)等问题 而且改变RC常数延时会令驱动能力变差电路,如图1-2所示。
图1-2 复位电路及时钟电路
上图中网络标号RST连接单片机RST引脚,具有上电复位与手动复位的功能;XTAL1与XTAL2连接单片机XTAL1和XTAL2引脚,且并联两个30pF匹配电容使晶振起振。
由于单片机P0口作普通I/O口时不能输出高电平,因此需接上拉电阻,实际电路中,使用8*10KΩ电阻作为上拉电阻[14]。
1.3 传感器的选用
传感器在日常的生产生活中也是会经常用到的一种物件,它被广泛的应用于各个领域之中,而被市场最为认可和常用的一种就是压力传感器,即能够在连续的时间内或者瞬时监测到压力的数值,然后做出相应的判断。实际的工作过程中,具体的会以金属丝应变电阻为例,具体的如图1-3所示。
图1-3 SY-9411L-D引脚图
1.4 A/D转换电路的设计
引脚分布如图1-4。
图1-4 ADC0809引脚图
1.4.2 ADC0809与AT89C51单片机的连接
ADC0809与AT89C51单片机的连接图如图1-5。
图1-5 ADC0809与AT89C51单片机的接线图
1.5 按键设计
1.5.1 按键去抖
按键去抖在这次的使用过程中更多的是能够防止在按键的时候,因为人为性的原因,最后不能够精确的控制,如下图所示:使用按键的时候,如果出现按键开关问题的时候,切记不要立刻的断开开关,此时会引发其他的问题。
为了能够有效的避免这种按键时候的问题,如图1-6所示。做了具体的改进措施,希望能够在使用的过程中达到预期的效果[16]。
图1-6 RS触发器硬件消抖
1.5.2 独立式键盘接口电路
独立式键盘接口电路在设计的过程中,为了能够更加的切合实际的用途,让其按键尽量控制到最少。所以,这次会使用独立式的键盘接口电路,即每一个按键都会有着独立的接口,最终实现信号的传输。在图3-7当中,可以看到从S2-S5都是可以进行控制的按键。目的是能够在实际的操作过程中,利用这些按键能够把控液位的实际高度。
图1-7 系统按键电路
1.6 显示单元硬件设计
在显示单元上,使用了74LS273带公共时钟复位八位触发器与74LS47共阳极BCD显示译码驱动芯片,两个芯片的管脚图如图1-8。
图1-8 74LS273及74LS47引脚图
本次基于单片机的液位控制系统设计电路图如图1-9。
图1-9 显示部分电路图
1.7 存储单元硬件设计
存储单元硬件设计,本身AT89C51单片机在使用的时候,它是要与8位地址进行共同使用。然后将芯片74LS373作为地址锁存芯片。这次的设计过程中也是会将32KRAM为主要的存储芯片,具体的设计如图1-10所示。
图1-10 62256引脚图
二 、系统软件设计
2.1 系统软件及主程序设计
2.1.1 系统软件编译开发环境
此次基于单片机的液位控制系统在设计的过程中,系统软件编译开发环境主要是利用C语言,它是能够将各种语言集合于一体,与他们有着共同的特性,而且能够处理很多的语言,让其转换为一种简单、易懂的方式去了解。通过使用C语言作为基础语言来编写系统软件,不仅能够减少人力成本的支出,更是能够让软件在使用过程中变得简单、明了。KEIL C51开发工具套件是此次单片机液位控制系统的主要是语言程序,通过使用KEIL C51 μVision4为整个语言编写程序,从而顺利的完成各个模块功能的设计。
2.1.2 系统主程序流程图
主程序流程图如图2-1所示
图2-1 主程序流程图
2.2 系统初始化
该模块在系统上电开机时将系统端口、数据存储区、标志位、指针、地址等赋予有含义的值。具体分为以下几个模块列表描述,见表2-1
表2-1 初始化参数及含义
模块 | 变量/端口 | 初始值 | 功能 |
控制端口初始化 | adRD/P1.3 | 1 | A/D转换芯片数据读入控制,初始为不读入 |
adWR/P1.4 | 0 | A/D转换芯片转换控制,初始为停止 | |
E/P1.5 | 0 | 通信接收发送控制,初始为接收 | |
DIS/P1.6 | 0 | 显示数据锁存控制,初始为保持 | |
RELAY/P1.7 | 1 | 继电器控制,初始状态为断开 | |
波特率发生器初始化 | TMOD | 0x22 | 单片机片内定时/计数器工作在方式二 |
SCON | 0x40 | 串行口为8位UART工作方式 | |
TH1 | 0xf4 | 波特率设置为4800bps | |
TL1 | 0xf4 | ||
IE | 0 | 禁止定时器中断 | |
TR1 | 1 | 启动定时器 | |
REN | 1 | 允许串行口接收数据 | |
时间初始化 | sec | 0x00 | 初始化系统时间为2011年1月1日 0时0分0秒星期六 其中sec,min,hr,date,mon,day,year 依次为秒、分、时、日、月、星期、年 |
min | 0x00 | ||
hr | 0x00 | ||
date | 0x01 | ||
mon | 0x01 | ||
day | 0x06 | ||
year | 0x11 | ||
数据参数初始化 | xmark | 0x7531 | 数据存储状态标志字节指针 |
numtab | 0x0001 | 数据存储区指针 | |
uplq | 0xCF | 高液位警戒高度,初始值 | |
downlq | 0x10 | 低液位警戒高度,初始值 | |
初始化过程中,调用A/D转换模块获得首次液位数据,并显示,完成初始化工作 |
2.3 各模块软件设计
2.3.1 按键部分软件设计
按键部分软件在设计的过程中,主要是使用了独立式的键盘,不仅能够便于调整相关的液位,更是在维修、养护的过程中便于处理,具体的程序流程图如下所示:
图2-2 键盘程序流程图
下面给出键盘扫描的主程序,其分支程序省略。
void judge_key(void)
{uchar Key_value=0;
Key_value=P3&0x3c; /*读取键值*/
switch(Key_value)
{
case 0x38:delay(30000); /*调用延时子程序*/
if(Key_value==(P3&0x3c)) /*进行判断按键是否为干扰*/
{manage_key2();break;} /*调用子函数*/
else break;
……
case 0x1c:delay(30000);
if(Key_value==(P3&0x3c))
{manage_key5();break;}
else break;
default:break;
}
}
2.3.2 显示模块的软件设计
显示模块的软件设计主要是利用静态锁存显示,对于收集到的数据进行整体的封存状态,当ALE输入信号传输到封存状态的时候,此时的P0口输出会对相关的数据做一个对应的分析、整合,然后会将显示的数据再次的输出,此时人们就能够看到相关的数字。
现将液位显示部分程序简略如下:
display()
{
DIS=0;
_nop_();
_nop_();
_nop_();
P0=dis_transform(prelq);
_nop_();
_nop_();
_nop_();
DIS=1;
}
2.3.3 A/D转换模块软件设计
adWR与adRD为A/D转换的两个控制变量,前面中已经说明了它的功能,故这里不再重复。本模块分为两个阶段,第一阶段是启动A/D转换控制,通过adWR复位→延迟→置位完成。第二阶段是数据的提取过程,考虑到P0口在做输入时的特性,首先软件上将P0口寄存器置为0xFF,延迟适当时间后adRD复位,输出A/D转换结果,随之通过P0口读入数据,还原adRD为高,该阶段结束。两个阶段中可加如适当的延迟,以满足ADC0809 100ns的转换时间[11]。
2.3.4 电机控制模块软件设计
此模块采用单片机主控芯片控制继电器外围电路,来驱动电机的启动与关停。其程序流程图如下图所示。液位检测与电机控制部分源程序简略如下:
check_lq()
{
ad_start();
_nop_();
_nop_();
_nop_();
ad_read();
if(prelq>=uplq && key==1)
{
RELAY=1;
key=0;
makemark(1);
}
else if(prelq<=downlq && key==0)
{
RELAY=0;
key=1;
makemark(0);
}
}
图2-3 液位检测流程图
2.3.5 时间模块软件设计
DS1302内部寄存器的定义直接影响着软件的设计,大概可分为时间控制寄存器和内部RAM寄存器。其中:
(1)CH: 时钟停止位寄存器2的第7位12/24小时标志
CH=0 振荡器工作允许bit7=1,12小时模式
CH=1 振荡器停止bit7=0,24小时模式
(2)WP: 写保护位寄存器2的第5位:AM/PM定义
WP=0 寄存器数据能够写入 AP=1 下午模式
WP=1 寄存器数据不能写入 AP=0 上午模式
(3)TCS: 涓流充电选择DS:二极管选择位
TCS=1010 使能涓流充电 DS=01 选择一个二极管
TCS=其它 禁止涓流充电 DS=10 选择两个二极管
DS=00 或11, 即使TCS=1010, 充电功能也被禁止
(4)RS: 涓流充电电阻选择位
由于DS1302数据传输方式为串行移位输入输出。地址、数据的写操作流程是相同的。地址没有读操作。无论是读还是写,二者结构类似。读写的核心是产生SCLK移位信号与移位,读操作是将数据从DS1302的I/O口移入单片机,写操作是将数据从单片机移入DS1302时钟芯片。我们最终处理的对象是时间数据或状态数据,在获取数据时,首先写入地址,然后读取数据;写入数据时,先写入地址,再输出数据。完成时间的模块软件的设计。DS1302读写程序如下:
ds_read()
{
uchar j;
iodat=0x00;
for(j=8;j>0;j--)
{
iodat=iodat>>1;
odat7=IO_DATA;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
}
}
ds_write(uchar ad)
{
uchar i;
ddat=ad;
for(i=8;i>0;i--)
{
IO_DATA=ddat0;
_nop_();
SCLK=1;
_nop_();
ddat=ddat>>1;
SCLK=0;
}
}
51单片机在整个的使用过程中,必然也是需要依据实际的情况而定,整个的单片机中会有片外存储器读写的指令MOVX,用户在使用的过程中并不需要做更多的工作,只要是按照输入、输出的步骤简单操作就可以。
如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!