基于51单片机水位控制系统设计

1.设计任务

利用AT89C52单片机为核心控制元件,设计一个单片机水位控制系统,设计的系统实用性强、操作简单,实现了智能化、数字化。

1)利用单片机及蜂鸣器、抽水电机、水位传感器等器件设计;

(2)将探测到的水位变化信号转换为电压信号,经调理电路整形处理为TTL电平送入单片机;

(3)单片机对送入的信号进行数据处理,在LCD上进行水位显示,超出水位警戒线时发出报警提示;

(4)当液位到达设定的最高值时,自动停止水泵,当液位到达设定的最低值时,自动打开水泵,水位到达设定的最高值时,水泵停止工作;

(5)通过不同颜色的灯光进行水位预警;

(6)当液位到达最低警戒线时,通过声光报警。

2. 设计要求

2.1系统方案论证

根据设计任务,分析设计系统的组成,给出实现设计任务的几种方案,分析比较几种设计方案的优劣,本着尽量以软件代替硬件,同时力求电路简单,工作可靠的原则,确定总体设计方案。

2.2系统硬件电路设计

根据系统设计方案进行软、硬件的分配,软、硬件设计分别进行。硬件设计包括单片机最小系统和扩展接口及配置,硬件结构在设计时要选择合适的元器件,硬件电路要简洁、工作可靠,需用Proteus绘制整个系统的电路仿真原理图。

2.3软件设计

根据该系统要求的功能进行软件设计,简述软件的功能,并根据每个模块的功能绘制软件流程图,根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求加以注释。

2.4 软硬件系统仿真

将编译后的程序软件加载到Proteus软件仿真的单片机ROM中,运行系统,实现软件程序对单片机系统的硬件电路的控制,并调试仿真结果,直至与设计任务相符。

#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 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; //满水位


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()
{	 
	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相关函数**/


sbit LCDRS = P2^5;
sbit LCDEN = P2^6;



//LCD延时
void LCDdelay(uint z)		
{
  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) 
{     
	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初始化
void Init1602()
{
  uchar i=0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏
	
}



 /**********主函数******************/
void main()

	Init1602();			  //调用初始化
	LCD_Write_String(0,0,"   Shuiwei Kz   ");  //开机界面
	LCD_Write_String(1,0,"  Dj:           ");  
	while(1)
	{
		if(!JK2)
			LCD_Write_String(1,6,"  Start   ");
		else
			LCD_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;
	}
	}			 

}

完整代码点开链接私信  免费  获取。

【iBot机器人工作室的个人空间-哔哩哔哩】 https://b23.tv/ryUWVKa

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K11mvp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值