(毕业设计源码)基于51单片机超声波测液位测距仪水位监测报警设计

1、系统功能介绍

  • 系统构成:

    • 本设计由STC89C52单片机电路+LCD1602液晶显示电路+超声波模块HC-SR04检测电路+LED指示灯电路+蜂鸣器报警电路+电源电路组成。
  • 系统功能:

    • 1、1602液晶显示液位。当水位超过50cm,红灯和蜂鸣器报警,当水位低于50cm,绿灯亮蜂鸣器不报警。
    • 2、本设计的单片机核心电路具有上电复位电路、按键复位电路和晶振电路。
  • 可根据本篇文章完成毕业设计的开题报告、任务书、设计等

2、资料下载

3、系统电路介绍

3.1、STC89C52单片机核心系统电路设计

  • STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

STC89C52主要特性如下:

  • (1)8K字节程序存储空间;
  • (2)512字节数据存储空间;
  • (3)内带4K字节EEPROM存储空间;
  • (4)可直接使用串口下载

单片机最小系统电路图如下图所示

实物图:

3.2、HC-SR04超声波避障传感器电路设计

  • 本设计选择的超声波模块为HC-SR04 超声波模块,此本模块性能稳定,测度距离精确。可以提供20-400cm的非接触式距离感测功能,测量精度科大3mm,模块包括超声波发射器、超声波接收器和控制电路。
  • 该模块能和国外的SRF05,SRF02等超声波测距模块相媲美。模块高精度,盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!

模块接线方式:

  • (1) VCC接5V电源
  • (2)trig(控制端)接单片机I/O口
  • (3)echo(接收端)接单片机I/O口
  • (4)GND接地线

电路原理图:

实物图:

3.3、LCD1602液晶显示模块电路设计

  • LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。

LCD1602主要技术参数如下

  • (1)显示容量为16×2个字符;
  • (2)芯片工作电压为4.5~5.5V;
  • (3)工作电流为2.0mA(5.0V);
  • (4)模块最佳工作电压为5.0V;
  • (5)字符尺寸为2.95×4.35(W×H)mm。

电路原理图:

实物图:

3.4、蜂鸣器报警电路设计

  • 有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
  • 本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012来驱动,只要单片机控制引脚为低电平,蜂鸣器就会鸣叫报警,反之则不鸣叫,可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。

电路原理图

实物图

4、程序设计

4.1、系统初始化

void SYSInit()
{
	TMOD|=0x01;		   //设T0为方式1,GATE=1;
	TH0=0;
	TL0=0;
	EA=1;			   //开启总中断	
		             
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear(); 

	sprintf(tab,"My Designer!    ");//更新显示
	DispStr(0,0,(unsigned char *)tab);//打印显
	sprintf(tab,"JuLi:%04dmm ",(unsigned int)JuLi);//更新显示
	DispStr(0,1,(unsigned char *)tab);//打印显
}

4.2、HC-SR04超声波测距程序

void GetJuli
{
		Trip=1;			   //启动一次模块		//不可以使用其他终端 容易造成死循环
		DelayUs2x(4);
		Trip=0;
		while(!Echo);		//当RX为零时等待
		TR0=1;			    //开启计数
		while(Echo);			//当RX为1计数并等待
		TR0=0;				
		JlCoun=(long)(TH0*256+TL0);
		TH0=0;
		TL0=0;
		JuLi=(float)(JlCoun*17)/100.0*1.08;     //算出来是mm
}

4.3、LCD1602显示数据程序

/***********************************************
函数名称:DispStr
功    能:让液晶从某个位置起连续显示一个字符串
参    数:x--位置的列坐标
          y--位置的行坐标
          ptr--指向字符串存放位置的指针
返回值  :无
***********************************************/
void DispStr(uchar x,uchar y,uchar *ptr) 
{
    uchar *temp;
    uchar i,n = 0;
    
    temp = ptr;
    while(*ptr++ != '\0')   n++;    //计算字符串有效字符的个数
    
    for (i=0;i<n;i++)
    {
        Disp1Char(x++,y,temp[i]);
        if (x == 0x10)
        {
            break;
        }
    }
}

4.4、毫秒延时程序

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点灯师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值