基于51单片机的公交车语音报站器的设计与制作.doc_第1页
基于51单片机的公交车语音报站器的设计与制作.doc_第2页
基于51单片机的公交车语音报站器的设计与制作.doc_第3页
基于51单片机的公交车语音报站器的设计与制作.doc_第4页
基于51单片机的公交车语音报站器的设计与制作.doc_第5页
免费预览已结束,剩余28页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于51单片机的公交车语音报站器 的设计与制作 目 录摘要1英文摘要1引言 21 设计要求32 硬件设计3 2.1 硬件原理及框图3 2.2 系统供电电源模块设计3 2.3 单片机在线编程模块设计4 2.4 单片机最小系统设计5 2.5 语音模块的设计6 2.6 显示电路的设计73 软件设计8 3.1 主程序设计9 3.2 显示子程序设计10 3.3 键盘扫描子程序设计10 3.4 上行线按键处理子程序设计11 3.5 下行线按键处理子程序设计12 3.6 一线发码子程序设计124 软件抗干扰技术145 调试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引言随着社会的快速发展,目前,在一些大城市里,公交车上已经开始逐渐使用GPS报站系统,但是手动的公交车语音报站器仍然占有一定的市场份额,原因在于手动语音报站器价格低廉,同时也具备GPS报站器的报站功能。尤其是在中小型城市,公交车上应用手动语音报站器是最实惠也是最实际的。但是随着公交线路不断地调整,而现有的手动语音报站器不能满足公交路线的要求,如不能方便地更改报站器的语音内容、不能存放多个站名等。所以,一款不仅能在公交车上实现语音报站,更重要的是能根据配合配套的电脑使用软件,随意更换报站器语音内容,并能满足公交车的路线要求的新型手动公交车语音报站器显得越来越重要,也有了它自身存在的价值和意义。本课题设计的语音报站系统在上电时默认为上行线行驶,上行线行驶到终点能自动切换到下行线,下行线运行到终点能自动切换到上行线。能实现公交车进站、出站时语音报站提示功能、播报公交车上的5条服务标语、实现播报越站时的退后播报、停止当前语音播报、两位数码管显示站数、根据配合配套的电脑软件,随意更换报站器语音内容,一条路线上/下行总共可加载40个不同的站名,满足公交车的路线要求。这套语音报站器系统以STC89C51 RC单片机为核心,一线控制WT588D-28P语音模块,并增添其他外围设备,单片机在线编程模块、WT588D语音模块、LED显示器、键盘、喇叭等。这虽然是一个简单的演示模型,但结构简单,使用灵活,功能稳定,音质自然、清晰,为满足公交车路线要求,公交车装备现代化,提高服务档次起到核心的作用。为此进行设计,以期能够为后续研究提供参考。1 设计要求设计一款基于51单片机的公交车语音报站器,报站器能实现公交车进站、出站时语音报站提示功能;并能播报公交车上的5条服务标语;具有在播报越站时退后播报;停止当前语音播报的功能;两位数码管显示站数。配合配套电脑使用软件,随意更换报站器语音内容,一条路线上/下行总共可加载40个站名,能满足公交车的路线要求。2 硬件设计2.1 硬件原理及框图用单片机STC89C51 RC一线串口控制WT588D-28P语音模块的P03口来实现语音报站的功能。电源部分选取+5V直流稳压电源,给系统上电后,通过单片机在线编程模块将程序代码下载到单片机中;再通过按键发送需要的命令或语音码和控制两个共阴数码管显示当前的公交车行驶站数;音频输出部分采用PWM输出方式,直接驱动0.5W/8的扬声器。单片机发送命令或语音码成功后,可以通过BUSY输出部分(发光二极管是否点亮)来判断语音是否处于播放忙的状态。要设计的公交车语音报站器硬件框图如图2-1所示。图2-1 语音报站系统硬件框图单片机最小系统包括电源电路、时钟电路、复位电路三部分,缺一不可。2.2 系统供电电源模块本系统电源选用+5V直流稳压电源,接入电源后,用开关控制其输入与断开,并用发光二极管指示,由于电源输入可能会对电路产生干扰,所以用电容来滤波,起到抗干扰的作用。系统中每个模块都配置一个抗干扰的电容,在PCB板的布置中,要将其布置在每个模块的电源输入附近。本系统供电电源模块电路如图2-2所示:其中J4为直流电压+5V的插座,J5为开关,C9、C10、C11起到滤波抗干扰的作用。图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引脚。图2-3 单片机在线可编程模块电路2.4 单片机最小系统本系统采用的STC89C51 RC单片机构成的最小系统简单、可靠。用STC89C51 RC单片机构成最小应用系统时,只要将单片机接上电源电路、时钟电路和复位电路即可。STC89C51 RC单片机主要电源电压操作范围为4.05.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语音模块的复位要求是低电平复位,所以在单片机复位端接一个三极管起开关的作用,再连接到语音模块的复位端。综上所述:STC89C51单片机最小系统如图2-4所示。其中RES网络名称对应的是语音模块WT588D-28P的复位脚。图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输出管脚接发光二极管做放音状态指示。由于本系统采用的供电电源为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语音模块。图2-5 语音模块电路2.6 显示电路LED数码管是设备的简易显示常用电子元器件,它能在低电压、小电流条件下驱动发光,高频特性好、单色性好、亮度高,体积小、重量轻、抗冲击性能好,寿命长、成本低,因此LED数码管被广泛应用于数字仪器仪表等数显器件中。本系统选用两个常见的一位的0.6英寸8段共阴数码管作为动态显示模块,发光颜色为超高亮红色,在段和小数点上要加限流电阻,在动态显示时平均电流为45mA,峰值电流为100mA。在公共端分别接NPN型三极管再接到单片机的I/O口,做开关使用,起到选择位线的作用。同时,在基极和I/O口接1K的电阻,起到保护I/O口的作用,但是又由于接了这个1K的电阻使基极电流变小,从而导致三极管不能饱和导通,所以要在三极管基极上接一个上拉电阻,使电流增大,让三极管能完全饱和导通。由于显示模块接在P0口,而单片机P0口内部没有上拉电阻,所以要在外部接上拉电阻,使流过数码管的电流能驱动其正常发光。选择用510的排阻,那么流过数码管每一段的电流大约为5/51010mA,这个电流足以点亮数码管,使其正常发光。综上所述:本系统显示模块与单片机的连接电路如图2-6所示。图2-6 显示电路3 软件设计在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。在本系统中,软件设计也采取模块程序设计法。但是由于本系统采用的WT588D模块有相应的电脑配套软件,所以先用其配套软件将其设置为一线控制模式,每个地址内的语音组合好,利用可以插入静音的优点在需要停顿的地方插入静音,然后利用其下载电路板下载到语音模块,下载好后将语音模块插入本系统的语音模块插座中,如果要修改里面的语音,只需拿下来重新下载即可,比较方便。此配套软件界面使用相当人性化,操作简单。3.1 主程序设计在本系统设计过程中,当电路上电时,默认为上行线行驶,当上行线行驶到终点时自动切换到下行线,当下行线行驶到终点时自动切换到上行线。一条线路上有40个不同的站名。我采用模块程序设计法,程序包含多个子程序模块,主要包括:显示子程序、按键扫描子程序、上行线按键处理子程序、下行线按键处理子程序、一线发码子程序。主程序直接调用这些子程序,结构清晰明了,又方便调试和修改程序。设置是否有键按下的标志F0,F0为1,有键按下;F0为0,则无键按下。软件编程具体的流程图如图3-1所示。图3-1 主程序流程图3.2 显示子程序设计把要显示的站数存放在单片机的60H地址中,通过按键改变这个地址中的数值。由于本系统单向公交线上一共有40个站,所以在这个地址内的数值不能超过40,通过动态显示将公交车到达站数显示出来。显示子程序设计的设计流程图如图3-2所示。图3-2 显示子程序流程图3.3 键盘扫描子程序设计 在本系统中,设置了八个按键,其中与STC89C5 1RC单片机P2.0P2.4为相连的按键是服务语触发按键;与P2.5相连的按键为起步/到站按键,按一次,播放起步语音,再按一次,播放到站语音,通过这个按键,也来控制要显示的值;与P2.6相连的按键为停止语音播放按键;与P2.7相连的按键为公交车播报越站时,后退播报的按键。键盘子程序的设计流程图如图3-3所示。图3-3 键盘扫描子程序流程图3.4 上行线按键处理子程序设计 要使语音模块地址中的语音触发,就要通过单片机P1.0引脚发送这个地址。将要触发语音模块的地址数据存放在单片机的77H中。55H存放语音模块中起步/到站语的地址数据,54H存放语音模块中服务语的地址或者停止命令数据,最后只需将55H或者54H中的数据发送给77H即可。在按键处理子程序中,因为是有键按下的时间才调用这个按键处理程序的,所以如果当P2口的8个按键中有7个按键没有按下的话,那么剩下的那个按键肯定被按下了。上行线按键处理子程序的设计流程图如图3-4所示。图3-4 上行线按键处理子程序的设计流程图3.5 下行线按键处理子程序设计如果P2口的8个按键中有7个按键没有按下的话,那么剩下的那个按键肯定被按下了,因为下行线按键处理是在有键按下的情况下才执行的。下行线按键处理子程序的设计流程图如图3-5所示。图3-5 下行线按键处理子程序的设计流程图3.6 一线发码子程序设计在本系统中采用WT588B-28P语音模块,并采用其一线控制模式。在这种模式下,要触发语音模块中的地址,或者触发语音模块中的命令码,就是通过单片机P1.0向语音模块P03口发送地址或命令码的数据实现的。但是要根据WT588B-28P语音模块的数据通信线控制时序图来实现,依照单片机P1.0脚电平占空比不同来代表不同的数据位。要发送的数据存放在单片机77H中。根据语音模块在受一线控制下的控制时序图,在发送数据时,应先将数据信号线单片机P1.0脚拉低5ms,再发送数据,发送的数据位是从低位开始发送的,也就是说,通过单片机P1.0脚要发送的数据,是由低位开始发送的,一位一位发送。如果要发送的数据位为0,则要使数据信号线(即单片机P1.0脚)上高电平与低电平数据占空比为1:3,如果要发送的数据位为1,则要使数据信号线(即单片机P1.0脚)高电平与低电平数据占空比为3:1。发送的数据00HDBH为地址指令,触发在语音模块中这些地址内的语音;E0HE7H为音量调节命令,F2H为循环命令,FEH为停止命令。在本系统中,用到的命令就只有停止命令。一线发码子程序流程图如图3-6所示。图3-6 一线发码子程序流程图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仿真软件中的单片机中,实现了系统上电后就执行上行线,当上行线运行到终点自动切换到下行线,下行线运行到终点也自动切换到上行线。触发的每个语音地址数据或者停止命令,也通过波形显示出来了。显示刚开始就是动态显示不稳定,出现抖动的状态,我在改短了显示延时的时间后,显示稳定。由于我是根据起步/到站按键K7来控制的55H单元来判断显示是否要加一的,而且K7按一次播放起步语音,再次按动播放到站语音,所以我要在播放到站语音的时候显示加一,也就是K7按第二次的时候显示才加一,当显示到达40后,下一次就又从1开始显示,实现了这个功能。按下服务语按键,也能触发对应的语音地址。按下退后播报键,能退后播报,并显示正确的站数。所以,本系统的设计要求在Protues仿真软件中都实现了。但是在Protues仿真中,数码管公共极没有接起开关作用的三极管,所以我将显示程序中送显示时位线的电平反了一下。在实物调试中,直流稳压电源采用+5V,数字万用表主要用来测分立元件的电阻、压降等参数。然后我将程序下载到单片机中,在实物中开始调试,发现语音这一块已经可以实现了,但是在实物中发现数码管不能点亮,但是语音模块能正常工作。经过分析,我猜想可能是上拉电阻阻值太大了,驱动不了数码管显示,因为在原理图设计时我并没有计算多大的上拉电阻阻值能使数码管发光,通过计算,发现上拉电阻太大,而且又在经过10K的上拉电阻后在数码管每一段上加了300的限流电阻,通过数码管每一段的电流只有0.4mA,完全不能驱动数码管发光。于是我将将上拉电阻换成510,然后又把限流电阻拆掉并在板子上将接限流电阻的地方短接,这样,通过数码管每一段的电流就达到了10mA,完全能驱动数码管发光。可是换了之后,却又发现数码管还是不能点亮。于是我就用万用表测试了三极管集电极与发射极之间的电压,发现三极管根本不能饱和导通,通过分析,我认为是在单片机I/O口与基极之间1K的电阻在起到对单片机I/O口的保护作用后不能达到三极管饱和导通的条件,所以我就在基极焊了个上拉电阻,然后再通电调试,数码管能正常显示了。但是原本在设计原理图的时候,是想让公交车在行驶时能通过按上/下行切换键来达到上/下行的切换,但是在软件编程的时候,不能实现这个按键的功能,于是我就在软件设计时没用到这个按键,而是设置撑上电公交车默认为上行线,当上行线或者下行线运行到终点时能自动切换到下行线或者上行线。所以我就将板子上原先设定的那个上/下行切换键拆下来了。经过调试后,实物系统能实现设计要求,而且结果稳定可靠。结论与谢辞本设计在硬件上主要使用单片机在线编程、LED液晶显示器、键盘、语音等模块,来实现公交车上行线与下行线的语音报站功能。最终实现上电后公交车默认为上行线,在行驶到上/下行线终点时自动切换到下/上行线,单条线上由40个不同的站名,而且能显示站号。语音模块可以利用其配套电脑操作软件,对语音模块完成所有功能的设置。语音模块内可控地址完全可以满足当今公交线路的要求,而且其配套软件使用简单,能方便更改语音内容。本系统在硬件设计上,在选择单片机型号的时候,考虑到STC89C51 RC内部有ISP引导程序,能方便下载程序代码到单片机内,实现单片机在线编程。同时也考虑到干扰因素,在每个模块的电源输入端都加了滤波的电容,起到抗干扰的作用。但是在显示方面虽然考虑到了数码管的驱动电流,但是没有去计算,也考虑到数码管位线如果直接接单片机I/O口会将I/O口烧坏,所以就用了三极管使其起到开关的作用,并在基极与I/O口之间接了限流电阻来保护I/O口,但是没有考虑到加了限流电阻后会使三极管不能饱和导通导致,这两方面都导致了数码管不能被点亮。虽然在调试的过程中我认识到了这个问题,也改正了,实现了功能。同时,在设计完硬件还没在仿真软件中调试过我就将板子刻出来了,导致上/下行按键的功能不能实现,虽然不用这个按键,我也在软件中实现了设计要求,但是这些都是我今后要注意的地方,做任何事情考虑要全面。单片机软件设计上,程序模块化,以便修改。在软件编程的过程中要加注一些必要的注释,以便出现错误时可以方便查找,纠正。首先感谢信息学院电子系的全体老师三年来对我的教育和栽培,让我从一个没有技术的人变成一个懂技术并会运用技术的人。几个月的毕业设计也已经告一段落,经过自己不断的搜索努力以及廖任秀老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,廖老师严谨的治学态度和热忱的工作作风令我十分钦佩,她的指导使我受益非浅,在此对廖老师表示深深的感谢。通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果。虽然在这次设计中还有需要改进的地方,但是我会在以后的工作和学习中继续努力、不断完善。这几个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。参考文献1 胡宴如.模拟电子技术基础M.高等教育出版社,2004,2:410.2 杨志忠.数字电子技术基础M.高等教育出版社,2003,12:46.3 高峰编.单片微型计算机原理与接口技术M.机械工业出版社,2006,1:19.4 付华.智能仪器设计M.国防工业出版社,2007,7:1159.5 石生.电路基础分析M.高等教育出版社,2003,12:311.6 周乐挺.传感器与检测技术M.高等教育出版社,2005,12:46.附件1系统原理图和PCB图图1 系统原理图图2 PCB图附件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; /调用一线发码子程序,触发播放此路线为由140站的上行线这句话,即默认为上行线/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; /调用一线发码子程序,触发播放此路线为由401站的下行线这句话,切换到下行线/LP: LCALL DISPLAY; /调用显示程序/ LCALL KEY; /调用按键扫描程序/ 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; JZ KRET; /如果累加器A为零,一定无键按下,结束 / 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:RETKEYCHULI: /上行线按键处理子程序/ 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停止按键按下后的处理/ 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;CHULIRET:RETKEYCHULI1: /下行线按键处理子程序/ MOV A,B; /从B寄存器中获取键值/ JB ACC.0,FW11; /分析接在P2口的键的代码,被按下的那位为1/ 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;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:RETONLINE: /一线发码子程序/CLR SDA;LCALL DELAY5ms; /延时5ms/MOV A,DAIFAZHI;online2:SETB SDA;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;RETDISPLAY:/显示子程序/MOV A,60H;CJNE A,#41,LKP;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论