基于51单片机的超声波液位控制器设计

发布者:甜美瞬间最新更新时间:2021-10-14 来源: eefocus关键字:51单片机  HC-SR04 手机看文章 扫描二维码
随时随地手机看文章

一.硬件方案

利用超声波传输中距离与时间的关系,采用8051单片机进行控制及数据处理,设计出了能精确测量两点间距离的超声波液位检测系统。并通过液位的高低开,通过控制继电器,选择注水或者放水。


主要由51单片机+HC-SR04超声波传感器+LCD1602液晶+水泵+按键+蜂鸣器+继电器设计而成;如图:

二.设计功能

(1)本设计中液晶显示有4个字母,分别为

H------容器的最高水位设定值(不能高于实际高度)

L------容器的最低水位设定值

D-----容器实际高度(可以设置)

C-----容器内液体的高度(在实际演示中,障碍物离探头越近,液晶C显示越大,因为障碍物好比液面,离探头近了说明水位高了)

(2)如果容器实际高度D你设置为1米,那么C液体的高度最高能测到98cm,因为探头的盲区在2cm左右。如果D设为2米,那么最高能测到1.98m。

(3)按键功能分别为:设置键 增加键 减小键 复位键。

(4)三个指示灯的分别功能为:红色----超过设定的最高水位H;黄色-----低于设定的最低水位L;绿色----最高H和最低L中间。

(5)当液位高于或者低于设置值,蜂鸣器报警;

(6)当液位高于最高水位设定值,排水继电器打开;当液位低于最低水位设定值,注水继电器打开;


三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

(2)PCB,如图:

四.软件设计

主程序源码

/*********************************************************/

void main(void)

{

initIO();//初始化IO端口

delay500ms(); //启动延时,给器件进入正常工作状态留够时间

initLCD1602(); //LCD初始化

putLineCharsToLCD1602(lineOne, 8, 8, "D:000cm ");//显示distance (总)距离(检测探头到水库底部的距离)D

putThreeCharToLCD1602(lineOne, 8 + 2, uiD);//显示三位数值

putLineCharsToLCD1602(lineOne, 0, 8, "H:000cm ");//显示设定的最高报警水位H

putThreeCharToLCD1602(lineOne, 0 + 2, uiH);//显示三位数值

putLineCharsToLCD1602(lineTow, 0, 8, "L:000cm ");//显示设定的最低报警水位L

putThreeCharToLCD1602(lineTow, 0 + 2, uiL);//显示三位数值

putLineCharsToLCD1602(lineTow, 8, 8, "C:000cm ");//显示当前CURRENT水位C

initTimer0();//初始化定时器0

initTimer1();

//阀门动作:初始先排水

io_Control_Inlet = isio_Control_Inlet_OFF;

io_Control_Outlet = isio_Control_Outlet_ON;

g_flagSwitch = isNo;

while(1)

{

io_US_TX = 1;        //启动超声波模块信号

delay10us();

io_US_TX = 0;

while(io_US_RX == 0);//等待计时开始

TR0 = 1;    //开启定时器0,计时开始

IT1 = 1; //设置外中断INT1输入信号模式(1:Falling only仅下降沿有效 0:Low level低电平有效)

EX1 = 1;                        //使能外中断INT1

while(EX1 == 1 && g_flag == isNo)//等待中断或超时退出

{

uchar ucKeyValue = GetKey();//在等待中检测按键

if(ucKeyValue) execute_key_task(ucKeyValue);//如果有键按下则执行按键任务

}

if(CalculatedWaterLevel() == isNo) continue;//计算水位,如果超出范围返回isNo并重新循环

TR0 = 0;//暂时关闭定时器0

//清零定时器和计数变量以及标志

TL0 = 0;

TH0 = 0;

g_flag = isNo;

ucCount = 0;

g_flag05s = isNo;

TR0 = 1;//打开定时器0

while(g_flag05s == isNo)//延时0.52秒,以防止此期间返回的超声波产生错误信息,并使显示变化放慢,保证视觉效果

{

uchar ucKeyValue = GetKey();

if(ucKeyValue) 

{

if(ucKeyValue == DATA_KEY_DEC)

{

g_flagBeepTimer = isNo;//用减小按键取消报警标志

}


execute_key_task(ucKeyValue);//如果有键按下则执行按键任务

}


}

TR0 = 0;//暂时关闭定时器0

//清零定时器和复位标志

TL0 = 0;

TH0 = 0;

g_flag = isNo;

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

//水箱清洗提示:

if(g_flagBeepTimer == isYes)

{

buzzerCall();

//用减小按键取消报警标志

}

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

}

}

关键字:51单片机  HC-SR04 引用地址:基于51单片机的超声波液位控制器设计

上一篇:Maxim推出新一代ChipDNA PUF技术的物联网安全芯片
下一篇:基于51单片机的智能恒温箱设计--数码管显示

推荐阅读最新更新时间:2024-11-06 12:32

51单片机学习单片机之路总结
学习单片机有一学期了,现在也由51转到STM32了。一直想对51的学习做一个总结。也希望对别人有一些启发。也给后学者提供一些建议。当然本文是我对自己学习过程的总结,若有不对的地方,还请高手指出。 我想,再看本文之前,最好对单片机有了最基础的了解,最好能用单片机驱动起一个LED灯,否则,可能会不知所云。 首先我想问一个问题,你认为单片机有哪些内容呢?也许你现在手里有一块开发板,你已经开始从流水灯开始,一个一个外设在跑了。也许你已经看过一些单片机入门的书了。如果是这样,我估计你会回答,单片机包括了流水灯,键盘,数码管,定时器,中断,串口,AD,DA,液晶,DS18B20……其实这样的回答其实符合了大多数初学者的心态。因为天祥老
[单片机]
8051单片机指令系统的7种寻址方式解析
寻址方式:寻址就是寻找操作数的地址。绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。所谓寻址方式就是通过什么途径获取操作数的方式。根据指令操作的需要,计算机总是提供多种寻址方式。一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。 8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。 寄存器寻址 寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。例如:MOV A R1 这条指令的功能是把工作寄存器R1
[单片机]
基于C8051单片机的血糖监测仪解决方案
  血糖测量的电生物化学原理是当施加一定电压于经酶反应后的血液产生的电流会随着血液中的血糖浓度的增加而增加。通过精确测量出这些微弱电流,并根据电流值和血糖浓度的关系,反算出相应的浓度。所以,确定这个关系是问题的核心。但其关系复杂,受多方面因素影响。电压强度、所使用的试条以及检测的血液量都会对其产生影响。理论上需要在所有浓度点上大量实验才能确定最终的关系。在实际操作中,只需在选择若干重要浓度点做大量实验,然后采用曲线拟合或插值等数据处理方式来确定其与电流值之间的关系。   血糖测量通常采用电化学分析中的三电极体系。三电极体系是相对于传统的两电极体系而言,包括,工作电极(WE),参比电极(RE)和对电极(CE)。参比电极用来定点位
[单片机]
基于C80<font color='red'>51单片机</font>的血糖监测仪解决方案
Proteus使用笔记之51单片机4x4矩阵按键
采用反转法判断按键坐标,即行号与列号获得按键码。 写完后发现Proteus一个问题:直接使用这样的if(P1&0xf0!=0xf0)语句时,调不出来,当用了一个中间变量过渡时,就调出来了,害我花了一个上午的时间,现在暂时不知道Proteus为什么要这样,实际中是不需要的。 程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int void delayMS(unsigned int z); uchar keyscan(void); void main(void) { uchar key; while(1) {
[单片机]
51单片机学习之路 —— 1.1学习准备
学习准备 :   1 硬件准备 :       一台电脑(不需要很棒的配置,运行程序不卡既可以了)       学习板 (我自己是在淘宝上买了stc89c52的板子,功能不是很强,但用作学习应该是够了)       #这里多说一句,很多学校实验室其实可以提供学习的板子,大家可以向专业老师询问,也能省不少下钱呢。   2 软件 :       驱动 (将自己的板子的驱动装好)       编写软件(主流有keil uVison4 或 keil uVision3 )       烧写软件 (与板子对应的软件 如stc公司的烧写软件)       #补一个 有的时候要画流程图,我用的是ProcessOn 通过它可以在线画流程图挺方便的
[单片机]
<font color='red'>51单片机</font>学习之路 —— 1.1学习准备
51单片机数码管详解
一.数码管基础知识 LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用的段数一般为7段,有的另加一个小数点 。LED数码管根据LED的接法不同,分为共阳和共阴两类 。 1.共阳极数码管 指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制,如图a所示。 2.共阴极数码管 指八段数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制,如图b所示。 二.静态数码管(以共阳极为例) 1.原理分析 LED 发光二极管的正极共同接在VCC上,这里以单片机P1口为例,当P1口对应引脚为0(即低电平)时数码
[单片机]
基于51单片机设计N字节十六进制除法
1、思路 借用十进制除法竖式计算的思路,作十六进制的除法竖式计算。 将除数3字节与被除数高3字节对齐,除完后保存当前字节的商和余数,将被除数往低顺延一个字节,再执行新一轮的除法。被除数有6字节,除数有3字节,故除法需执行4轮。这是最外层的循环。 每一轮的除法可转换为多次减法,需要注意的是,对被除数来说减法需要一直执行到最高字节,以保证借位执行无误。这是中间层的循环。 每一轮的减法由单个字节的减法循环组成,减的过程中考虑借位。由于除数只有3个字节,执行完此3次减法后,除数再往上的字节内容为00H,减法就变成了XXH-CY-00H,即纯粹的借位。 为了判断中间层循环什么时候结束,需要额外写一个子程序来比较减数与被减数的
[单片机]
基于<font color='red'>51单片机</font>设计N字节十六进制除法
MCS-51单片机串行口IP核的实现
   1 引言   随着集成电路的深亚微米制造技术和eda技术的迅猛发展,芯片的密度和复杂度不断提高,复用以前的设计模块用于asic芯片和在一块芯片上实现嵌入式系统的功能形成所谓的片上可编程系统( system on programmable chip,sopc) 已成为一种发展的新趋势。ip core(知识产权核) 设计的重用性以及sopc 技术的出现,以其设计的灵活性大大缩短了产品的设计周期,减少了设计成本,降低了设计风险, 加快了产品的上市速度。本文中介绍的串行口控制器是一种功能和通信协议与mcs-51系列单片机的串行口相兼容,性能有大幅提高的数据通信部件,其往往于低速低成本的微机与下位机的通讯中,并允许在串行链路上进
[单片机]
MCS-<font color='red'>51单片机</font>串行口IP核的实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved