基于at89c51单片机的公交车语音报站系统的设计内容摘要:

用来输出数据与字符,这样就可以在液晶上显示出自己想要的字符 [10]。 键盘是若干按键的集合,是向系统提供操作人员干预命令及数据的接口设备。 键盘可分为编码键盘和非编码键盘两种类型。 前者能自动识别按下的键并产生相应代码,以并行或串行方式发送给 CPU。 它使用方便,接口简单,响应速度快,但需要专用的硬件电路。 后者则通过软件来确定按键并计算键值。 这种方法虽然没有编码键盘速度快,但它不需要专用的硬件支持。 键盘,作为向系统提供操作人员的干预命令的接口,以其特定的按键序列代表着各种确定的操作命令。 所以,准确无误地辨认每个键的动作及其所处的状态,是系统能否正常工作的关键。 因此在设计按键模块时,通过延时进行了按键去抖动的现象 [11]。 软件设计的主要功能是完 成公交车语音报站,采用 AT89C51 单片机作为主控芯片,对 ISD4004 数码语音芯片与 LCD1602 进行控制,实现语音报站 ,同时显示站名。 键盘采用通用按键开关,简单易行且控制方便。 在本次软件设计中,主要设计了 4 站,通过三个按键进行控制。 具体如下: k1 键――起始键 现象: ISD4004 播报“欢迎乘坐”,同时 LCD1602 上显示“ Huan Ying Cheng Zuo”。 k2 键――上一站, k3 键――下一站, 现象: num 1,ISD4004 播报“欢迎乘坐”,同时 LCD1602 上显示“ Huan Ying Cheng Zuo”。 num 2,ISD4004 播报“宁波理工到了,请从后门下车,下车请当心;车辆起步,请拉好扶手,前方停靠万里学院”,同时 LCD1602 上显示“ Ningboligong Dao Le”。 num 3,ISD4004 播报“万里学院到了,请从后门下车,下车请当心;车辆起步,请拉好扶手,前方停靠医药学校”,同时 LCD1602 上显示“ Wanglixueyuan Dao Le”。 num 4,ISD4004 播报“医药学校到了,请从后门下车,下车请当心;车辆起步,请拉好扶手,前方停靠鄞州二院”,同时 LCD1602 上显示“ Yiyaoxuexiao Dao Le”。 num 5,ISD4004 播报“鄞州二院到了,请从后门下车,下车请当心;”,同时LCD1602 上显示“ Yinzhoueryuan Dao Le”。 num 6,ISD4004 播报“谢谢乘坐本次公交车”,同时 LCD1602 上显示“ Xie Xie Cheng Zuo”。 在本次设计中我针对 363 公交车,从中取了“宁波理工,万里学院,医药学校,鄞州二院”这 4 站进行了单边线路的设计。 系统上电后,液晶显示模块 LCD1602 与语音模块 ISD4004 进行初始 化,当检测到有按键按下时,进行键值的判断,根据键值,跳转到相应的显示程序和语音播放程序并执行,从而实现公交车语音报站功能。 软件主流程图如图 41 所示。 图 软件主流程图 在本次软件程序设计中,我总共设置了 5 个按键,录音键( k1 ) ,放音键( k2 )停止键( k3 )录放音地址移位键( k4 )复位键( k5 )。 当按下 k1 键时,语音模块就从 0X05 开始录音,录好一段音后,按下 k3 键,停止录音。 按下 k2 键,开始播放之前所录的声音。 按下 k4 键,录音地址往后移100,此时再按 下 k1 键,开始第二段录音。 如此,便可实现多段录音,而且每段录音所存放的地址都通过计算得出。 若是不满意当前的录音,可以按下 k5 键,重新录音。 图 42 为录音流程图。 图 4 为放音流程图 图 录音程序流程图 图 放音程序流程图 系统上电后,液晶显示模块进行初始化。 同时液晶显示部分按照数组序号显示字符程序,程序中 table 为要显示的数组序号,按照数组的次序依次显示每站的站名。 图 44 为本次设计的液晶显示 1602 的程序流程图。 图 LCD1602 程序流程图 按键部分采用扫描法,当检测到按键按下时,进行 键值判断,并进行相应的显示程序以及语音播放程序的跳转,实现公交车语音报站功能。 图 4 是本次设计的按键程序流程图。 图 按键程序流程图 本次单片机软件仿真系统我选择了 P。 在整个系统软件设计中,依旧从语音,液晶显示以及按键这三大部分进行综合考虑。 由于 Proteus 软件的限制,无法对ISD4004 语音芯片进行仿真,从而在此处我选用了 LED 灯来代替语音芯片,当按键按下时,相对应的 LED 灯点亮。 在仿真时,由于语音模块不能进行仿真,为了增加点难度,在液晶显示模块方面我选择了可以显示汉字的模块。 下面主要介绍一下的 工作原理 [12]。 LCD1602 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。 其实用 LCD 显示一个字符时比较复杂,因为一个字符由 6 8 或 8 8 点阵组成,既要找到和显示屏幕上某几个位置对应的显示 RAM 区的 8 字节,还要使每字节的不同位为“ 1”,其它的为“ 0”,为“ 1”的点亮,为“ 0”的不亮。 这样一来就组成某个字符。 但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在 LCD上开始显示的行列号及每行的列数找出显示 RAM对 应的地址,设立光标,在此送上该字符对应的代码即可。 在本次设计中, LCD1602 液晶显示模块的rs,rw,e 分别与 51 单片机的 P3^5, P3^6, P3^7 端口连接,进行程序的读写数据,字符操作。 而 D0~D7 分别与 51 单片机的 P0 口进行连接,用来输出数据与字符,这样就可以在液晶上显示出自己想要的字符 [13]。 在此次仿真过程中,总共设计了 4 个按键, 1:欢迎乘坐, 2:上一站, 3:下一站 ,4:谢谢乘坐。 当按下 1 键时, LCD 上显示“”,同时 LED1 亮;如果当前的站是”,当按下 2 键时, LCD 上显示“”,此时 LED2 亮, LED3 灭;当按下 3 键时, LCD 上显示“”,此时 LED4 亮, LED3 灭。 当按下 4 时, LCD 上显示“”。 实现的效果图如下图 , ,,所示 按下 1 键 LCD 液晶显示“”,同时 LED1 亮。 图 “ Huan Ying Cheng Zuo” 按下 2 或者 3 键显示, 2 键逆向显示, 3 键顺向显示 Num 1 LCD 液晶显示“”,同时 LED2 亮。 图 “ Ningboligong Dao Le” Num 2 LCD 液晶显示“”, LED3 亮。 图 “Wanglixueyuan Dao Le ” Num 3 LCD 液晶显示“”,同时 LED4 亮。 图 “ Yiyaoxuexiao Dao Le” Num 4 LCD1602 液晶显示“”,同时 LED5 亮。 图 “ Yinzhoueryuan Dao Le” 按下 4 键 LCD 液晶显示“”,同时 LED5 亮。 图 “ Xie Xie Cheng Zuo” 在整一个硬件调试过程中,我主要分为三部分进行调试,第一部分是按键调试。 ,第二部分是 LCD 液晶显示调试,第三部分是 ISD4004 语音模块录放调试。 首先,我进行了按键调试。 对 于按键和 LED 调试,我所采用的工具是万用表,因为按键原理是松开状态,电路断开;按下按键,电路短路,以此来检测它们的好坏。 其次,第二部分就是 LCD1602 液晶显示的调试。 第一步,将 LCD1602 正确的连接到 51 单片机上,在连接时要注意液晶屏的这三个口的位置,一旦接错 LCD就有可能被烧坏。 我的 LCD 模块的这三个接口分别是 , , ,而数据输入口接在 P0 口上,因此只要将其连接上即可。 第二步,将已编译正确的 LCD液晶显示程序下载到 51 单片机,查看 LCD1602 上是否能够显示你想得到的内容。 这一部 分,因为看了很多相关的视频,所以基本没有遇到问题。 例如显示“ uan Ying Cheng Zuo”如图所示。 图 LCD1602 液晶显示调试模块示例 最后,进行 ISD4004 录放音的调试。 在这次设计中,如何正确的将 ISD4004与 51 连接成了我最大的问题。 经过咨询好多人后,才得以成功连接,并能播放示例音乐。 此外,将另外一段一录一放的程序下载到 51,检测 ISD4004 的录放音功能。 若程序烧录成功后,按下录音键,喇叭出现“滴滴滴滴”连续的响声,说明录音开始,可以进行录音。 录完后,按下放音键,检测是否能够 正确放音。 ISD4004 语音调试模块如图所示。 图 ISD4004 语音调试模块 与硬件调试类似,在本次软件调试中,主要分为三部分进行调试,按键与LCD1602 结合程序的调试, ISD4004 与按键结合程序的调试,以及 ISD400LCD1602 与按键的调试。 首先,按键与 LCD1602 的调试。 由于在使用 LCD1602 之前,翻阅了很多相关的资料以及视频,因此 LCD1602 液晶显示程序已经调试好,没有问题。 主要的问题是如何将按键加入到程序中,对 LCD1602 显示的内容进行控制。 一开始,我先让按键控制 LCD1602 显示内容中的其中一条。 在程序中设置了 void key ,通过调用 void write uchar 这个函数,显示出 LCD1602 的第一条内容“ Huan Ying Cheng Zuo”。 因此想要显示其他内容,原理也一样。 所示。 图 “ Huan Ying Cheng Zuo”示例图 其次,按键与 ISD4004 的调试。 由于之前查阅的很多资料中有一段一录一放的程序,了解他的原理后,发现与我需要的多段录放效果原理相同。 因此在 原有的基础上,我设置了一个 4, 4 所需要实现的功能是移位,每录好一次,按下 4移位 100,然后再按下录音键,这样就实现了多段录放音。 图 ISD4004 与按键的实物连接图 最后,按键、 LCD1602 与 ISD4004 三者的结合。 在这三者结合时,对于 ISD4004语音模块,我只需要一段放音程序,只要将之前存放在地址位置里面的录音片段通过放音程序放出来就好。 在这一测试中,按键要控制两项 LCD1602 的液晶显示以及 ISD4004 语音的播放,而且两个要同时。 这时候,通过设置 void write uchar 中 的值以及将语音播放 play 函数添加到 void key 中,通过 void key 中按键按下后多种条件的核对,从而确定按键按下后要显示的内容以及语音播放的内容。 以“” 一站为例,最终的结果如下图所示 图 “ Ningboligong Dao Le”总体示例图 据给出 ISD4004 的电路原理图,正确连接电路; 调试已编译的程序,将程序下载到 51 单片机中; 按下录音键进行录音,连续录完一段后,按下停止键停止。 然后按下移位键再次按下录音键开始录另外一段音,按停止键停止;如此反复 6 次,将需要的 录音片段录好并存放到单元位置录完音后,按放音键放音,按一次键就播放一段录音 将语音模块正确连接到 AT89C51 最小系统 最后,将,进行最后的调试,公交车语音报站系统完成。 表 51 是随机者 A1,A2, A3, A4, A5 按下 k1 键时的反馈情况。 此时 num 1,如果 LCD1602 上显示“ Huanyingchengzuo”,同时语音 ISD4004 中播放“欢迎乘坐 363 路公交车”,则说明正确,五名随机者回答“是”即可。 表 “ Huanyinchenzuo” 编号 按键( num 1) LCD 上显示“ Huanyingchengzuo” 语音播放同一站名 A1 1 是 是 A2 1 是 是 A3 1 是 是 A4 1 是 是 A5 1 是 是 表 52是 10名随机者对 num 2时的反馈情况,其中 A1― A5 是对 2 键的试用, A6― A10 对 3 键的试用。 如果此时 LCD1602 上显示“ Ningboligong Dao Le”,同时语音 ISD4004 中播放“宁波理工到了,请从后门下车,下车请当心。 车辆起步,请拉好扶手,前方停靠,万里学院”,则说明正确,十名随机者回答“是”即可。 表 “ Ningboligong Dao Le” 编号 按键( num 2) LCD 上显示“ Ningboligong Dao Le” 语音播放同一站名 A1 2 是 是 A2 2 是 是 A3 2 是 是 A4 2 是 是 A5 2 是 是 A6 3 是 是 A7 3 是 是 A8 3 是 是 A9 3 是 是 A10 3 是 是 表 53是 10名随机者对 num 3 时候的反馈情况,其中 A1― A5 是对 2 键的试用, A6― A10 对 3 键的试用。 如果此时 LCD1602 上显示“ Wanlixueyuan Dao Le”,同时语音 ISD4004中 播放“万里学院到了,请从后门下车,下车请当心。 车辆起步,请拉好扶手,前方停靠,医药学校”,则说明正确,十名随机者回答“是”即可。 表 “ Wanlixueyuan Dao Le” 编号 按键( num 3) LCD 上显示“ Wanlixueyuan Dao Le” 语音播放。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。