基于51单片机的水塔水位监测控制系统仿真

仿真图:

在这里插入图片描述

芯片/模块的特点:

AT89C52简介:
AT89C52是一款经典的8位单片机,是意法半导体(STMicroelectronics)公司生产的一系列单片机之一。它基于8051内核,并具有许多与其兼容的特性。

AT89C52的主要特点如下:

内部存储器:AT89C52具有8KB的闪存(Flash)存储器,可用于存储用户程序和数据。这些存储器的内容可以通过编程器进行编程和擦除。

RAM存储器:AT89C52配备了256字节的随机存取存储器(RAM),用于暂存数据和程序的变量。

外部扩展性:AT89C52支持多种外部扩展设备的连接,包括外部存储器(如RAM、EEPROM)和外设(如ADC、LCD、UART等),通过外部硬件连接,可以扩展单片机的功能和应用。

通用I/O引脚:AT89C52拥有32个可编程的通用输入/输出引脚,可用于连接外部设备和与其他芯片进行通信。

定时器/计数器:AT89C52内置了3个16位定时器/计数器和一个可编程的串行定时器/计数器。这些计时器/计数器可用于实现定时功能、生成脉冲信号、测量时间间隔等。

串行通信:AT89C52支持串行通信接口,包括UART(串行异步通信)和SPI(串行外设接口),便于与其他设备进行数据通信和交互。

低功耗模式:AT89C52具有多种低功耗模式,如空闲模式和电源下模式,在不需要执行任务的时候可以将CPU进入低功耗状态以节省能量。

宽电源电压范围:AT89C52的工作电压范围通常为4.0V至5.5V,可以满足大多数应用需求。

主程序:

#include<reg52.h>
#include <intrins.h>
/*****************宏定义******************/
#define uint unsigned int
#define uchar unsigned char
#define u8 unsigned char
/***********位操作端口定义**************/

sbit speak=P3^3;	  //   蜂鸣器
sbit JK2=P3^2;		 //	  水位继电器

sbit led3=P1^3;	  //3/4水位指示灯
sbit led2=P1^2;	  //1/2水位指示灯
sbit led1=P1^1;	 //1/4水位指示灯

sbit SW041=P1^4; //1/4水位
sbit SW021=P1^5; //1/2水位
sbit SW043=P1^6; //3/4水位
sbit SW01=P1^7; //满水位
uchar bianma[]={0xc0,0xf6,0xa1,0xa4,0x96};
/********************************************************************
* 名称 : 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=P3^7;				 
sbit Key2=P3^6;				 

#define KEY_SET 		1	
#define KEY_ADD			2	


//========================================================================
// 函数: u8 Key_Scan()
// 应用: temp=u8 Key_Scan();
// 描述: 按键扫描并返回按下的键值
// 参数: NONE
// 返回: 按下的键值
// 版本: VER1.0
// 日期: 2015-05-29
// 备注: 该函数带松手检测,按下键返回一次键值后返回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;				 				//

 /**********主函数******************/
void main()
{	
	u8 j=0;
	u8 key;
	u8 sd=0;
	while(1)
	{
		key=Key_Scan();					//按键扫描
		if(key==KEY_SET)
		{
			sd=1;
		}
		if(key==KEY_ADD)
		{
			sd=0;
		}
		if(Mode)
		{
			if(sd==1)
				JK2=0;
			if(sd==0)
				JK2=1;
		}
	 
	 if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==1))	//0水位 指示 启动水泵加水
	 {
		led1=0; 
		led2=1; 
		led3=1; 
		JK2=0;
		j++;
		if(j<100)
		{
			speak=1;
		}
		else if(j<200)
		{
			speak=0;
		}							//
		else j=0;
		Mode=0;//禁止手动浇水
		P2=bianma[0]; 
		delay_ms(3);
	}
	
	if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==0))	//1/4水位指示
	 {
		led1=1; 
		speak=1;
		led2=0; 
		led3=1; 
		Mode=1;//允许手动浇水
			
	}
	if((SW01==1)&&(SW043==1)&&(SW021==0)&&(SW041==0))  //1/2水位指示
	 {
		led1=1; 
		speak=1;
		led2=0; 
		led3=1; 
		Mode=1;//允许手动浇水
		P2=bianma[2]; 
	}
	if((SW01==1)&&(SW043==0)&&(SW021==0)&&(SW041==0))	//3/4水位指示
	 {
		led1=1; 
		speak=1;
		led2=0; 
		led3=1; 
		Mode=1;//允许手动浇水
		P2=bianma[3]; 
	}
	if((SW01==0)&&(SW043==0)&&(SW021==0)&&(SW041==0))	//如果水满了 指示灯指示 停止加水
	 {
		led1=1; 
		speak=1;
		led2=1; 
		led3=0; 
		Mode=0;//禁止手动浇水
		JK2=1; 
		P2=bianma[4];
	}
	}			 

}

设计文件:

链接:https://pan.baidu.com/s/13BYRtt1BLeQ_BMznU_3TYg?pwd=vwpx

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值