基于单片机的超声波语音测距系统

一、系统方案

超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,性价比很高。因此在液位、井深、管道长度的测量、移动机器人定位和避障等领域得到了广泛的应用。

单片机语音系统是以数字电路为基础,利用数字语音电路来实现语音信号的记录、存储、还原等任务。数字语音电路是一种集语音合成技术、大规模集成电路技术以及微控制器为一体的并在近十几年迅速发展起来的一种新型技术。语音集成电路与微处理器相结合,具有体积小、扩展方便等特点,具有广泛的发展前景,如电脑语音钟、语音型数字万用表、手机话费查询系统、排队机、监控系统语音报警以及公共汽车报站器等。

随着经济和科学技术的发展,汽车这项代步工具也走近越来越多的家庭,与此同时交通拥挤的状况也越来越严重。伴随着汽车带来方便的同时,各种事故也层出不穷,其中追尾、倒车碰撞则占据了很大一部分比例。而在汽车上安装一个带语音报警的测距防撞系统则能很好的帮助解决这一问题。泊车时,系统检测汽车与障碍物的距离并且利用LCD显示,当距离小于某设定值时,实时播放距离大小来提醒驾驶人员。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

//
// 1602液晶初始化函数
/
/

void LcdInit()

{

LcdWriteCmd(0x38); // 162显示,5 7点阵,8位数据口

LcdWriteCmd(0x0C); // 开显示,不显示光标

LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移

LcdWriteCmd(0x01); // 清屏

}

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 num1,num2;

复制代码
if(KeySet_P==0)							// 判断是否有按键按下
{
	LcdGotoXY(1,0);						// 液晶第二行刷新显示
	LcdPrintStr("  alarm=     m  ");
	LcdGotoXY(1,8);						// 显示当前的报警值
	LcdPrintNum(gAlarm);

	DelayMs(10);		  				// 消除按键按下的抖动
	while(!KeySet_P);					// 等待按键释放
	DelayMs(10);			 				// 消除按键松开的抖动

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

		if(KeyUp_P==0)					// 报警值加的处理
		{
			if(gAlarm<400)
				gAlarm++;
			LcdGotoXY(1,8);
			LcdPrintNum(gAlarm);
			DelayMs(300);
		}
		
		if(KeySet_P==0)					// 再次按下设置键的判断
		{
			break;
		}			   
	}

	LcdGotoXY(1,0);						// 液晶恢复测量时的内容显示
	LcdPrintStr("    S=     m    ");
	
	DelayMs(10);		  				// 消除按键按下的抖动
	while(!KeySet_P);					// 等待按键释放
	DelayMs(10);		  				// 消除按键松开的抖动
	
	num1=gAlarm/100;					// 将新的报警值存入到EEPROM里面去
	num2=gAlarm%100;
	Sector_Erase(0x2000);
	EEPROM_Write(0x2000,num1);
	EEPROM_Write(0x2001,num2);
}	

}

4、核心算法程序

//
// 播放一段语音
/
/

void PlaySound(uchar addr)

{

uchar i;

SDA=0;

DelayMs(5);

复制代码
for(i=0;i<8;i++)
{
	SDA=1;
	if(addr&1)
	{
		DelayMs(3);
		SDA=0;
		DelayMs(1);
	}
	else
	{
		DelayMs(1);
		SDA=0;
		DelayMs(3);
	}
	addr>>=1;
}
SDA=1;
while(!BUSY);				// 等待播放完毕

}

四、 proteus仿真设计

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

相关推荐
蓬荜生灰30 分钟前
永磁无刷电机旋转原理
单片机·嵌入式硬件
Ronin-Lotus5 小时前
嵌入式硬件与应用篇---寄存器GPIO控制
stm32·单片机·嵌入式硬件·微处理器原理与应用
星辰pid13 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
威桑14 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
星源~14 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
SKYDROID云卓小助手16 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
所念皆星海91116 小时前
图灵完备之路(数电学习三分钟)----数据选择器与总线
嵌入式硬件·通信·数电
智者知已应修善业17 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
开-悟18 小时前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug
许白掰20 小时前
【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
stm32·单片机·嵌入式硬件·学习·实时音视频