当前位置: 首页 > news >正文

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

一、系统方案
超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,性价比很高。因此在液位、井深、管道长度的测量、移动机器人定位和避障等领域得到了广泛的应用。
单片机语音系统是以数字电路为基础,利用数字语音电路来实现语音信号的记录、存储、还原等任务。数字语音电路是一种集语音合成技术、大规模集成电路技术以及微控制器为一体的并在近十几年迅速发展起来的一种新型技术。语音集成电路与微处理器相结合,具有体积小、扩展方便等特点,具有广泛的发展前景,如电脑语音钟、语音型数字万用表、手机话费查询系统、排队机、监控系统语音报警以及公共汽车报站器等。
随着经济和科学技术的发展,汽车这项代步工具也走近越来越多的家庭,与此同时交通拥挤的状况也越来越严重。伴随着汽车带来方便的同时,各种事故也层出不穷,其中追尾、倒车碰撞则占据了很大一部分比例。而在汽车上安装一个带语音报警的测距防撞系统则能很好的帮助解决这一问题。泊车时,系统检测汽车与障碍物的距离并且利用LCD显示,当距离小于某设定值时,实时播放距离大小来提醒驾驶人员。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述
三、单片机软件设计
1、首先是系统初始化
//
// 1602液晶初始化函数
/
/
void LcdInit()
{
LcdWriteCmd(0x38); // 162显示,57点阵,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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

http://www.lryc.cn/news/148524.html

相关文章:

  • 算法系列-力扣876-求链表的中间节点
  • SpringBoot集成Redis、Redisson保姆教程【附源码】
  • c++多线程中常用的使用方法
  • 【dart】dart基础学习使用(一):变量、操作符、注释和库操作
  • element-plus 设置 el-date-picker 弹出框位置
  • C++day7(auto关键字、lambda表达式、C++中的数据类型转换、C++标准模板库(STL)、list、文件操作)
  • 纽扣电池/锂电池UN38.3安全检测报告
  • K8S:K8S自动化运维容器Docker集群
  • Java的guava 限流写法
  • [uniapp] scroll-view 简单实现 u-tabbar效果
  • vue常见问题汇总
  • GPT-3在化学中进行低数据发现是否足够?
  • gitlab升级
  • Matlab图像处理-灰度插值法
  • axios 或 fetch 如何实现对发出的请求的终止?
  • ChatGPT Prompting开发实战(四)
  • Windows和Linux环境中安装Zookeeper具体操作
  • 41、Flink之Hive 方言介绍及详细示例
  • docker环境安装软件、更换镜像源以及E: Unable to locate package xxx解决
  • 夸克扫描王App用上了AI大模型 让扫描更清楚、提取文字更方便
  • 代价高昂的 IT 错误:识别并避免供应商锁定
  • HBase集群环境搭建与测试
  • 【iOS】Masonry的基本使用
  • 浅析SAS协议:链路层
  • ES6之浅尝辄止1:class的用法
  • django-发送邮件
  • IP私域系统搭建课,视频号打通你的个人ip私域
  • 咸虾米之一些快捷方式的操作,一行方块的左右滑动,方块在一区域内的任意移动
  • Linux 高级指令
  • 江苏移动基于OceanBase稳步创新推进核心数据库分布式升级