基于51单片机水位监测控制报警仿真设计液位计proteus仿真+程序+设计报告+讲解视频 您所在的位置:网站首页 液位测量设计 基于51单片机水位监测控制报警仿真设计液位计proteus仿真+程序+设计报告+讲解视频

基于51单片机水位监测控制报警仿真设计液位计proteus仿真+程序+设计报告+讲解视频

2024-06-03 05:19| 来源: 网络整理| 查看: 265

这里写目录标题 💥1. 主要功能:💥2. 讲解视频:💥3. 仿真💥4. 程序代码💥5. 设计报告💥6. 设计资料内容清单&&下载链接💥[网盘链接:](https://docs.qq.com/doc/DS2RGaVBRcHhId3Bk) 51单片机水位监测控制报警仿真设计 ( proteus仿真+程序+设计报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0064

💥1. 主要功能:

基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)

基于51单片机水位监测控制报警仿真设计

1、监测并通过数码管显示当前水位;

2、利用电机模拟水泵,具有蜂鸣器,显示灯等装置;

3、带有水位上下限设置功能,低于水位下限加水,高于上限停止加水;

4、当前水位高于水位上限蜂鸣器报警,并抽水,水泵抽水时显示灯亮,抽到水位上限时则停止抽水;

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

💥2. 讲解视频:

讲解视频包含仿真运行讲解和代码讲解

💥3. 仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后,数码管显示水位,如果水位偏高,偏高指示灯亮红色

img

当前水位高于水位上限蜂鸣器报警,并抽水,水泵抽水时显示灯亮,抽到水位上限时则停止抽水;

img

💥4. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

img main.c

#include "reg51.h" #include #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 if(i==4) { if(lim2 mode=0; } //点亮LED if(water 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; } } } //定时器中断 void Timer0() interrupt 1 { if(time if(water


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有