Proteus仿真——《基于51单片机的水塔水位控制系统》

ops/2024/12/26 12:06:17/

原理

本课题设计基于单片机的水塔水位控制系统,以AT89C单片机>51单片机为核心处理器设计单片机最小系统,外加数码管显示模块、液位传感器、AD转换电路、继电器电路与水泵、独立按键模块。系统的结构图如下:

图片

系统实现原理

AT89C单片机>51单片机具有32个可编程的I/O口、定时器、外部中断等资源,可连接许多外设电路。本设计中通过液位传感器检测水位的信息,再经过ADC0832转换为电信号,然后送给单片机处理,最后液位信息显示在数码管上。单片机通过比较设定好的液位上下限,当液位低于下限时控制继电器吸合启动水泵进行加水,当加水到上限时,控制继电器断开,停止加水。同时,通过一个独立按键实现手动加水。

硬件选型

AT89C51,ADC0832,按键,数码管,继电器,舵机,LED,电阻,晶振

晶振电路

晶振:又叫晶体振荡器,其作用是为单片机系统提供基准的时钟信号,单片机的内部资源都是根据时钟信号来进行工作的。单片机>51单片机各个外围电路的运行都有一个基准信号,这个基准信号就是时钟信号。单片机时钟的频率影响单片机的运行速度,时钟电路的稳定性直接影响单片机工作的稳定性。单片机的时钟有内部时钟和外部时钟两种,本设计中采用单片机的内部时钟。AT89C52单片机的18脚和19脚是晶振引脚,设计中选择12MHz的晶振,外加两个的电容帮助晶振起振,并维持震荡信号的稳定。晶振电路如下图所示:

图片

液位传感器

液位传感器(静压液位计/液位变送器/液位传感器/水位传感器)是一种测量液位的压力传感器。静压投入式液位变送器(液位计)是基于所测液体静压与该液体的高度成比例的原理,采用隔离型扩散硅敏感元件或陶瓷电容压力敏感传感器,将静压转换为电信号,再经过温度补偿和线性修正,转化成标准电信号(一般为4~20mA/1~5VDC),适用于石油化工、冶金、电力、制药、供排水、环保等系统和行业的各种介质的液位测量。本设计的仿真中,使用一个变阻器来模拟液位传感器。

ADC0832

ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,已经有很高的普及率。

ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。电路图如下:

图片

数码管模块

本设计中选用3位的共阴极数码管来显示水位信息。共阴数码管:指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。数码管的位选端连接到单片机的P2口,段选端连接到单片机的P0口,通过给位选端低电平就可以选中某一位数码管点亮,在编程时使用动态扫描的方法点亮数码管。数码管电路如下图所示。

图片

继电器电路

本系统设计中通过继电器控制水泵加水,继电器部分通过一个三极管控制,当单片机的IO口输出低电平时,三极管导通,工作指示灯点亮,继电器工作,继电器的衔片吸合,水泵电路导通,从而进行加水。当IO口输出高电平时,三极管截止,继电器断开,水泵不工作。电路图如下。

图片

主程序设计

主程序的任务是完成系统的初始化,获取各个模块的信息并进行处理,控制各个模块实现相应的功能。流程图如下:

图片

数码管显示程序设计

本设计中采用动态扫描的方法控制数码管显示,在while循环中,循环扫描数码管。将数码管要显示的3位数据放到一个数组中,在数据更新时时,只需要将该数组的值更新即可,程序会将数组中的值显示到数码管上。

数码管扫描代码如下:

P0=0x00;	//消隐        P2=0xfe;	//选中第一位数码管        P0=table[water/100];  //百位        delayus(100);        P0=0x00;	//消隐        P2=0xfd;	//选中第二位数码管        P0=table[(water%100)/10];  //十位        delayus(100);        P0=0x00;	//消隐        P2=0xfb;	//选中第三位数码管        P0=table[water%10];  //个位        delayus(100);3.3 按键扫描程序设计按键扫描部分程序控制手动加水,在while循环中一致扫描按键端口,如果检测到端口为低电平,则表示按键按下,然后进行约10ms的消抖,再次检测按键是否按下,如果按键为按下状态,则表示按键确实按下。然后控制水泵加水。代码如下:if(!key)		//扫描按键        {            if(!keyflag)		//判断按键状态            {                delayus(1000);	//延时消抖                if(!key)		//再次扫描按键                {                    keyflag=1;	//按键按下状态                    if(water<90)	//水位小于90开始加水                    {                        motor=0;	//启动水泵                        flag=1;		//表示在加水状态                    }                }            }        } else keyflag=0;  //按键松开状态

AD转换程序设计

使用ADC0832将液位的电信号转换为数字量。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示起始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。AD转换代码如下:

