基于单片机超声波测距语音播放

一、系统方案
本设计采用52单片机作为主控器,HC-SR04测距,液晶1602显示,按键设置报警阀值,语音报警。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
uint dist; // 保存超声波模块测量到的结果

Trig_P=0;

LcdInit();												// 执行液晶初始化
TMOD = 0x01;											// 选择定时器0,并且确定是工作方式1(为了超声波模块测量距离计时用的)

LcdGotoXY(0,0);	    							// 定位到第0行第0列
LcdPrintStr("welcome to use ");	// 第0行显示“  temp=         ”
LcdGotoXY(1,0);	    							// 定位到第1行第0列
LcdPrintStr("  dist=   cm    ");	// 第1行显示“  dist=   cm    ”

2、液晶显示程序
//
// 1602液晶写命令函数,cmd就是要写入的命令
/
/
void LcdWriteCmd(uchar cmd)
{
LcdRs_P = 0;
LcdRW_P = 0;
LcdEn_P = 0;
P0=cmd;
DelayMs(2);
LcdEn_P = 1;
DelayMs(2);
LcdEn_P = 0;
}

//
// 1602液晶写数据函数,dat就是要写入的数据
/
/
void LcdWriteData(uchar dat)
{
LcdRs_P = 1;
LcdRW_P = 0;
LcdEn_P = 0;
P0=dat;
DelayMs(2);
LcdEn_P = 1;
DelayMs(2);
LcdEn_P = 0;
}

3、按键程序
//
// 按键扫描
/
/
void KeyScanf()
{
uchar i;

if(KeySet_P==0)								// 判断是否有按键按下
{
	LcdGotoXY(1,0);							// 液晶第二行刷新显示
	LcdPrintStr("  alarm=   cm   ");
	LcdGotoXY(1,8);							// 显示当前的报警值
	LcdPrintNum(gAlarm);				
	
	DelayMs(10);								// 消除按键按下的抖动
	while(!KeySet_P);						// 等待按键释放
	DelayMs(10);								// 消除按键松开的抖动

	i=1;

	while(i)
	{							  
		if(KeyDown_P==0)		// 报警值减的处理
		{
			if(gAlarm>2)
				gAlarm--;
			LcdGotoXY(1,8);
			LcdPrintNum(gAlarm);	
			DelayMs(300);
		}

		if(KeyUp_P==0)			// 报警值加的处理
		{
			if(gAlarm<600)
				gAlarm++;
			LcdGotoXY(1,8);
			LcdPrintNum(gAlarm);
			DelayMs(300);
		}
		
		if(KeySet_P==0)			// 再次按下设置键的判断
		{
			LcdGotoXY(1,0);						// 液晶恢复测量时的内容显示
			LcdPrintStr("  dist=   cm    ");
			DelayMs(10);		  				// 消除按键按下的抖动
			while(!KeySet_P);					// 等待按键释放
			DelayMs(10);		  				// 消除按键松开的抖动
			i=0;
		}			   
	}		
}	

}

4、核心算法程序
//
// 主函数
/
/
void main()
{

uint dist;												// 保存超声波模块测量到的结果


Trig_P=0;

LcdInit();												// 执行液晶初始化
TMOD = 0x01;											// 选择定时器0,并且确定是工作方式1(为了超声波模块测量距离计时用的)

LcdGotoXY(0,0);	    							// 定位到第0行第0列
LcdPrintStr("welcome to use ");	// 第0行显示“  temp=         ”
LcdGotoXY(1,0);	    							// 定位到第1行第0列
LcdPrintStr("  dist=   cm    ");	// 第1行显示“  dist=   cm    ”

	 

while(1)
{
	

	KeyScanf();
	gSpeed=0.607*(28)+331.4;		// 根据公式 v=0.607T+331.4 计算出当前温度值对应的超声波速度,这时的单位是“米/秒” 
	gSpeed=gSpeed/10000;						// 将超声波的速度从单位“m/s”转为“cm/us”,方便后面的计算
	
	dist=GetDistance();							// 通过超声波模块获取距离
	LcdGotoXY(1,7);	    						// 光标定位
	LcdPrintNum(dist);							// 将获取到的距离在液晶上面显示

	AlarmJudge(dist);								// 判断一下是否需要报警,是的话则报警	

		
		
	}

}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bbxyliyang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值