超声波测距离加语音报距毕业设计论文(编辑修改稿)内容摘要:

72H LCD 即将显示数据的起始纵坐标 00H 表 44 单片机地址单元分配表 13 ①软件系统总流程图(图 45): 45 ②设计思路说明 : 主程序框图如图所示,主程序首先对系统环境初始化, 设置定时器 T0 工作模式为16 位的定时计数器模式,置位总中断允许位 EA 并给显示端口 P0 和 P2 清 0。 然后调用超声波发射子程序送出超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直开始 系统初始化 对液晶写相应字 开启外部中断 定时器赋值 开启定时器,发送超声波 定时满否。 没 收到回波。 距离运算 LCD 显示 关闭定时器 关闭中断 否 是 没 语音报距 ? 1720 语音操作 14 接波触发,需延迟一段时间,保持电平 左右,也就是超声波频率大约为 40KHZ,连续发送 15 个波形(这也是超声波测距离会有一个最小可测距离的原因)后,才打开外中断 1 接收返回的超声波信号。 由于采用 12MHz 的晶振,机器周期为 1us,当主程序检测到接收成功的标志位后,将计数器 T0 中的数(即超声波来回所用的时间)按下式计算即可测得 被测物体与测距仪之间的距离,设计时取 20℃时的声速为 340m/s 则有: d=( C*T0) /2=170*T0/10000cm(其中 T0 为计数器 T0的计数值) 测出距离后结果将以十进制 BCD码方式送到 LCD 显示管显示,看是否要语音报距。 一个流程之后又反回继续发送超声波„„ 软件各功能模块的流程图设计及思路说明 ( 1) 距离运算模块 ①软件功能模块流程图设计(图 46): 图 46 距离运算流程图 ②设 计思路说明 : 在系统中,根据超声波的发送与返回。 得到的只有时间大小,在运算模块中的任务就是把时间的大小转换距离的大小。 刚开始从定时器取时间大小 T,该值可能是 8位或是 16位。 我们已知的是超声波的开始 定时器赋值 给 R0、 R1 调用双字节乘法 调用双字节除法 调用双字节BCD 码转换。 赋值给距离缓冲区 RET 15 传播距离 V=340m/s。 那么距离 S=VT,返回的时间 T 单位是 us,则有: S =( C*T0) /2=170*T0/10000cm(其中 T0 为计数器 T0的计数值) 但是,在 89S51 单片机中,高运算范围是 8 位,在此中,运算最大可能有 24 位的数值。 因此,需进行双字节运算。 首先,进行双字节的乘法, T*170(170 是超声 波发送加返回的速度 )得出结 果是距离,单位是。 其次。 进行双字节除法,要显示的单位是 cm。 双字节的乘法得出来的是 单位,需除以 1000 之后单位才是 cm。 再次,进行双字节 BCD 码转换。 时间经过双字节的乘法,进行双字节除法之后得出来的距离表示方法是 16 进制,需转成十进制,让人更直观。 ( 1)显示模块 ①软件功能模块流程图设计(图 47): 图 47 显示模块流程图设 开始 给定新的百位值 RET 给定坐标值 显示百位值 给定新的十位值 显示十位值 给定新的个位值 显示 个位值 16 ②设计思路说明: 因为显示是用 LCD 液晶,无需进行动态刷新。 所以当距离缓冲区的内容改变时, LCD屏幕上的数据更新一下。 其它的显示数据,无需改变,它是 48X84 的点阵。 如果需要在特定的位置上显示特定的数据时,只需准确给定它的横坐标和纵坐标的值,然后调用要显示的内容,内容就加载到 DDRAM 中 ,接着就进行显示。 以下是距离更新的子程序: DPLY_JL: MOV COL,32 ;给定纵坐标 MOV ROW,2 ;给定横坐标 MOV A,50H ;距离百位 CALL LCD_NUM ;调用写入数据子程序 MOV A,51H ;距离十位 CALL LCD_NUM MOV A,52H ;距离个位 CALL LCD_NUM RET LCD 串口总协议图(图 48): 图 48LCD串口总协议图 ( 3) 语音模块 ①软件功能模块流程图设计(图 49): 17 图 49 语音模块流程图 ②设计思路说明 : ISD1720 的 SPI 协议格式如下图(图 410): 开始 百位数字查表,得出相应地址,读出百位数字语音 读出百字语音 十位数字查表,得出相应地址,读出十位数字语音 读出十字语音 个位数字查表,得出相应地址,读出个位数字语音 RET 距离十位是否为零 ? 距离百位是否为零 ? 是 是 18 图 410 ISD1720 的 SPI 协议格式图 ISD1720 内部语音地址分配表(表 45): 起始地址 结束地址 存放内容(相应语音) 11H 13H 0 14H 16H 1 17H 18H 2 19H 1AH 3 1BH 1CH 4 1DH 1EH 5 1FH 20H 6 22H 23H 7 25H 26H 8 27H 28H 9 29H 2EH 厘米 2FH 30H 百 31H 32H 十 表 45 语音地址分配表 ISD1720 的通信是 SPI 方式,所先写个 SPI 通信功能程序(见子程序 SENDDATA)。 每次要写命令或读取状态直接调用,使用时方便。 19 /************************************************************************ * 函数原型 : SENDDATA。 * 功 能 : SPI 串口数据发送,发送数据,一次一个字节, * 待发送数据存在 R2,读取接收 ISD1720 芯片移出的一个字节 ,接收 * 存在 R2 ***********************************************************************/ SENDDATA: MOV R4,8 SETB SCLK CLR SS NOP NOP LOOP1: CLR SCLK CLR C CALL DELAY_30ns MOV A,R2 RRC A MOV A,R2 MOV MOSI,C JNB MOSO,LOOP2 MOV A,R2 ORL A,10000000B MOV R2,A LOOP2: SETB SCLK CALL DELAY_30ns DJNZ R4,LOOP1 CLR MOSI RET 每次计算出来的距离值存在对应缓冲区内,如果需要时需用语音读出来。 在语音芯片,它能定点播放(从特定的地址开始播放到特定的结束地址),所以需知道它各个语音的存放地址和结束地址。 在软件设计上,把各语音段的地址制作成一个表,每个语音有两个地址,一个起始地址,一个结束地址。 所以,把 表作成双字节表(见程序表 TAB)。 比如语音“ 0”它的起始地址为 11H,结束地址为 13H;语音“ 1”它的起始地址为 14H,结束地址为 17H。 TAB: DB 11H,13H,14H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH,20H,22H,23H,25H,26H,27H,28H,29H,2EH,2FH,30H,31H,32H 在设计上,能测到的距离是三位的数字,它把距离数据存在缓冲区内,包括各位 20 有出现零。 语音每次播报的内容来自距离缓冲区。 如果遇到有效数只有一位或 两位时,此时前面有两个或一个零。 在语音播报时,需让百位或十位的零自动去掉 ,读出有效的距离。 还有,如果是三位有效值或两位有效值,但中间或个位为零,在我们习惯中,中间为零时,通常不加“十”的语音。 另外,如果是三位有效值或两位有效值,个位为零时,在习惯中,就不读出零的语音。 ,在本软件设计上也实现这两点。 ( 4) 中断服务子程序 ①软件功能模块流程图设计(图 411): 图 411 中断服务子程序流程图 ②设 计思路说明 : 当进入中断时,必须马上关闭定时器。 避免定时器继续计时,让时间误差更大,导致结果误差加大。 接着取定时器定时的时间,该时间通过运算得到距离结果。 为了有余波的干扰再次进入中断,在外部中断服务子程序中关断外部中断子程序。 关闭定时器 开始 取定时时间 关闭外部中断 RETI 21 5 安装与调试 本系统需实现部分分硬件与软件部分,软件是根据硬件的方案而编写。 在硬件,先确定各个模块所采用的方案然后作出各个方案的电路原理图。 调试各各模块功能是否实现。 如果实现了,做出各个模块结合在一起的主控电路原理图和各模块的功能电路图 (本设计语音模块与总电路不同于一个电路板上)。 画完之后,做出 PCB 图时,安装两个超声波探头时应保持两个探头中心轴线平行相距 48CM。 其它元件无特殊要求。 检查 PCB 图与电路原理图是否一致。 检查无误之后做出电路板焊上各个元件。 焊完之后,对照图看是否有焊错,确认无误后通额定的电压(输入端输入 12V 左右)。 然后用万用表测 7809 和 7805,看它们的输出端是否分别为 9V、 5V。 如果是,电源电路正常。 保输入电压一段时间,检查各个元件是否正常(比如是否发热)。 各个模块安装完成之后,在输入端接上 12 左右的电压。 用示波 器观察单片机 119端是否有 12MHZ 波形。 如果有,单片机正常工作。 在 LM393 的第 3端接入 5V的电平,用示波器观察第 1 端是否有幅度 9V波形。 如果有,调节滑动变阻器 RT RT2,使 1端输出频率为 40KHZ,且高低电平时间相等。 频率调完成之后,用平滑坚硬的东西挡在两个超声波探头前,距离大约 10cm 左右。 此时,用万用表测 CX20206A 第 7端的电平,看是否为低。 如果是,接着第 3端接入低电平,看 1端是否没波形输出。 如果是,此时,用万用表测 CX20206A 第 7 端的电平,看是否为高。 如果以上皆是,则超声波发送与接收电路都可以。 在显示上,检查一下单片机 接到 NOKAI5510LCD 上的线是否正确。 如果正确,主控电路板电路正常。 当主控电路板正确后,检查语音模块。 先通过独立按键模式下是否有实现相应的功能。 如果有,用独立按键的方法录下各个需要的语音,数字语音“ 0、 9”和“百、十、厘米”语音。 录下之后,用按键试播放语音,看语音是否齐全与音质如何。 如果可以,该电路正常。 硬件安装调试完成。 硬件安装调试完成之后。 需进行软件编写调试。 用 KEIL 软件进行开发,根据各个功能模块的软件设计思 路写出相应的软件程序,生成 HEX 文件,用 progisp 软件工具烧写到单片机。 首先,先一个一个模块的烧写到单片机,过过不断修改,让每个模块的功能实现。 之后,把每个模块结合在一起,也通过修改,让整个整个系统的功能实现。 需说明的是,在语音模块上由于是独立按键下录音。 所以,各。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。