unsigned char ADC0832_Read(bit ch){    unsigned char i,dat;    CS=1;     //一个转换周期开始    CLK=0;    //为第一个脉冲作准备    CS=0;     //CS置0,片选有效    DIO=1;    //DIO置1,规定的起始信号    CLK=1;    //第一个脉冲    CLK=0;    //第一个脉冲的下降沿,此前DIO必须是高电平    DIO=1;    //DIO置1, 通道选择信号    CLK=1;    //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0    CLK=0;    //第二个脉冲下降沿    DIO=ch;   //ch为几,则选择通道几    CLK=1;    //第三个脉冲    CLK=0;    //第三个脉冲下降沿    DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1    CLK=1;    //第四个脉冲    for(i=0; i<8; i++)//高位在前    {        CLK=1; //第四个脉冲        CLK=0;        dat<<=1;       //将下面储存的低位数据向右移        dat|=(unsigned char)DIO;   //将输出数据DIO通过或运算储存在dat最低位    }    CS=1;    //片选无效    return dat;    	 //将读出的数据返回}

仿真图:

图片

仿真结果分析

经过仿真测试,调节变阻器模拟液位改变,当液位低于20时,继电器吸合,工作指示灯点亮,水泵启动,开始加水。当加水到90时,继电器断开,水泵停止。同时,在水位低于90时,可以通过手动加水按键进行加水,同样的,加水到90时,继电器断开,水泵停止。经过多次测试分析,改系统实现了设计的所有功能。

proteus仿真定制前往某鱼:两栖电子,各种模板和定制仿真设计均有:


http://www.ppmy.cn/ops/145120.html

相关文章

用例图和活动图的区别与联系

在软件开发过程中&#xff0c;需求分析是至关重要的一步。为了更好地理解和描述系统的功能需求&#xff0c;开发人员通常会使用各种图形化工具。其中&#xff0c;用例图和活动图是两种非常常用的工具。虽然它们都用于描述系统的行为&#xff0c;但各自具有不同的特点和适用场景…

设计模式の中介者发布订阅备忘录模式

文章目录 前言一、中介者模式二、发布订阅模式三、备忘录模式 前言 本篇是关于设计模式中介者模式、观察者&#xff08;发布-订阅&#xff09;模式、以及备忘录模式的学习笔记。 一、中介者模式 中介者模式是一种行为型设计模式&#xff0c;其核心目的是为了减少对象之间的复杂…

ubuntu安装sublime安装与免费使用

1. ubuntu安装sublime 参考官网: Linux Package Manager Repositories 2. 破解过程 打开如下网址,打开/opt/sublime_text/sublime_text https://hexed.it/ 3. 替换在hexed打开的文件中查找并替换: 4180激活方法 使用二进制编辑器 8079 0500 0f94 c2替换为 c641 05…

十二、e2studio VS STM32CubeIDE之栈回溯cmbacktrace

目录 一、概述/目的 二、注意或限制 三、stm32u575 cmbacktrace 四、瑞萨ra6m4 cmbacktrace 五、总结 一、概述/目的 我们分享过十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯 我们继续分享通用mcu cm33内核stm32u575和瑞萨ra6m4的栈回溯cmbacktrace的例程源码 为了快…

金仓数据库安装-Kingbase v9-centos

在很多年前有个项目用的金仓数据库&#xff0c;上线稳定后就没在这个项目了&#xff0c;只有公司的开发环境还在维护&#xff0c;已经好多年没有安装过了&#xff0c;重温一下金仓数据库安装&#xff0c;体验一下最新版本&#xff0c;也做一个新版本的试验环境&#xff1b; 一、…

echarts5.0以上版本不能使用4.x的map,解决办法

先把echarts 4版本的map文件夹放到项目中 然后在项目中使用 import china from “/utils/map/json/china.json”; import “/utils/map/js/china”; 我是放到utils下面了 在组件中使用的时候加上一行代码就可以了 echarts.registerMap(china, china);

Android笔记:解决fragment+viewpager第二次进入的时候没有数据的问题

在使用ViewPager结合Fragment时&#xff0c;如果第二次无法显示&#xff0c;可能是因为FragmentManager没有正确处理Fragment的状态&#xff0c;或者ViewPager的适配器没有正确处理Fragment的生命周期。 解决方法&#xff1a; 确保你的FragmentPagerAdapter或FragmentStatePa…

排序算法(系列)

希尔排序&#xff08;Shell Sort&#xff09;是一种插入排序的改进版本。它是基于插入排序的思想&#xff0c;通过将待排序的元素进行分组&#xff0c;然后对每组进行插入排序&#xff0c;逐步减少分组的大小&#xff0c;最终完成排序。希尔排序的核心思想是将序列分为多个子序…