当前位置: 首页 > news >正文

基于51单片机水位监测控制自动抽水—LCD1602

基于51单片机水位监控抽水

(仿真+程序+原理图+设计报告)

功能介绍

具体功能:

  本产品采用单片机+LCD1602液晶显示+继电器+抽水电机+蜂鸣器设计而成。

主要功能:

1.通过水位传感器对水位检测,把检测到的结果送入单片机进行处理;

2.LCD1602显示水位0-4水位等级;

3.水位检测为0时,开始抽水并报警,最高水位自动取消抽水;

4.若水位在1~3之间,可以通过按键手动开启/关闭抽水;

程序

#include<reg52.h>
#include <intrins.h>
/*****************宏定义******************/
#define uint unsigned int
#define uchar unsigned char
#define u8 unsigned char
#define     u16   		unsigned int
/***********位操作端口定义**************/sbit speak=P2^0;	  //   蜂鸣器
sbit JK2=P1^6;		 //	  水位继电器sbit led3=P2^7;	  //3/4水位指示灯
sbit led2=P2^4;	  //1/2水位指示灯
sbit led1=P2^1;	 //1/4水位指示灯sbit SW041=P1^0; //1/4水位
sbit SW021=P1^1; //1/2水位
sbit SW043=P1^2; //3/4水位
sbit SW01=P1^3; //满水位/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms(uint q)
{uint i,j;for(i=0;i<q;i++)for(j=0;j<110;j++);
}/***********************************************************************************************************
按键检测相关函数
***********************************************************************************************************/
//按键
sbit Key1=P1^4;				 //设置键
sbit Key2=P1^5;				 //加按键#define KEY_SET 		1		//设置
#define KEY_ADD			2		//加//完整资料
//微信公众号:木子单片机//========================================================================
// 函数: u8 Key_Scan()
// 应用: temp=u8 Key_Scan();
// 描述: 按键扫描并返回按下的键值
// 参数: NONE
// 返回: 按下的键值
// 版本: VER1.0
// 备注: 该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下
//========================================================================
u8 Key_Scan()
{	 static u8 key_up=1;//按键按松开标志if(key_up&&(Key1==0||Key2==0)){delay_ms(10);//去抖动 key_up=0;if(Key1==0)			return 1;else if(Key2==0)return 2;}else if(Key1==1&&Key2==1)key_up=1; 	    return 0;// 无按键按下
}uchar Mode=0;				 				//
/***********************************************************************************************************
LCD1602相关函数
***********************************************************************************************************///LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)
sbit LCDRS = P2^5;
sbit LCDEN = P2^6;//LCD延时
void LCDdelay(uint z)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);
}
//写命令
void write_com(uchar com)
{LCDRS=0;				  P0=com;
//  DAT=com;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;
}
//写数据
void write_data(uchar date)
{LCDRS=1;P0=date;
//  DAT=date;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;
}/*------------------------------------------------选择写入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y) 
{     if (x == 0) {     write_com(0x80 + y);     //表示第一行}else {      write_com(0xC0 + y);      //表示第二行}        
}
/*------------------------------------------------写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
{     SelectPosition(x,y) ;while (*s) {     write_data( *s);     s ++;     }
}
//========================================================================
// 函数: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
// 应用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一个字节位置显示366的后4位,显示结果为 0366
// 参数: x:行,y:列,s:要显示的字,l:显示的位数
// 返回: none.
// 版本: VER1.0
// 备注: 最大显示65535
//========================================================================
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l) 
{     SelectPosition(x,y) ;if(l>=5)write_data(0x30+s/10000%10);	//万位if(l>=4)write_data(0x30+s/1000%10);		//千位if(l>=3)write_data(0x30+s/100%10);		//百位if(l>=2)write_data(0x30+s/10%10);			//十位if(l>=1)write_data(0x30+s%10);		//个位}
/*1602指令简介write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示 无光标 无光标闪烁write_com(0x0d);//打开显示 阴影闪烁write_com(0x0d);//打开显示 阴影闪烁
*/
//1602初始化
void Init1602()
{uchar i=0;write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示 无光标 无光标闪烁write_com(0x06);//当读或写一个字符是指针后一一位write_com(0x01);//清屏}/**********主函数******************/
void main()
{	u8 j=0;u8 key;u8 sd=2;Init1602();			  //调用初始化显示函数LCD_Write_String(0,0,"   Shuiwei Kz   ");  //开机界面LCD_Write_String(1,0,"  Dj:           ");  while(1){if(!JK2)LCD_Write_String(1,6,"  Start   ");elseLCD_Write_String(1,6,"  Stop    ");key=Key_Scan();					//按键扫描if(key==KEY_SET){sd=1;}if(key==KEY_ADD){sd=0;}if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==1))	//0水位 指示 启动水泵加水{led1=0; led2=1; led3=1; JK2=0;j++;if(j<10){speak=1;}else if(j<20){speak=0;}							//else j=0;Mode=0;//禁止手动浇水LCD_Write_Char(1,5,0,1) ;sd=2;delay_ms(3);}if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==0))	//1/4水位指示{led1=1; speak=1;led2=0; led3=1; Mode=1;//允许手动浇水LCD_Write_Char(1,5,1,1) ;}if((SW01==1)&&(SW043==1)&&(SW021==0)&&(SW041==0))  //1/2水位指示{led1=1; speak=1;led2=0; led3=1; Mode=1;//允许手动浇水LCD_Write_Char(1,5,2,1) ;}if((SW01==1)&&(SW043==0)&&(SW021==0)&&(SW041==0))	//3/4水位指示{led1=1; speak=1;led2=0; led3=1; Mode=1;//允许手动浇水LCD_Write_Char(1,5,3,1) ;}if((SW01==0)&&(SW043==0)&&(SW021==0)&&(SW041==0))	//如果水满了 指示灯指示 停止加水{led1=1; speak=1;led2=1; led3=0; Mode=0;//禁止手动浇水JK2=1; LCD_Write_Char(1,5,4,1) ;sd=2;}}			 }

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

蜂鸣器:BUZZER;排针4-Pin;

直插电解电容:10uf、1000uf;

直插瓷片电容:30P;5V小水泵;

5mm发光二极管;DC电源插座;

水位小板;按键6X6X5MM;

PNP 三极管;NPN三极管;

色环电阻:2.2K、1k、10k;

LCD1602液晶显示器;

HRS4FH-S5V继电器;

自锁开关:SW8*8;

晶振:12MHZ;

导线:若干;

设计资料

01仿真图

  本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

02原理图

   本系统原理图采用Altium Designer19设计,具体如图!

03程序

    本设计使用软件keil5版本编程设计!具体如图!

04设计报告

    七千字设计报告,具体如下!

05设计资料

    全部资料包括程序(含注释)、仿真源文件 、AD原理图、任务书、开题报告、设计报告、实物图、元件清单等。具体内容如下,全网最全! !

​大家共同学习进步:

点赞分享一起学习成长。

http://www.dtcms.com/a/481615.html

相关文章:

  • 电脑系统做的好的几个网站wordpress主题很卡
  • 数据结构和算法篇-环形缓冲区
  • iOS 26 性能分析深度指南 包含帧率、渲染、资源瓶颈与 KeyMob 协助策略
  • vs网站建设弹出窗口代码c网页视频下载神器哪种最好
  • Chrome性能优化秘籍
  • 【ProtoBuffer】protobuffer的安装与使用
  • Jmeter+badboy环境搭建
  • ARM 总线技术 —— AMBA 入门
  • 【实战演练】基于VTK的散点凹包计算实战:从代码逻辑到实现思路
  • Flink 状态设计理念(附源码)
  • 23种设计模式——备忘录模式(Memento Pattern)
  • 【LeetCode】73. 矩阵置零
  • 网站开发教材男通网站哪个好用
  • 《3D草原场景技术拆解:植被物理碰撞与多系统协同的6个实战方案》
  • 软件测试—BUG篇
  • OpenAI系列模型介绍、API使用
  • 做网站的可以信吗深圳商城网站建设
  • 关于使用docker部署srs服务器的相关指令
  • 基于M序列编码的水下微弱目标检测方法
  • Ubuntu SSH 免密码登陆
  • vue前端面试题——记录一次面试当中遇到的题(8)
  • FastbuildAI后端WebModule模块注册分析
  • 南昌网站排名网站站群建设方案
  • day9 cpp:运算符重载
  • Qoder上线提示词增强功能,将开发者从 “提示词“ 的负担中解放出来
  • 「机器学习笔记15」深度学习全面解析:从MLP到LSTM的Python实战指南
  • 在ARM版MacBook上构建lldb-mi
  • php网站后台搭建html代码大全简单
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十一)MySQL数据库主从复制
  • 云手机的真实体验感怎么样