基于51单片机的公交车语音报站器的设计与制作内容摘要:
程序、一线发码子程序。 主程序直接调用这些子程序,结构 清晰明了,又方便调试和修改程序。 设置是否有键按下的标志 F0, F0为 1,有键按下; F0 为 0,则无键按下。 软件编程具体的流程图如图31所示。 开 始初 始 化启 动 上 行 线发 送 语 音 或命 令 码显 示 站 台按 键 扫 描F 0 = 1 ?。 上 行 线 按 键处 理运 行 到 上 行 线 终 点 站吗。 显 示 站 台一 线 发 码 子程 序启 动 下 行 线发 送 语 音 或命 令 码显 示 站 台按 键 扫 描F 0 = 1 ?下 行 线 按 键处 理运 行 到 下 行 线 终 点 站吗。 一 线 发 码 子程 序显 示 站 台YNYNYNYN 图 31 主程序流程图 10 显示子程序设计 把要显示的站数存放在单片机的 60H地址中,通过按键改变这个地址中的数值。 由于本系统单向公交线上一共有 40 个站,所以在这个地址内的数值不能超过 40,通过动态显示将公交车到达站数显示出来。 显示子程序设计的设计流程图如图 32所示。 开 始要 显 示 的 值 大于 4 0。 拆 分 个 位 与 十位将 各 位 和 十位 分 别 送 显示结 束YN 图 32 显示子程序流程图 键盘 扫描 子程序设计 在本系统中,设置了八个按键,其中与 STC89C5 1RC 单片机 ~ 为相连的按键是服务语触发按键;与 相连的按键为起步 /到站按键,按一次,播放起步语音,再按一次,播放到站语音,通过这个按键,也来控制要显示的值;与 相连的按键为停止语音播放按键;与 相连的按键为公交车播报越站时,后退播报的按键。 键盘子程序的设计流程图如图 33所示。 开 始将 是 否 有 键 按下 的 标 志 F 0 清零将 F 0 置 1有 键 按 下 吗。 结 束YN键 释 放 了吗。 YN 图 33 键盘扫描子程序流程图 11 上行线按键处理子程序 设计 要使语音模块地址中的语音触发,就要通过单片机 引脚发送这个地址。 将要触发语音模块的地址数据存放在单片机的 77H中。 55H 存放语音模块中起步 /到站语的地址数据, 54H 存放语音模块中服务语的地址或者停止命令数据,最后只需将 55H或者 54H中的数据发送给 77H 即可。 在按键处理子程序中,因为是有键按下的时间才调用这个按键处理程序的,所以如果当 P2口的 8 个按键中有 7 个按键没有按下的话,那么剩下的那个按键肯定被按下了。 上 行线按键处理子程序的设计流程图如图 34所示。 开 始是 服 务 语 按 键按 下 吗。 是 停 止 按 键按 下 吗。 是 起 步 / 到 站键 按 下。 退 后 播 报 键 一定 按 下设 置 5 4 H 为 相应 的 语 音 地 址设 置 5 4 H 为 相应 的 停 止 命 令5 5 H 内 容 加 15 5 H = 7 9。 6 0 H 内 容 加 15 5 H 是 偶 数吗。 结 束5 5 H = 0。 5 5 H 内 容 减 15 5 H 是 偶 数吗。 6 0 H 内 容 减 15 4 H 内 容 给 7 7 H5 5 H 内 容 给 7 7 H5 5 H = 7 9 , 6 0 H = 1YNYNYYNYNNYYN 图 34 上行线按键处理子程序的设计流程图 12 下 行线按键处理子程序 设计 如果 P2口的 8个按键中有 7个按键没有按下的话,那么剩下的那个按键肯定被按下了,因为下行线按键处理是在有键按下的情况下才执行的。 下行线按键处理子程序的设计流程图如图 35所示。 开 始是 服 务 语 按 键按 下 吗。 是 停 止 按 键 按下 吗。 是 起 步 / 到 站键 按 下。 退 后 播 报 键 一定 按 下设 置 5 4 H 为 相应 的 语 音 地 址设 置 5 4 H 为 相应 的 停 止 命 令5 5 H 内 容 加 15 5 H = 1 5 8。 6 0 H 内 容 加 15 5 H 是 偶 数吗。 结 束5 5 H = 7 9。 5 5 H 内 容 减 15 5 H 是 偶 数吗。 6 0 H 内 容 减 15 4 H 内 容 给 7 7 H5 5 H 内 容 给 7 7 H5 5 H = 0 , 6 0 H = 1YNYNYYNNYNYNY 图 35 下 行线按键处理子程序的设计流程图 一线发码 子程序设计 在本系统 中采用 WT588B28P 语音模块,并采用其一线控制模式。 在这种模式下,要触发语音模块中的地址,或者触发语音模块中的命令码,就是通过单片机 向语音模块 P03 口发送地址或命令码的数据实现的。 但是要根据 WT588B28P 语音模块的数 13 据通信线控制时序图来实现,依照单片机 脚电平占空比不同来代表不同的数据位。 要发送的数据存放在单片机 77H中。 根据语音模块在受一线控制下的控制时序图,在发送数据时,应先将数据信号线单片机 脚拉低 5ms,再发送数据,发送的数据位是从低位开始发送的,也就是说,通过单片 机 脚要发送的数据,是由低位开始发送的,一位一位发送。 如果要发送的数据位为 0,则要使数据信号线(即单片机 脚)上高电平与低电平数据占空比为 1:3,如果要发送的数据位为 1,则要使数据信号线(即单片机 脚)高电平与低电平数据占空比为 3: 1。 发送的数据 00H~ DBH 为地址指令,触发在语音模块中这些地址内的语音; E0H~ E7H为音量调节命令, F2H 为循环命令, FEH 为停止命令。 在本系统中,用到的命令就只有停止命令。 一线发码子程序流程图如图 36所示。 开 始P 1 . 0 口 清 零5 m sP 1 . 0 口 置 1发 送 的 数 据 位 是低 电 平 吗。 延 时 6 0 0 U SP 1 . 0 口 清 零2 0 0 U S延 时 2 0 0 U SP 1 . 0 口 置 一2 0 0 U S8 位 数 据 发 送完 了 吗。 结 束YNYNY 图 36 一线发码子程序流程图 14 4 软件抗干扰技术 在单片机控制系统中,正确的采用软件抗干扰技术,与硬件干扰措施构成双层抗干扰防线,肯定能大大提高控制系统的可靠性。 经常采用的软件抗干扰技术是数字滤波技术、开关量的软件抗干扰技术、指令冗余技术、软件陷阱技术等。 分析干扰的来源,再根据系统设计有效的抗干扰方法。 因此,本系统软件中用到了开关量的软件抗干扰技术。 开关信号存在抖动干扰的问题,在单片机设计中常用软件的方法消除抖动。 在本系统设计中,由于键盘是由机械触点构成的,所以在机械触点断开、闭合 时,会有抖动,这种抖动对人来说是感觉不到的,但对单片机来说,是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,这对单片机而言,时间算是很长了。 所以要判断一个按键是否真正按下就需要把这些干扰去掉。 按键与单片机的 I/O口相连,当检测到 I/O 口为低的信号时,不是立即认为按键按下,而是延时 20ms 的时间后再检测 I/O 口的信号,如果仍为低电平,那就可以认定按键真的按下了,这实际上就是消除了按键按下时的抖动,对按键是否释放就可以采取查询的方法,直到检测到位高电平为止就说明按键释放了。 一般 情况下,不用对按键释放的后沿进行处理,也能满足要求。 5 调试 在完成硬件的基础上,我开始根据要实现的功能来设计软件流程图,软件程序编好后,我用 KEIL C51 软件编译 ,选择 Intel8052,编译 好后,再用 Protues 软件进行仿真。 在仿真的过程中,在原理图设计时用了两个一位的共阴数码管,且在公共端接了8050 三极管后再接到单片机的 I/O 口的,但在 Protues 仿真软件中就直接选用两位一体的共阴数码管,然后将位线直接接到单片机的 I/O 口。 由于本系统用到的 WT588D28P模块在 Protues 软件中是 没有的,但是我是用一线控制方式的,发送数据给语音模块是通过单片机的 口来发送的,而且是从低位开始发送的,所以我就可以用示波器观看单片机的 口的波形,波形就能体现单片机发送的数据,且低位在前,高位在后。 当我按键按下的时候出现波形,根据这个波形看是否是我要发送的数据。 在 Protues 仿真软件中画好图后,我将通过 KEIL C51 软件编译好的十六进制文件装到 Protues 仿真软件中的单片机中,实现了系统上电后就执行上行线,当上行线运行到终点自动切换到下行线,下行线运行到终点也自动切换到上行线。 触发的每 个语音地址数据或者停止命令,也通过波形显示出来了。 显示刚开始就是动态显示不稳定,出现抖动的状态,我在改短了显示延时的时间后,显示稳定。 由于我是根据起步 /到站按键 15 K7来控制的 55H 单元来判断显示是否要加一的,而且 K7 按一次播放起步语音,再次按动播放到站语音,所以我要在播放到站语音的时候显示加一,也就是 K7 按第二次的时候显示才加一,当显示到达 40 后,下一次就又从 1 开始显示,实现了这个功能。 按下服务语按键,也能触发对应的语音地址。 按下退后播报键,能退后播报,并显示正确的站数。 所以,本系统的设计要求在 Protues 仿真软件中都实现了。 但是在 Protues 仿真中,数码管公共极没有接起开关作用的三极管,所以我将显示程序中送显示时位线的电平反了一下。 在实物调试中,直流稳压电源采用 +5V,数字万用表主要用来测分立元件的电阻、压降等参数。 然后我将程序下载到单片机中,在实物中开始调试,发现语音这一块已经可以实现了,但是在实物中发现数码管不能点亮,但是语音模块能正常工作。 经过分析,我猜想可能是上拉电阻阻值太大了,驱动不了数码管显示,因为在原理图设计时我并没有计算多大的上拉电阻阻值能使数码管发光,通过计算,发现上拉电阻太大,而且又在经过 10K的上拉电阻 后在数码管每一段上加了 300Ω的限流电阻,通过数码管每一段的电流只有 ,完全不能驱动数码管发光。 于是我将将上拉电阻换成 510Ω,然后又把限流电阻拆掉并在板子上将接限流电阻的地方短接,这样,通过数码管每一段的电流就达到了 10mA,完全能驱动数码管发光。 可是换了之后,却又发现数码管还是不能点亮。 于是我就用万用表测试了三极管集电极与发射极之间的电压,发现三极管根本不能饱和导通,通过分析,我认为是在单片机 I/O 口与基极之间 1K的电阻在起到对单片机 I/O口的保护作用后不能达到三极管饱和导通的条件,所以我就在基 极焊了个上拉电阻,然后再通电调试,数码管能正常显示了。 但是原本在设计原理图的时候,是想让公交车在行驶时能通过按上 /下行切换键来达到上 /下行的切换,但是在软件编程的时候,不能实现这个按键的功能,于是我就在软件设计时没用到这个按键,而是设置撑上电公交车默认为上行线,当上行线或者下行线运行到终点时能自动切换到下行线或者上行线。 所以我就将板子上原先设定的那个上 /下行切换键拆下来了。 经过调试后,实物系统能实现设计要求,而且结果稳定可靠。基于51单片机的公交车语音报站器的设计与制作
相关推荐
设计要求 ( 1) 设计一出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分。 设起步价为 元,起步里程为 2 公里,当行程超过 2 公里,每公里按 元计费。 等待时间超过 2 分钟,按照 元每分钟计费。 ( 2) 用液晶 1602 显示总金额、行车时间、等待时间。 总费用显示范围为 — 元,精确到 元,行车里程显示范围为 0— 99km,精确到 1km,等待时间显示范围为 0—
单实用, 在使用上及其功能的实现上都 又许多的优点。 更重要的是液晶显示器是当今电子设计的主流,通过这次设计,我能够学习到许多东西。 音乐 播放 器电路原理图见 附录 一 所示。 第三章 硬件设计 7 第三章 硬件设计 电路组成和工作原理 电路组成 设计的电路有以上设计方案就可以知道,电路原理图见附录 一所示 ,主要包括 AT89S52单片机控制系统、复位电路、晶振电路、独立式键盘电路
sp、 g、 f、 e、 d、 c、 b、 a) 输入 输出 输入 输出 3FH 0 7FH 8 06H 1 6FH 9 5BH 2 77H A 4FH 3 7CH B 66H 4 39H C 10 6DH 5 5EH D 7DH 6 79H E 07H 7 71H F 动态显示驱动: 数码管动态显示介面是单片机中应用最为广泛的一 种显示方式之一,动态驱动是将所有数码管的 8 个显示笔划 a,b
加交流电压。 在黑暗环境里,它的电阻值很高,当受到光照时,只要光子能量大于半导体材料的禁带宽度,则价带中的电子吸收一个光子的能量后可跃迁到导带,并在价带中产生一个带正电荷的空穴,这种由光照产生的电子 — 空穴对增加了半导体材料中载流子的数目,使其电阻率变小,从而造成光敏电阻的阻值下降。 光照愈强,阻值愈低。 入射光消失后,由光子激发产生的电子 — 空穴对将逐渐复合,光敏电阻的阻值也就逐渐恢复原值
问题远不止这些,但是,无论怎样的挫折,无论怎样的想要放弃,最后都坚持了下来。 有困难就查资料,有困难就请教同学,有困难就解决困难 !本着这样的信念和心态,我们解决了一个个的困难, 虽说结果不能达到预期结果,但从中我们也学到了很多知识,从原来一点都不知道的 HX1838(红外接收) ,L298N( 驱动 ), DS18B20(测温度) 到最后的的每一个 元 件都 有所了解
11 由以上流程图,可以得出水位控制程序清单如下: ORG 0000H AJMP MAIN ORG 0030H SJMP LOOP ORG 0050H MAIN: SETB CLR CLR ACALL DELAY SETB SETB WAIT: JB ,DONE1。 检测转换是否完成 SJMP WAIT。 等待转换完成 DONE1 : CLR CLR MOV A,P0 CLR C SUBB A