【51单片机】【protues仿真】基于51单片机水位监测系统

 目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示当前水位值
2、按键设置水位上下限阈值
3、当水位低于下限,启动蜂鸣器警报并抽水至水位上限停止抽水
4、电机模拟水泵,蜂鸣器,指示灯显示

二、使用步骤

51单片机水位监测系统是一种基于8051架构的嵌入式液位检测装置,通过模拟量/数字量传感器采集水位信息,结合控制算法实现水位监控与报警功能‌。该系统可广泛应用于水塔、水箱、河道等场景的水位监测与控制。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、水位传感器模块、adc模块
4、蜂鸣器模块
5、继电器模块
6、数码管显示模块

四、软件设计

#include "reg51.h"
#include <PCF8591.h>
#define uchar unsigned char
#define uint unsigned int
sbit out=P3^3;//抽水机
sbit led1=P3^6;//指示灯
sbit led2=P3^7;
sbit smg1=P2^0;//数码管
sbit smg2=P2^1;     
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit beep=P1^7;//蜂鸣器
uchar time=0,mode=0;//系统变量     
uchar water=0;//水位
uchar lim1=40,lim2=60;//阀值
uchar key=0;
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
//延时
void delay(uint i)
{
    while(i--);
}
 //按键检测
uchar key_scan()
{
    uchar i=0;
    if(!k1 &&(key!=1))
    {
        key=1;
        i=1;
    }
    if(!k2 &&(key!=2))
    {
        key=2;
        i=2;
    }
    if(!k3 &&(key!=3))
    {
        key=3;
        i=3;
    }
    if(!k4 &&(key!=4))
    {
        key=4;
        i=4;
    }
    if(!k5 &&(key!=5))
    {
        key=5;
        i=5;
    }
    if(k1 && k2 && k3 && k4 && k5 )
        key=0;
    return i;
}

//主函数
void main()
{
    uchar i=0,k=0;

    TMOD|=0X01;
    TH0=0X3C;
    TL0=0XB0;    
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器
    while(1)
    {
        i=key_scan();//按键检测
        //设置按钮
        if(i==2)
        {
            mode=1;
        }
        if(i==1)
        {
            mode=2;
        }
        if(mode==1)//设置下限
        {
        if(i==4)
        {
            if(lim1<lim2)
                lim1++;
        }
        if(i==5)
        {
            if(lim1>0)
                lim1--;
        }
        }
        if(mode==2)//设置上限
        {
        if(i==4)
        {
            if(lim2<100)
                lim2++;
        }
        if(i==5)
        {
            if(lim2>lim1)
                lim2--;
        }
        }
        if(i==3)//OK
        {
            mode=0;
        }
        //点亮LED
        if(water<lim1)//水位低
        {
            led1=0;led2=1;
        }
        else if(water>lim2)//水位高
        {
            led1=1;led2=0;
        }
        else
        {
            led1=1;led2=1;
        }
        //显示水位
        if(mode==0)
        {
            P0=smgduan[water/100];        smg2=0;delay(100);smg2=1;
            P0=smgduan[water%100/10];    smg3=0;delay(100);smg3=1;
            P0=smgduan[water%10];        smg4=0;delay(100);smg4=1;
        }
        //显示下限
        if(mode==1)
        {
            P0=0x38;        smg1=0;delay(100);smg1=1;
            P0=smgduan[lim1/100];        smg2=0;delay(100);smg2=1;
            P0=smgduan[lim1%100/10];    smg3=0;delay(100);smg3=1;
            P0=smgduan[lim1%10];        smg4=0;delay(100);smg4=1;
        }
        //显示上限
        if(mode==2)
        {
            P0=0x76;        smg1=0;delay(100);smg1=1;
            P0=smgduan[lim2/100];        smg2=0;delay(100);smg2=1;
            P0=smgduan[lim2%100/10];    smg3=0;delay(100);smg3=1;
            P0=smgduan[lim2%10];        smg4=0;delay(100);smg4=1;
        }
    }
}

五、实验现象

演示视频:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值