为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于51单片机的公交车语音报站器的设计与制作

2017-09-20 37页 doc 285KB 113阅读

用户头像

is_511210

暂无简介

举报
基于51单片机的公交车语音报站器的设计与制作基于51单片机的公交车语音报站器的设计与制作 基于51单片机的公交车语音报站器 的设计与制作 目 录 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 英文摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 引言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 1 设计要求„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2 硬件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.1 硬件原理及框图„„„„„„„„„...
基于51单片机的公交车语音报站器的设计与制作
基于51单片机的公交车语音报站器的设计与制作 基于51单片机的公交车语音报站器 的设计与制作 目 录 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 英文摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 引言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 1 设计要求„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2 硬件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.1 硬件原理及框图„„„„„„„„„„„„„„„„„„„„„„„„„3 2.2 系统供电电源模块设计„„„„„„„„„„„„„„„„„„„„„„3 2.3 单片机在线编程模块设计„„„„„„„„„„„„„„„„„„„„„4 2.4 单片机最小系统设计„„„„„„„„„„„„„„„„„„„„„„„5 2.5 语音模块的设计„„„„„„„„„„„„„„„„„„„„„„„„6 2.6 显示电路的设计„„„„„„„„„„„„„„„„„„„„„„„„7 3 软件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8 3.1 主程序设计„„„„„„„„„„„„„„„„„„„„„„„„„„„9 3.2 显示子程序设计„„„„„„„„„„„„„„„„„„„„„„„„„10 3.3 键盘扫描子程序设计„„„„„„„„„„„„„„„„„„„„„„„10 3.4 上行线按键处理子程序设计„„„„„„„„„„„„„„„„„„„„11 3.5 下行线按键处理子程序设计„„„„„„„„„„„„„„„„„„„„12 3.6 一线发码子程序设计„„„„„„„„„„„„„„„„„„„„„„„12 4 软件抗干扰技术„„„„„„„„„„„„„„„„„„„„„„„„„„„14 5 调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„14 结论与谢辞„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„16 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„17 附件1(系统原理图和PCB图„„„„„„„„„„„„„„„„„„„„„„„18 附件2(程序清单„„„„„„„„„„„„„„„„„„„„„„„„„„„„„19 附件3(仿真图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„26 附件4(实物图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„30 附件5(元器件清单„„„„„„„„„„„„„„„„„„„„„„„„„„„„31 基于51单片机的公交车语音报站器的设计与制 作 摘要:从公交车语音报站器的设计要求出发,本系统采用STC89C51单片机作为核心控制 器,主要由单片机在线编程模块、WT588D语音模块、LED显示器、键盘等组成。通过语 音模块的编程软件设置其每个地址的语音,再通过手动键盘触发语音播放地址,驱动语 音播放。设置站台号,到站站台号通过LED显示器显示出来。上电后,默认为上行线, 运行到线路终点自动切换到下行线,下行线运行到终点也会自动切换到上行线。 关键词: 单片机 公交车 报站器 语音 Based on the 51 mcu bus sound station device design and production (Major of Applied Electronic Technology,Information and Engineering college, JinHua College of Vocation And Technology, YU Wen-jun) Abstract: From the bus Voice station design device requirement, the system uses STC89C51 MCU as the core controller, plus a single chip online programming module, WT588D voice module, LED display, keyboard.Through the voice module programming software to set the voice of each address and then manually trigger the keyboard voice broadcast address, driver audio playback. Set the platform number, departure and arrival station number displayed via LED display. Power, the default is ascending line, run to the finish line to automatically switch to the down line, run down to the finish line will automatically switch to the uplink. Keyword: Single-chip Bus Stops device Voice 引言 - 1 - 随着社会的快速发展,目前,在一些大城市里,公交车上已经开始逐渐使用GPS报站系统,但是手动的公交车语音报站器仍然占有一定的市场份额,原因在于手动语音报站器价格低廉,同时也具备GPS报站器的报站功能。尤其是在中小型城市,公交车上应用手动语音报站器是最实惠也是最实际的。但是随着公交线路不断地调整,而现有的手动语音报站器不能满足公交路线的要求,如不能方便地更改报站器的语音内容、不能存放多个站名等。所以,一款不仅能在公交车上实现语音报站,更重要的是能根据配合配套的电脑使用软件,随意更换报站器语音内容,并能满足公交车的路线要求的新型手动公交车语音报站器显得越来越重要,也有了它自身存在的价值和意义。 本课设计的语音报站系统在上电时默认为上行线行驶,上行线行驶到终点能自动切换到下行线,下行线运行到终点能自动切换到上行线。能实现公交车进站、出站时语音报站提示功能、播报公交车上的5条服务标语、实现播报越站时的退后播报、停止当前语音播报、两位数码管显示站数、根据配合配套的电脑软件,随意更换报站器语音内容,一条路线上/下行总共可加载40个不同的站名,满足公交车的路线要求。这套语音报站器系统以STC89C51 RC单片机为核心,一线控制WT588D-28P语音模块,并增添其他外围设备,单片机在线编程模块、WT588D语音模块、LED显示器、键盘、喇叭等。这虽然是一个简单的演示模型,但结构简单,使用灵活,功能稳定,音质自然、清晰,为满足公交车路线要求,公交车装备现代化,提高服务档次起到核心的作用。为此进行设计,以期能够为后续研究提供参考。 1 设计要求 - 2 - 设计一款基于51单片机的公交车语音报站器,报站器能实现公交车进站、出站时语音报站提示功能;并能播报公交车上的5条服务标语;具有在播报越站时退后播报;停止当前语音播报的功能;两位数码管显示站数。配合配套电脑使用软件,随意更换报站器语音内容,一条路线上/下行总共可加载40个站名,能满足公交车的路线要求。 2 硬件设计 2.1 硬件原理及框图 用单片机STC89C51 RC一线串口控制WT588D-28P语音模块的P03口来实现语音报站的功能。电源部分选取+5V直流稳压电源,给系统上电后,通过单片机在线编程模块将程序代码下载到单片机中;再通过按键发送需要的命令或语音码和控制两个共阴数码管显示当前的公交车行驶站数;音频输出部分采用PWM输出方式,直接驱动0.5W/8Ω的扬声器。单片机发送命令或语音码成功后,可以通过BUSY输出部分(发光二极管是否点亮)来判断语音是否处于播放忙的状态。要设计的公交车语音报站器硬件框图如图2-1所示。 电源 数码管显示 按键 BUSY输出STC89C51 RC单片机在线 编程模块WT588D-28P模块(内有32M的SPI- FLASH) 单片机最PWM输出(喇叭)小系统 图2-1 语音报站系统硬件框图 单片机最小系统包括电源电路、时钟电路、复位电路三部分,缺一不可。 2.2 系统供电电源模块 本系统电源选用+5V直流稳压电源,接入电源后,用开关控制其输入与断开,并用发光二极管指示,由于电源输入可能会对电路产生干扰,所以用电容来滤波,起到抗干扰的作用。系统中每个模块都配置一个抗干扰的电容,在PCB板的布置中,要将其布置在每个模块的电源输入附近。 本系统供电电源模块电路如图2-2所示:其中J4为直流电压+5V的插座,J5为开关,C9、C10、C11起到滤波抗干扰的作用。 - 3 - J5VCC1122C1133104 D3J4 12POWER3 5VC9C10C8104104470UFR31K 图2-2 系统供电电源模块电路 2.3 单片机在线编程模块 本系统采用的STC89C51 RC单片机,具有在系统可编程(ISP)特性,单片机可以在工作的系统上下载/烧录程序,而不用将单片机从工作的系统上拆下来再用通用编程器将程序代码烧录进单片机内部。 STC89C51 RC单片机内部固化有ISP系统引导程序,并设置为将单片机内部彻底断电(即冷启动)才运行ISP程序,这时,配合STC-ISP.exe软件就可将程序代码下载到单片机内。也就是说,在下载时,要先选择下载按钮,然后再给单片机上电复位(即彻底断电),而不能先上电,这样会导致下载程序代码失败。 STC89C51 RC内部有EEPROM(电可擦写可编程存储器),可以清除存储数据和再编程,所以可以多次下载程序代码进行调试。 因此本系统可以做一个在线编程电路,串口选用9针的RS232串口(公头),且2脚设置为接收管脚、3脚为发送管脚;STC、RS232转换器选用MAX232芯片,MAX232芯片是单片机和其他设备的一种通讯设施,也是专为RS232串口设计的接口芯片。因为电脑上RS232(公头)也是2号管脚为接收,3号管脚为发送,跟我制作的系统电路板上的RS232(公头)定义一样,所以在硬件连接方面的连接线要制作成两头均为RS232(母头)的连接线,且连接线内部做2号管脚与3号管脚的连接,再将5号管脚与5号管脚连接起来即可。 STC89C51 RC单片机在线编程系统电路如图2-3所示。其中P30网络名称对应的是单片机上RXD引脚,P31网络名称对应的是单片机上TXD引脚。 - 4 - GND C7VCCC6VCC 13P30R1 IN8U5R2 INP311112T1 INR1 OUT109T2 INR2 OUT14T1 OUT7T2 OUT145C1+C2+C4C535GND915C1 -C2 - 1UF/50VX4V+24V-232VCC681637261GND J3DB9图2-3 单片机在线可编程模块电路 2.4 单片机最小系统 本系统采用的STC89C51 RC单片机构成的最小系统简单、可靠。用STC89C51 RC单片机构成最小应用系统时,只要将单片机接上电源电路、时钟电路和复位电路即可。 STC89C51 RC单片机主要电源电压操作范围为4.0,5.5V,所以本设计采用5V。 STC89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。STC89C51 RC单片机的时钟产生方法有两种。内部时钟方式和外部时钟方式。本设计采用最常用的内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡,即用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,一般可在20pF到100pF之间取值。所以本设计中,振荡晶体选择12MHZ,电容选择30pF。在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。 STC89C51 RC单片机通常采用上电复位和按钮复位两种方式。上电复位是利用电容充电来实现的,即上电瞬间RST端的点位与Vcc相同,随着充电电流的减少,RST端的电位逐渐下降。只要Vcc的上升时间不超过1ms,振荡器建立时间不超过10ms,当RST端保持至少两个及其周期为高电平时,就能完成复位操作。但是,为了在程序运行时也能可靠地使单片机复位,所以通常还要设置按键复位的功能,在程序运行时,通过复位按键强制单片机进入复位状态。所以,在本系统中,采用上电复位与按键复位的复合电路。但是由于本系统选用的WT588D-28P语音模块的复位要求是低电平复位,所以在单 - 5 - 片机复位端接一个三极管起开关的作用,再连接到语音模块的复位端。 综上所述:STC89C51单片机最小系统如图2-4所示。其中RES网络名称对应的是语音模 U2块WT588D-28P的复位脚。 139P10P00238P11P01337P12P02436P13P03535P14P04634P15P05733P16P06832P17P07 1321INT1P201222INT0P2123P221524T1P231425T0P2426P25C13127VCCEA/VPP2628P2719X130PRES18X2 Y1910RESETRXDR1412M11TXDVCC173010KRDALE/PC21629WRPSEN STC89C5130PQ3R11R128050 10K2KC3 R1310K10uFK1VCCSW-PB 图2-4 STC89C51单片机最小系统 2.5 语音模块 WT588D语音芯片是一款功能强大的可重复擦除烧写的语音单片机芯片,有MP3控制模式、按键控制模式、一线串口控制模式等多种控制模式,通过使用电脑配套软件WT588D VoiceChip可完成语音的组合播放,支持插入静音,使音质更加完美。插入的静音不占用存储器内存。内部有220个可控语音地址位和音量调节、循环播放、停止语音播放的命令码。每个可控地址位内可通过软件自由组合语音,而且其配套的软件操作简单,支持MP3、WAV、WMA的语音模式。WT588D模块内置语音芯片和SPI-FLASH存储器。 本系统采用的WT588D-28P语音模块内部采用WT588D-32L语音芯片作为核心控制器,包含WT588D-32L外围所需的SPI-FLASH、震荡电路和复位电路。外部只要供给电源、控制端、复位信号、扬声器就能正常工作。本系统采用的语音控制模式为一线控制模式,通过单片机与语音芯片的数据引脚将语音地址位或者命令码发送给语音模块,从而触发语音播放。将WT588D-28P语音模块的P03脚作为数据通信管脚,由STC89C51 RC的P1.0脚发送语音码或命令码数据。BUSY输出管脚接发光二极管做放音状态指示。由于本系统 - 6 - 采用的供电电源为DC5V,所以要在WT588D-28P语音模块的VDD端串接两个二极管来提供WT588D-28P语音模块的VCC端的工作电压。由于WT588D-28P语音模块的PWM音频输出方式能直接驱动8Ω/0.5W的喇叭,因此音频输出方式选用PWM输出方式。 综上所述:WT588D-28P语音模块电路及其与单片机的连接如图2-5所示。其中RES网络名称对应的是STC89C51 RC给语音模块的复位信号,在单片机最小系统中有提到。data网络名称对应的是STC89C51 RC的P1.0管脚,用于一线控制WT588D-28P语音模块。 U1128P05NC227VCCP06NC326P07NC425P10NC524P11NC623P12P04RES722RESETVDDJ1821DACBUSY9202PWM+VCCR1510191PWM-P004701118P14P01CON21217P13P021316dataP16P03D11415GNDP15IN4007 WT588DD4LED D2IN4007 图2-5 语音模块电路 2.6 显示电路 LED数码管是设备的简易显示常用电子元器件,它能在低电压、小电流条件下驱动发光,高频特性好、单色性好、亮度高,体积小、重量轻、抗冲击性能好,寿命长、成本低,因此LED数码管被广泛应用于数字仪器仪等数显器件中。 本系统选用两个常见的一位的0.6英寸8段共阴数码管作为动态显示模块,发光颜色为超高亮红色,在段和小数点上要加限流电阻,在动态显示时平均电流为4,5mA,峰值电流为100mA。在公共端分别接NPN型三极管再接到单片机的I/O口,做开关使用,起到选择位线的作用。同时,在基极和I/O口接1K的电阻,起到保护I/O口的作用,但是又由于接了这个1K的电阻使基极电流变小,从而导致三极管不能饱和导通,所以要在三极管基极上接一个上拉电阻,使电流增大,让三极管能完全饱和导通。由于显示模块接在P0口,而单片机P0口内部没有上拉电阻,所以要在外部接上拉电阻,使流过 - 7 - 数码管的电流能驱动其正常发光。选择用510Ω的排阻,那么流过数码管每一段的电流大约为5/510?10mA,这个电流足以点亮数码管,使其正常发光。 综上所述:本系统显示模块与单片机的连接电路如图2-6所示。 J2 510Ω*8DS1DS21DPYDPY2AAA77DPYDPYaa3BBB6a6abbVCC4CCC44ccfbfbgg5DDD22dd6EEE11eeecec7FFFdd99ff8GGG1010dpdpgg955U2dpdpC1C133139P10P00238P11P01C2C288VCCVCC337P12P02436P13P03535P14P04634P15P05733P16P06832P17P07R16R1710K10K1321INT1P201222INT0P2123P221524COM2T1P23Q1Q21425T0P248050805026P253127EA/VPP2628P2719X118X2R2R11k1k910RESETRXD11TXD1730RDALE/P1629COM1WRPSEN STC89C51 图2-6 显示电路 3 软件设计 在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。 在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。 为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。 在本系统中,软件设计也采取模块程序设计法。但是由于本系统采用的WT588D模块有相应的电脑配套软件,所以先用其配套软件将其设置为一线控制模式,每个地址内的语音组合好,利用可以插入静音的优点在需要停顿的地方插入静音,然后利用其下载 - 8 - 电路板下载到语音模块,下载好后将语音模块插入本系统的语音模块插座中,如果要修改里面的语音,只需拿下来重新下载即可,比较方便。此配套软件界面使用相当人性化,操作简单。 3.1 主程序设计 在本系统设计过程中,当电路上电时,默认为上行线行驶,当上行线行驶到终点时自动切换到下行线,当下行线行驶到终点时自动切换到上行线。一条线路上有40个不同的站名。我采用模块程序设计法,程序包含多个子程序模块,主要包括:显示子程序、按键扫描子程序、上行线按键处理子程序、下行线按键处理子程序、一线发码子程序。主程序直接调用这些子程序,结构清晰明了,又方便调试和修改程序。设置是否有键按下的标志F0,F0为1,有键按下;F0为0,则无键按下。软件编程具体的流程图如图3-1所示。 开始 初始化 启动上行线 启动下行线 发送语音或 命令码发送语音或 命令码 显示站台 显示站台 按键扫描 N按键扫描 NF0=1?,Y F0=1?Y 上行线按键 处理 下行线按键 处理Y Y运行到上行线终点站 吗,运行到下行线终点站N吗,N 一线发码子 程序一线发码子 程序 显示站台显示站台图3-1 主程序流程图 - 9 - 3.2 显示子程序设计 把要显示的站数存放在单片机的60H地址中,通过按键改变这个地址中的数值。由于本系统单向公交线上一共有40个站,所以在这个地址内的数值不能超过40,通过动态显示将公交车到达站数显示出来。显示子程序设计的设计流程图如图3-2所示。 开始 Y要显示的值大 于40, N 拆分个位与十 位 将各位和十 位分别送显 示 结束图3-2 显示子程序流程图 3.3 键盘扫描子程序设计 在本系统中,设置了八个按键,其中与STC89C5 1RC单片机P2.0,P2.4为相连的按键是服务语触发按键;与P2.5相连的按键为起步/到站按键,按一次,播放起步语音,再按一次,播放到站语音,通过这个按键,也来控制要显示的值;与P2.6相连的按键为停止语音播放按键;与P2.7相连的按键为公交车播报越站时,后退播报的按键。 键盘子程序的设计流程图如图3-3所示。 开始 将是否有键按 下的标志F0清 零N Y 有键按下吗, N 键释放了 吗,将F0置1Y 结束 图3-3 键盘扫描子程序流程图 - 10 - 3.4 上行线按键处理子程序设计 要使语音模块地址中的语音触发,就要通过单片机P1.0引脚发送这个地址。将要触发语音模块的地址数据存放在单片机的77H中。55H存放语音模块中起步/到站语的地址数据,54H存放语音模块中服务语的地址或者停止命令数据,最后只需将55H或者54H中的数据发送给77H即可。在按键处理子程序中,因为是有键按下的时间才调用这个按键处理程序的,所以如果当P2口的8个按键中有7个按键没有按下的话,那么剩下的那个按键肯定被按下了。 上行线按键处理子程序的设计流程图如图3-4所示。 开始 设置54H为相 应的语音地址Y是服务语按键54H内容给77H按下吗, N 设置54H为相 应的停止命令Y是停止按键按下吗, N 55H内容加1Y是起步/到站键按下, 55H=79,退后播报键一Y55H=79,60H=1定按下 N55H是偶数 吗,N 55H=0,Y 60H内容加1Y 55H内容减1N 55H是偶数吗, Y 60H内容减1 N 55H内容给77H 结束 图3-4 上行线按键处理子程序的设计流程图 - 11 - 3.5 下行线按键处理子程序设计 如果P2口的8个按键中有7个按键没有按下的话,那么剩下的那个按键肯定被按 下了,因为下行线按键处理是在有键按下的情况下才执行的。 下行线按键处理子程序的设计流程图如图3-5所示。 开始 Y是服务语按键设置54H为相54H内容给77H按下吗,应的语音地址 N Y是停止按键按设置54H为相 下吗,应的停止命令 N 55H内容加1Y是起步/到站 键按下, 55H=158, Y55H=0,60H=1 退后播报键一 定按下N55H是偶数 吗, Y 60H内容加155H=79,N Y 55H内容减1 N 55H是偶数 吗, N 60H内容减1 Y 55H内容给77H 结束 图3-5 下行线按键处理子程序的设计流程图 3.6 一线发码子程序设计 在本系统中采用WT588B-28P语音模块,并采用其一线控制模式。在这种模式下, 要触发语音模块中的地址,或者触发语音模块中的命令码,就是通过单片机P1.0向语 音模块P03口发送地址或命令码的数据实现的。但是要根据WT588B-28P语音模块的数 - 12 - 据通信线控制时序图来实现,依照单片机P1.0脚电平占空比不同来代表不同的数据位。要发送的数据存放在单片机77H中。 根据语音模块在受一线控制下的控制时序图,在发送数据时,应先将数据信号线单片机P1.0脚拉低5ms,再发送数据,发送的数据位是从低位开始发送的,也就是说,通过单片机P1.0脚要发送的数据,是由低位开始发送的,一位一位发送。如果要发送的数据位为0,则要使数据信号线(即单片机P1.0脚)上高电平与低电平数据占空比为1:3,如果要发送的数据位为1,则要使数据信号线(即单片机P1.0脚)高电平与低电平数据占空比为3:1。 发送的数据00H,DBH为地址指令,触发在语音模块中这些地址内的语音;E0H,E7H为音量调节命令,F2H为循环命令,FEH为停止命令。在本系统中,用到的命令就只有停止命令。 一线发码子程序流程图如图3-6所示。 开始 P1.0口清零 5ms P1.0口置1 延时200USY发送的数据位是 低电平吗, N P1.0口置一延时600US200US P1.0口清零 200US Y 8位数据发送 完了吗, N 结束Y 图3-6 一线发码子程序流程图 - 13 - 4 软件抗干扰技术 在单片机控制系统中,正确的采用软件抗干扰技术,与硬件干扰措施构成双层抗干扰防线,肯定能大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、开关量的软件抗干扰技术、指令冗余技术、软件陷阱技术等。分析干扰的来源,再根据系统设计有效的抗干扰方法。因此,本系统软件中用到了开关量的软件抗干扰技术。 开关信号存在抖动干扰的问题,在单片机设计中常用软件的方法消除抖动。在本系统设计中,由于键盘是由机械触点构成的,所以在机械触点断开、闭合时,会有抖动,这种抖动对人来说是感觉不到的,但对单片机来说,是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,这对单片机而言,时间算是很长了。所以要判断一个按键是否真正按下就需要把这些干扰去掉。按键与单片机的I/O口相连,当检测到I/O口为低的信号时,不是立即认为按键按下,而是延时20ms的时间后再检测I/O口的信号,如果仍为低电平,那就可以认定按键真的按下了,这实际上就是消除了按键按下时的抖动,对按键是否释放就可以采取查询的方法,直到检测到位高电平为止就按键释放了。一般情况下,不用对按键释放的后沿进行处理,也能满足要求。 5 调试 在完成硬件的基础上,我开始根据要实现的功能来设计软件流程图,软件程序编好后,我用KEIL C51软件编译,选择Intel8052,编译好后,再用Protues软件进行仿真。 在仿真的过程中,在原理图设计时用了两个一位的共阴数码管,且在公共端接了8050三极管后再接到单片机的I/O口的,但在Protues仿真软件中就直接选用两位一体的共阴数码管,然后将位线直接接到单片机的I/O口。由于本系统用到的WT588D-28P模块在Protues软件中是没有的,但是我是用一线控制方式的,发送数据给语音模块是通过单片机的P1.0口来发送的,而且是从低位开始发送的,所以我就可以用示波器观看单片机的P1.0口的波形,波形就能体现单片机发送的数据,且低位在前,高位在后。当我按键按下的时候出现波形,根据这个波形看是否是我要发送的数据。 在Protues仿真软件中画好图后,我将通过KEIL C51软件编译好的十六进制文件装到Protues仿真软件中的单片机中,实现了系统上电后就执行上行线,当上行线运行到终点自动切换到下行线,下行线运行到终点也自动切换到上行线。触发的每个语音地址数据或者停止命令,也通过波形显示出来了。显示刚开始就是动态显示不稳定,出现抖动的状态,我在改短了显示延时的时间后,显示稳定。由于我是根据起步/到站按键 - 14 - K7来控制的55H单元来判断显示是否要加一的,而且K7按一次播放起步语音,再次按动播放到站语音,所以我要在播放到站语音的时候显示加一,也就是K7按第二次的时候显示才加一,当显示到达40后,下一次就又从1开始显示,实现了这个功能。按下服务语按键,也能触发对应的语音地址。按下退后播报键,能退后播报,并显示正确的站数。所以,本系统的设计要求在Protues仿真软件中都实现了。 但是在Protues仿真中,数码管公共极没有接起开关作用的三极管,所以我将显示程序中送显示时位线的电平反了一下。在实物调试中,直流稳压电源采用+5V,数字万用表主要用来测分立元件的电阻、压降等参数。然后我将程序下载到单片机中,在实物中开始调试,发现语音这一块已经可以实现了,但是在实物中发现数码管不能点亮,但是语音模块能正常工作。经过分析,我猜想可能是上拉电阻阻值太大了,驱动不了数码管显示,因为在原理图设计时我并没有计算多大的上拉电阻阻值能使数码管发光,通过计算,发现上拉电阻太大,而且又在经过10K的上拉电阻后在数码管每一段上加了300Ω的限流电阻,通过数码管每一段的电流只有0.4mA,完全不能驱动数码管发光。于是我将将上拉电阻换成510Ω,然后又把限流电阻拆掉并在板子上将接限流电阻的地方短接,这样,通过数码管每一段的电流就达到了10mA,完全能驱动数码管发光。可是换了之后,却又发现数码管还是不能点亮。于是我就用万用表测试了三极管集电极与发射极之间的电压,发现三极管根本不能饱和导通,通过分析,我认为是在单片机I/O口与基极之间1K的电阻在起到对单片机I/O口的保护作用后不能达到三极管饱和导通的条件,所以我就在基极焊了个上拉电阻,然后再通电调试,数码管能正常显示了。但是原本在设计原理图的时候,是想让公交车在行驶时能通过按上/下行切换键来达到上/下行的切换,但是在软件编程的时候,不能实现这个按键的功能,于是我就在软件设计时没用到这个按键,而是设置撑上电公交车默认为上行线,当上行线或者下行线运行到终点时能自动切换到下行线或者上行线。所以我就将板子上原先设定的那个上/下行切换键拆下来了。经过调试后,实物系统能实现设计要求,而且结果稳定可靠。 - 15 - 结论与谢辞 本设计在硬件上主要使用单片机在线编程、LED液晶显示器、键盘、语音等模块,来实现公交车上行线与下行线的语音报站功能。最终实现上电后公交车默认为上行线,在行驶到上/下行线终点时自动切换到下/上行线,单条线上由40个不同的站名,而且能显示站号。语音模块可以利用其配套电脑操作软件,对语音模块完成所有功能的设置。语音模块内可控地址完全可以满足当今公交线路的要求,而且其配套软件使用简单,能方便更改语音内容。 本系统在硬件设计上,在选择单片机型号的时候,考虑到STC89C51 RC内部有ISP引导程序,能方便下载程序代码到单片机内,实现单片机在线编程。同时也考虑到干扰因素,在每个模块的电源输入端都加了滤波的电容,起到抗干扰的作用。但是在显示方面虽然考虑到了数码管的驱动电流,但是没有去计算,也考虑到数码管位线如果直接接单片机I/O口会将I/O口烧坏,所以就用了三极管使其起到开关的作用,并在基极与I/O口之间接了限流电阻来保护I/O口,但是没有考虑到加了限流电阻后会使三极管不能饱和导通导致,这两方面都导致了数码管不能被点亮。虽然在调试的过程中我认识到了这个问题,也改正了,实现了功能。同时,在设计完硬件还没在仿真软件中调试过我就将板子刻出来了,导致上/下行按键的功能不能实现,虽然不用这个按键,我也在软件中实现了设计要求,但是这些都是我今后要注意的地方,做任何事情考虑要全面。 单片机软件设计上,程序模块化,以便修改。在软件编程的过程中要加注一些必要的注释,以便出现错误时可以方便查找,纠正。 首先感谢信息学院电子系的全体老师三年来对我的教育和栽培,让我从一个没有技术的人变成一个懂技术并会运用技术的人。几个月的毕业设计也已经告一段落,经过自己不断的搜索努力以及廖任秀老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,廖老师严谨的治学态度和热忱的工作作风令我十分钦佩,她的指导使我受益非浅,在此对廖老师表示深深的感谢。 通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果。虽然在这次设计中还有需要改进的地方,但是我会在以后的工作和学习中继续努力、不断完善。这几个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。 - 16 - 参考文献 [1] 胡宴如.模拟电子技术基础[M].高等教育出版社,2004,2:4,10. [2] 杨志忠.数字电子技术基础[M].高等教育出版社,2003,12:4,6. [3] 高峰编.单片微型计算机原理与接口技术[M].机械工业出版社,2006,1:1,9. [4] 付华.智能仪器设计[M].国防工业出版社,2007,7:11,59. [5] 石生.电路基础分析[M].高等教育出版社,2003,12:3,11. [6] 周乐挺.传感器与检测技术[M].高等教育出版社,2005,12:4,6. - 17 - 附件1(系统原理图和PCB图 11VCCJ52233C11104 D3J412POWER35VC9C10C8J2104104510Ω*8470UFR3U11K128P05NC227VCCP06NC326P07NC425DS1DS2P10NC524DPYDPY1P11NC623AAA277DPYDPYaaP12P04722BBB366RESaaVCCbbRESETVDDJ1821CCC444ccfbfbDACBUSYgg920DDD522dd2PWM+VCCR151019EEE611eeecec1PWM-P004701118FFF799ddffP14P01CON21217GGG81010dpdpggP13P021316data955U2dpdpP16P03C1C1D1331415data139GNDP15P10P00IN4007J6238C2C2P11P0188VCCVCCWT588DCON9337P12P02D44361P13P03LEDCOM15352P14P04COM26343P15P057334P16P068325R16R17P17P07D2VCC610K10KIN4007K2服务语按键13217INT1P20K3服务语按键12228INT0P21K4服务语按键239P22K5服务语按键1524COM2Q1Q2T1P23K6后退播报按键142580508050T0P24K7起步/到站26P25C1K8停止3127VCCEA/VPP26K928服务语按键P2719X120P18X2R2R1RESY1P301k1k910RESETRXD12MP3111R14GNDTXDVCC1730RDALE/PC2RES21629COM1WRPSENC7STC89C51VCCC6VCC 20PR11Q3R12805010K C32KU513R1 IN12P308R1 OUTR2 IN9R1311R2 OUT10uFT1 INP311410K10T1 OUTK1T2 IN7T2 OUTVCC14C1+C2+SW-PB35C1 -C2 -GND155V+29C4C5232V-VCC6164 1UF/50VX4837261GND J3DB9 图1 系统原理图 图2 PCB图 - 18 - 附件2(程序清单 ORG 0000H; SJMP MAIN; ORG 0030H; DAIFAZHI EQU 77H;//发码值暂存地址// SDA EQU P1.0; //数据引脚// MOV 60H ,#0; MOV R5,#8; //发语音码或命令码8位循环// MAIN: MOV DPTR,#TAB; MOV 55H,#0; MOV 60H,#1; MOV DAIFAZHI,55H; LCALL ONLINE; //调用一线发码子程序,触发播放此路线为由1,40站的上 行线这句话,即默认为上行线// LPL: LCALL DISPLAY; //调用显示程序// LCALL KEY; //调用按键扫描程序// JNB F0,LPL; //如果没有键按下,则返回// LCALL KEYCHULI; //否则调用上行线按键处理程序// MOV A,55H; CJNE A,#79,SHX; SJMP XHX; //上行线运行到终点站切换到下行线// SHX: LCALL ONLINE; //调用一线发码子程序// LCALL DISPLAY; //调用显示程序// SJMP LPL; //上行线没运行到终点,反复循环 // XHX: MOV 55H,#79; MOV 60H,#1; LCALL ONLINE; //调用一线发码子程序,触发播放此路线为由40,1站的下行 线这句话,切换到下行线// LP: LCALL DISPLAY; //调用显示程序/ LCALL KEY; //调用按键扫描程序// - 19 - JNB F0,LP; //如果没有键按下,则返回// LCALL KEYCHULI1; //否则调用上行线按键处理程序// MOV A,55H; CJNE A,#0,XHX1; SJMP MAIN; //下行线运行到终点站切换到上行线,主程序到此结束// XHX1: LCALL ONLINE; //调用一线发码子程序// LCALL DISPLAY; //调用显示程序// LJMP LP; //下行线没运行到终点,反复循环 // KEY: //按键扫描子程序// CLR F0; //清F0,表示无键按下// ORL P2,#11111111B; //将P2口接的按键全部置1// MOV A,P2; //取P2的值// ORL A,#00000000B; CPL A; 如果累加器A为零,一定无键按下,结束 // JZ KRET; // LCALL DELAY20ms; //延时去抖动// ORL P2,#11111111B; //将P2口接的按键全部置1// MOV A,P2; //取P2的值// ORL A,#00000000B; CPL A; JZ KRET; //如果累加器A为零,一定无键按下,结束 // MOV B,A; //确实有键按下,将键值存入B中 // SETB F0; //设置有键按下的标志F0为1// KRET1: ORL P2,#11111111B; //将P2口接的按键全部置1// MOV A,P2; //取P2的值// ORL A,#00000000B; CPL A; JZ KRET; //如果累加器A为零,说明键释放了,结束 // LJMP KRET1; //说明键还没释放,继续等待键释放 // KRET: RET - 20 - KEYCHULI: //上行线按键处理子程序// MOV A,B; //从B寄存器中获取键值// JB ACC.0,FW1;//分析接在P2口的键的代码,被按下的那位为1// JB ACC.1,FW2; JB ACC.2,FW3; JB ACC.3,FW4; JB ACC.7,FW5; JB ACC.5,QIBUDAO; JB ACC.6,TEWQ; MOV A,55H; //K6退后播报按键按下后的处理// CJNE A,#0,ZH; LJMP TT; ZH: DEC 55H; MOV A,55H; JNB ACC.0,TTP; DEC 60H; TTP: LJMP LPP; TEWQ: LJMP TIZHI; FW1: MOV 54H,#190;//K2服务语按键按下后的处理// YIQI: MOV DAIFAZHI,54H; TT: LJMP CHULIRET; FW2: MOV 54H,#191; //K3服务语按键按下后的处理// LJMP YIQI; FW3: MOV 54H,#192; //K4服务语按键按下后的处理// LJMP YIQI; FW4: MOV 54H,#193; //K5服务语按键按下后的处理// LJMP YIQI; FW5: MOV 54H,#194; //K9服务语按键按下后的处理// LJMP YIQI; TIZHI: MOV 54H,#0FEH; //K8停止按键按下后的处理// - 21 - LJMP YIQI; QIBUDAO: INC 55H; //K7起步/到站按键按下后的处理// MOV A,55H; CJNE A,#79,OU; //不为79,上行线没运行到终点// MOV 55H,#79; //上行线运行到终点// MOV 60H,#1; SJMP LPP; OU: JB ACC.0,LPP;//上行线行驶过程中触发的语音地址是奇数,那么站号不变 // INC 60H; //上行线行驶过程中触发的语音地址是偶数,那么站号增一// LPP: MOV DAIFAZHI,55H; RET CHULIRET: KEYCHULI1: //下行线按键处理子程序// MOV A,B; //从B寄存器中获取键值// 分析接在P2口的键的代码,被按下的那位为1// JB ACC.0,FW11; // JB ACC.1,FW21; JB ACC.2,FW31; JB ACC.3,FW41; JB ACC.7,FW51; JB ACC.5,QIBUDAO1; JB ACC.6,TEWQ1; MOV A,55H; //K6退后播报按键按下后的处理// CJNE A,#79,TY; LJMP LPP1; TY: DEC 55H; MOV A,55H; JNB ACC.0,KK; LJMP LPP1; KK: DEC 60H; LJMP LPP1; - 22 - TEWQ1: LJMP TIZHI1; FW11: MOV 54H,#190; //K2服务语按键按下后的处理// YIQI1: MOV DAIFAZHI,54H; LJMP CHULIRET1; FW21: MOV 54H,#191; //K3服务语按键按下后的处理// LJMP YIQI1; FW31: MOV 54H,#192; //K4服务语按键按下后的处理// LJMP YIQI1; FW41: MOV 54H,#193; //K5服务语按键按下后的处理// LJMP YIQI1; FW51: MOV 54H,#194; //K9服务语按键按下后的处理// LJMP YIQI1; TIZHI1: MOV 54H,#0FEH; //K8停止按键按下后的处理// LJMP YIQI1; QIBUDAO1: INC 55H; //K7起步/到站按键按下后的处理// MOV A,55H; CJNE A,#158,LXX; //不为158,下行线没运行到终点// MOV 55H,#0 //下行线运行到终点// MOV 60H,#1 LJMP LPP1; LXX: JNB ACC.0,LPP1;//下行线行驶过程中触发的语音地址是偶数,那么站号不 变// INC 60H; //下行线行驶过程中触发的语音地址是奇数,那么站号增一// LPP1: MOV DAIFAZHI,55H; CHULIRET1:RET ONLINE: //一线发码子程序// CLR SDA; LCALL DELAY5ms; //延时5ms// MOV A,DAIFAZHI; online2: SETB SDA; - 23 - RRC A; JNC DIDIANPIN; //为零则SDA高电平:低电平=1:3// LCALL DELAY200US; //为1, SDA高电平:低电平=3:1// LCALL DELAY200US; LCALL DELAY200US; CLR SDA; LCALL DELAY200US; LJMP online1; DIDIANPIN: LCALL DELAY200US; CLR SDA; LCALL DELAY200US; LCALL DELAY200US; LCALL DELAY200US; online1: DJNZ R5,online2; //8位数据没有发送完,循环// MOV R5,#8 ; //8位数据发送完// SETB SDA; RET DISPLAY://显示子程序// MOV A,60H; CJNE A,#41,LKP; //上行线或者下行线没运行到终点,继续显示// SJMP JIESHU; //上行线或者下行线运行到终点,结束// LKP: MOV B,#10; //拆分个位和十位// DIV AB; MOV 61H,A;//十位存在61H// MOV 62H,B;//个位存在62H// SETB P1.4; //显示个位的数码管有效// CLR P1.5; //显示十位的数码管无效// MOV A,62H; MOVC A,@A+DPTR; MOV P0,A; //个位数值送显示// - 24 - LCALL DELAY5ms; //延时5ms// SETB P1.5; //显示十位的数码管有效// CLR P1.4; //显示个位的数码管无效// MOV A,61H; MOVC A,@A+DPTR; MOV P0,A; //十位数值送显示// LCALL DELAY5ms; //延时5ms// JIESHU:RET DELAY20ms: //延时20ms子程序// MOV R2,#100; LDS: MOV R3,#10; LDS1: MOV R4,#10; DJNZ R4,$; DJNZ R3,LDS1; DJNZ R2,LDS; RET DELAY200US: //延时200US子程序// MOV 70H,#10; LDS2: MOV 71H,#10; DJNZ 71H,$; DJNZ 70H,LDS2; RET DELAY5ms: //延时5ms子程序// MOV 72H,#25; LDS3: MOV 73H,#100; DJNZ 73H,$; DJNZ 72H,LDS3; RET TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END - 25 - 附件3(仿真图 一上电,数码管显示01,触发语音模块00H中的语音(为上行线的话) 在上行线中,按下一次K7,播放起步语音,显示不变。 在上行线中,按下一次K7,播放到站语音,显示增一。 - 26 - 按下K6,后退播报语音,根据发送的语音地址,显示站数,符合要求 在上行线中,到达终点站。 自动切换到下行线,显示01,触发语音模块79H中的语音(为下行线的话) - 27 - 下行线运行到终点 自动切换到上行线,显示01,触发语音模块00H中的语音(为上行线的话)(以此循环) 按下K2服务语按键,触发语音模块中BEH(十进制为190)中的服务语音,显示不变 按下K3、K4、K5、K9服务语按键,也相应触发语音模块中的服务语音,显示不变 - 28 - 按下K8,发送FEH命令码给语音模块,显示不变 - 29 - 附件4(实物图 - 30 - 附件5(元器件清单 元器件参数 元器件名称 封装 C4 RB88 C7 RB88 C6 RB88 J5 SW88 1K R3 AXIAL0.3 1UF/50VX4 C5 RB88 1k R2 AXIAL0.4 1k R1 AXIAL0.4 2K R12 AXIAL0.4 5V J4 ELE 10K R13 AXIAL0.4 10K R17 AXIAL0.4 10K R16 AXIAL0.4 10K R11 AXIAL0.4 10uF C3 RB88 12M Y1 XTAL-1 20P C2 RAD0.2 20P C1 RAD0.2 104 C11 RAD0.2 104 C9 RAD0.2 104 C10 RAD0.2 232 U5 DIP16 470 R15 AXIAL0.4 470UF C8 RB88 510Ω*8 J2 SIP9 8050 Q2 8050W 8050 Q3 8050W 8050 Q1 8050W CON2 J1 SIP-2 CON9 J6 SIP9 DB9 J3 DBWW DPY DS2 SMG DPY DS1 SMG IN4007 D1 DIODEZJ IN4007 D2 DIODEZJ LED D4 LED88 POWER D3 LED88 RES2 R14 AXIAL0.4 STC89C51 U2 DIP-40 SW-PB K1 KEY WT588D U1 DIP-28 服务语按键 K9 KEY 服务语按键 K4 KEY 服务语按键 K2 KEY 服务语按键 K3 KEY 服务语按键 K5 KEY 后退播报按键 K6 KEY 起步/到站 K7 KEY 停止 K8 KEY - 31 -
/
本文档为【基于51单片机的公交车语音报站器的设计与制作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索