【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;
}
}
}
五、实验现象
演示视频: