《【电子信息工程毕业设计+文献综述+开题报告】基于单片机的公交报站系统设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
(20__届)本科毕业设计基于单片机的公交报站系统设计39 摘要随着科技的进步,技术的发展,人们越来越提倡智能化,简单化,用科技来改变原有的生活方式。作为一个城市的公交企业,它既要代表政府体现当地城市的形象,又要尽一切力量减少政府投资,创造良好的社会效益和经济效益。而传统的公交运营系统的装备和管理模式较难达到这两者的完美结合。为了改变这种状况,本文利用单片机来设计一种适合在公交车上用的智能报站系统。采用AT89C51作为CPU进行总体控制,根据键盘信息,对语音和液晶显示进行控制。由语音芯片ISD4003构成的语音电路实现录音和回放,LCD进行汉字显示,从而实现公交车语音报站和液晶显示双重功能。由于该系统在工作中可降低司机的工作强度,可以提高车辆的运行安全,所以具有广泛的适用性和推广性。关键词:公交报站,语音芯片ISD4003,液晶显示39 Designofabus-stopReportingSystemBasedonMCUAbstractWiththedevelopmentofsciencetechnology,peopleincreasinglyadvocatetheintelligenceandsimplification.Asacitybuscompanies,notitonlyrepresentcityimagine,butalsomakeeveryefforttoreducegovernmentinvestmentandcreateagoodsocialandeconomicbenefits.Traditionalbussystemcannotsatisfytheneedofthemodernizedsystemdevelopment.Inordertochangethesituation,ThispaperresearchedakindofDeisgnmethodofintelligentbus_stopsystem.Thisdesignismainlytouse89S51microcontrollerasCPUtocarryoutoverallcontrols.ThroughtheprogramreadscharactersintotheLCDliquidcircuitcharacterprompt.Asthesystemcanreducethedrivers’workintensityandimprovethesaftyofvehicles,soitcanbeappliedandspred.Keywords:bus-stopReporting,AT89C51,voicechipISD4003,LCDdisplay39 目录摘要IIIAbstractIV目录V1绪论11.1课题来源及意义11.2发展现状及趋势11.3课题研究的主要内容22方案分析与总体设计32.1方案对比32.2方案总结32.3方案总体设计43公交报站系统硬件设计53.1主体控制(AT89C51)53.2语音模块73.2.1语音芯片ISD400383.2.2音频小功率放大电路LM38693.3液晶显示模块103.3.1液晶显示-12864系列与MCU的接口113.3.212864系列内置硬件说明113.4时间显示模块123.5键控模块144公交报站系统软件设计154.1主程序流程图及程序154.2键盘子程序模块流程图及程序174.3语音子程序模块流程图及程序184.4显示子程序模块流程图及程序20总结24参考文献25致谢26附录27附录图1电路原理图27附录图2PCB版图28附录图3实物图2839 基于单片机的公交报站系统设计1绪论1.1课题来源及意义随着社会信息化的加快,人们的工作,生活和通讯,信息的关系日益紧密。信息化社会在改变人们生活方式与工作习惯的同时,也对传统的公交提出了挑战:人们对公交的要求早已不只是简单的交通运输工具,更为关注的是一个安全,方便,舒适的智能交通车[1]。作为一个城市的公交企业,它不仅代表社会体现当地城市的形象,又要尽一切力量减少投资,创造良好的经济效益及社会效益;而传统公交由于人工售票,人工报站等一些人为因素影响,难以满足现代城市公交发展需求[2]。现在是一个高科技的电子时代,提倡的是智能电子系统。现代电子系统的基本核心是嵌入式计算机系统(简称嵌入式系统),而单片机是最典型、最广泛、最普及的嵌入式系统,发展到现在技术已相当成熟,应用十分广泛。单片机体积小,重量轻,价格便宜且具有很强的灵活性,这为智能公交的发展提供了十分有利的条件,并且具有很强的市场适用性。公共交通智能化系统是公交信息化系统的重要组成部分,是提高公共交通服务水平、吸引出行量的必要手段,体现了一个城市的现代化交通管理水平,是中国解决交通问题的重要措施之一。1.2发展现状及趋势单片机生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段,FLASH的使用使MCU技术进入第四代,发展到现在技术已相当成熟。目前,国内外单片机最新的技术包括:数字单片机技术,以单片机为核心的嵌入式系统技术以及单片机的可靠性技术。智能公交最新发展现状可由智能汽车作为代表,它是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统,它集中运用了计算机、现代传感、信息融合、通讯、人工智能及自动控制等技术,是典型的高新技术综合体[3]。在目前的汽车驾驶中,驾驶员的人为因素占了很大的比重,一旦出现驾驶员长时间驾车、疲劳驾车、判断失误的情况,很容易造成交通事故。通过对车辆智能化技术的研究和开发,可以提高车辆的控制与驾驶水平,保障车辆行驶的安全畅通、高效。智能车辆的主要特点是以技术弥补人为因素的缺陷,使得即便在很复杂的道路情况下,也能自动地操纵和驾驶车辆绕开障碍物,沿着预定的道路轨迹行驶。随着最新技术的发展,车载信息系统成为未来发展趋势。从计算机领域看,汽车车载信息系统是一个移动的计算平台。39 基于单片机的公交报站系统设计车载信息系统除了能够帮助安全驾驶外,另一方面还能帮助消费者将车上的设备都接入互联网,和其他车辆连接,和云计算连接,和交通流量、天气等各种实时数据连接[4]。1.3课题研究的主要内容本论文设计一种自动播报公交站名的智能系统,采用单片机AT89S51作为主控制中心,ISD4003语音芯片控制报站,LCD显示电路控制站名显示。本次设计以KeilC51开发环境为编程平台进行代码的编译和运行,在Protel99进行仿真。该报站系统具有如下的基本功能:1)按键输入控制:1.复位键:初始化状态;2.时间设置键:对时间进行设置;3.提示键:语音提示;4.报站键:车站提醒。2)语音播报:对车站名语音播报,并有温馨提醒。3)液晶显示:站名汉字显示和时间显示。4)芯片控制:以AT89C51芯片作为主控制核心。本论文总体设计的主要内容有:1)总体布置设计;2)绘制总体设计电路图;3)确定总体主要参数;4)编写设计程序及技术说明书等。39 基于单片机的公交报站系统设计2方案分析与总体设计2.1方案对比一、基于单片机AT89S51设计优点:51是8位单片机,内部的硬件到软件有一套完整的按位操作系统,易于编程;它体积小,功耗低,性价比低,网上学习资源丰富,十分适合初学者;采用C语言编程,程序易懂。缺点:运行速度慢(采用CISC(集中指令));所有I/O口都是准双向口,I/O口驱动能力弱。二、基于TMS320C5X系列的DSP设计优点:DSP芯片采用哈佛结构,运行速度快,精度高;有自己完整的指令系统和一些特殊的DSP指令,有强大的数据处理能力。缺点:适用范围窄,DSP系统是不同于模拟电路和数字逻辑电路系统,所需处理的是数字信号;一般适用于信号处理和图形、图像处理。三、基于UC/OS_Ⅱ操作系统的ARM设计优点:ARM是32位RISC微处理器,具有极高的性价比、代码密度,以及出色的实时中断响应和极低的功耗;UC/OS_Ⅱ具有可移植,可固化,可裁剪,多任务管理的特点,代码执行效率高、占用空间少、实时性能优良,适合高端应用领域。缺点:ARM相对于51而言,成本较高,且ARM在接口设计和编程方面较复杂,适合专业设计人员;四、基于FPGA的VHDL语言设计优点:FPGA是一种现场可编程门阵列,集成度高,具有更复杂的布线结构和逻辑实现;FPGA器件修改方便,设计周期短,使系统研制开发成本降低;用VHDL编程,灵活性强,可进行编程、除错、再编程重复操作,可进行充分地设计开发和验证。缺点:VHDL语言编程难以符合该课题,仿真环境难以体现功能优越性;专业性太强,研发工作普通用户难以完成。2.2方案总结本课题设计的系统属于小型项目,信息处理量不大,对速度、功耗要求不高,故选用8位的AT89S51就能满足系统的设计需求;通用廉价的AT89S51,作为控制芯片,不仅控制方便,成本低,而且设计简单。基于上述,选用1号基于单片机AT89S51设计方案。39 基于单片机的公交报站系统设计2.3方案总体设计基本原理:时间显示模块本系统采用89C51作为CPU,由CPU控制语音电路,液晶显示电路和键盘电路。键盘电路采用中断模式,当有键按下,系统产生中断,CPU响应中断;CPU处理后,决定播放语音芯片中已录制好的的录音,再经过一个功率放大电路来缓冲,播放录音;同时CPU通过程序读取汉字信息,送入LCD显示电路。其系统框图如图2-1所示:复位单片机控制系统语音模块键控模块指示灯液晶显示模块图2-1总体设计系统框图设计主要内容(1)语音模块选用ISD4003芯片实现报站。特点:播放时间长,单片4至8分钟语音录放,多段信息处理,不耗电信息保存100年,10万次录音周期,外围电路简单。实现功能:1.播放录音;2.复位(2)液晶显示模块选用12864显示屏,控制简单,显示数据多,显示资料提供64×2位元组的空间,最多控制4行×16字(64字)中文字型显示。实现功能:1.汉字显示,显示站名;2.时间显示(3)时间显示模块选用DS1302,它是充电时间芯片,通过简单串行接口与单片机进行通信;时间可自行调整,设置初值后,芯片自动计数时间。时间在液晶显示屏上显示,通过按键可调整。(4)键控模块键盘是人机交流的重要组成部分,通过键盘控制,向单片机提供指令,从而达到控制的目的。根据键盘的数目和占用资源的相对多少选择键盘形式。由于本文中键盘数目较少,控制简单,故选用独立式键盘。39 基于单片机的公交报站系统设计3公交报站系统硬件设计3.1主体控制(AT89C51)为保持系统的稳定,系统采用AT89S51。它是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM)。片内置通用8位中央处理器(CPU)和Flash存储单元。单片机最小系统电路图3-1如下:图3-1单片机最小系统该单片机最小系统包括一个复位电路、时钟电路和由晶振、负载电容组成的时钟振荡电路。复位电路由一个10uF的电容和一个10K的电阻组成,当这个管脚有连续两个以上机器周期的高电平时,这个单片机就会复位,复位电路高电平有效;时钟振荡电路由一个12M的晶振和2个30pF的负载电容组成,输出时钟脉冲,在51单片机中,晶振输出的脉冲周期为脉冲周期,12个脉冲周期为机器周期,单片机工作时间的最小单片机是机器周期;使用的单片机需要在+5V的直流电压下工作,且这个电源必须很稳定,否则会导致单片机的复位。AT89C51有2种可用软件编程的省电模式,它们是空闲模式和掉电模式。在空闲模式状态下,CPU保持睡眠状态而所有片内的外设仍保持激活状态;在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令。主要引脚描述:RST/VPD39 基于单片机的公交报站系统设计(9引脚):复位信号输入端,高电平有效。完成复位操作时,需要在该引脚加上2个机器周期(24个时钟振荡周期)的高电平;正常工作时,引脚电压≦0.5V。ALE/PROG(30引脚):ALE引脚输出为地址锁存允许信号;PROG引脚作为编程脉冲输入端。它的第二功能是对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。PSEN(29引脚):程序存储器允许输出控制端。在单片机访问外部存储器时,此引脚输出脉冲负跳沿作为读外部程序存储器的选通信号。EA/VPP(31引脚):内外程序存储器选择控制端。当EA为高电平时,访问片内程序存储器,EA为低电平时,只访问外部程序存储器。其性能参数和管脚图如3-2下:主要性能参数:·与MCS-51产品指令系统完全兼容·4k字节可重擦写Flash闪速存储器·1000次擦写周期·全静态操作:0Hz-24MHz·三级加密程序存储器·128×8字节内部RAM·32个可编程I/O口线·2个16位定时/计数器·6个中断源·可编程串行UART通道·低功耗空闲和掉电模式图3-2管脚配置图单片机需要在+5V的直流电压下工作,且这个电源必须很稳定,否则会导致单片机的复位。用7805三端稳压块进行稳压,输入和输出加两个滤波电容。其电源电路如下3-3所示:图3-3电源电路图39 基于单片机的公交报站系统设计3.2语音模块语音部分采用ISD4003系列高保真语音集成芯片。ISD4003系列语音芯片的录放电路设计包括了录音和放音的电路,其电路方框图如图3-4所示:录音前置放大电路ISD4003应用电路输出放大电路图3-4ISD4003录放电路方框图本设计中采用单端输入的连接方式来输入录音信号,将录制好的信号送出相应的地址,再报站状态下,只需由单片机找到语句存储地址,可开始放音。可知前置放大电路是一个电压并联负反馈单管放大电路,通过实际实验,该电路的输出信号满足ISD4003的输入电压要求。本论文中,语音已录制后,故省略录音前置放大电路。ISD4003的基本应用电路是根据芯片说明书上的要求,采用芯片说明书推荐的应用电路使用。ISD4003有数字电源和模拟电源,控制芯片说明书的要求,两个电源在做电路板的时候最好分开走线,而数字地和模拟地则尽量在焊盘上直接连接后用低阻通路连接到电源的地线。而音频输入端采用单端输入方式,其同相输入端通过一个电容接地,反相输入端通过一个电容接到前置放大器的输出,可以滤去前置放大器输出的直流信号。ISD4003的音频输出端通过一个4.7uF的电容接到后级的功率放大电路(由LM386芯片构成)。该应用电路图如3-5下所示:图3-5ISD4003的应用电路3.2.1语音芯片ISD400339 基于单片机的公交报站系统设计ISD4003系列芯片是高保真语音录放IC,3V单电源工作,无需开发系统,采用高质量、自然语音还原技术。其引脚图如3-6下:图3-6ISD4003管脚图主要引脚描述电源(VCCA,VCCD):芯片的模拟和数字电路使用不同的电源总线,且分别总线,尽可能靠近供电端处相连去耦电容靠近器件。地线(VSSA,VSSD):用低阻通路连接至电源,接地通路使VSSA与VSSD之间阻值<3Ω。同相模拟输入(ANAIN+):录音信号同相输入端,本文采用单端输入方式。反相模拟输入(ANAIN-):录音信号的反相输入端。单端方式下,该管脚通过电容接地。且ANAIN+和ANAIN-端的电容值相同。片选(SS):低电平有效。串行输入(MOSI):串行输入端,主控制器在串行时钟沿上升之前半个周期将数据放到末端。串行输出(MISO):串行输出端,芯片未选中,本端呈高阻状态。串行时钟(SCLK):时钟输入端,由主控制器产生,用于同步MOSI和MISO数据传输。数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。行地址时钟(RAC):漏极开路输出。每个RAC周期表示ISD存储器进行了一行的操作,该端用于存储管理技术。音频输出(AUDOUT):音频输出端,可驱动5Ω的负载。自动静躁(AMCAP):该端对地接1µF的电容,构成内部信号电平峰值检测电路的一部分。SPI(串行外接口)39 基于单片机的公交报站系统设计ISD4003工作于SPI串行接口。SPI协议是一个同步串行数据传输协议,假定SPI移位寄存器在SCLK的下降沿动作,在时钟上升沿锁存MOSI引脚的数据,在下降沿将数据传送至MISO引脚。(1)信息快进用户不需要知道信息的确切地址,就能快进跳过一条信息。信息快进只用于放音模式。遇到EOM后停止,内部地址计数器加1,指向下条信息的开始处。(2)上电顺序器件延时TPUD(8kHz采样时,约为25ms)后才能开始操作。所以用户发完上电指令后,必须等待TPUD,才能发出一条操作指令。器件会从此00地址开始放音,当出现EOM时,立即中断,停止放音。该芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。芯片采用多电平直接模拟量存储技术,每个采样值直接存贮在片内闪烁存贮器中,能够非常真实、自然地再现语音、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和"金属声"[5]。文选用ISD4003-04M,外部钟频:1024KHz。表3-14003系列型号与性能对照表型号时间输入采样典型带宽最大段数最小段长外部钟频ISD4003-04M4分钟8.0KHz3.4KHz1200200ms1024.0KHzISD4003-05M5分钟6.4KHz2.7KHz1200250ms819.2KHzISD4003-06M6分钟5.3KHz2.3KHz1200300ms682.7KHzISD4003-08M8分钟4.0KHz1.7KHz1200400ms512.0KHzISD4003系列工作电压3V,单片录放时间4~8分钟。ISD4003系列芯片内含振荡器、防混淆滤波器、音频放大器、自动静噪、平滑滤波器及高密度多电平闪烁存贮陈列。采样频率可为4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,而音质有所下降。片内信息可在断电情况下保存100年(典型值)[6]。3.2.2音频小功率放大电路LM386因为ISD4003的输出最大可以驱动5K的负载,所以要设计一个功率放大电路来缓冲。可以使用简单的三极管放大电路也可以采用专用的功率放大芯片来构成。采用三极管构成的功率放大电路有成本低的优点,但是它的工作稳定性比较差,而且电路不简洁[7]。而采用专用的功率放大芯片(如LM386)构成的放大电路有电路简洁、工作稳定等优点,而且价格也不会太高,所以本设计采用LM386来构成ISD4003输出信号的功率放大电路[8]。LM386是低电压应用的音频功率放大电路,有如下特点:(1)电源电压范围宽,;(2)静态电流小,当时,静态电流典型值为4mA。(3)电压增益可调,输出端直流电压自动跟踪,外围元件少。39 基于单片机的公交报站系统设计其应用电路如3-7下:图3-7LM386功率放大电路LM386的应用电路简单:6管脚接电源4~12V或5~18V,由于系统中有多组电源,电压不同,电容不同,故可将上电、调电时间短的电源调至+12V且它的值不得低于4V;4管脚接地;通过1、8管脚间的电容改变增益,断开时增益为20dB;7管脚一定要接电容,该电容的作用是:滤除噪声,当工作稳定后,该管脚电压为原先的一半,若要减缓直流基准电压的上升、下降速度,抑制噪声比,可增大该电容的容值;2、3管脚采用双音输入/输出方式,输出端可以抵消共模信号,有效抑制共模噪声比,在输出端再接一个输出耦合电容,该电容的作用是隔直通交和耦合,接4.7Uf/10uF最合适;电位器的选择一般采用10K最合适,阻值不会特别大。3.3液晶显示模块本部分采用12864B液晶显示模块。它控制简单、接口方式灵活,有4位/8位并行,2线或3线串行多种接口方式;为了能够简单、有效地显示汉字和图形,该模块内部设计有2MB的中文字型CGROM和64*256点阵的GDRAM绘图区域;同时,该模块还提供有4组可编程控制的16*16点阵造字空间[9]。字符显示通过将字符显示编码写入该字符显示RAM实现,根据写入方式的不同,显示不同类别的内容。本设计液晶模块串口显示,PSB接低电平(接地)。数据线(D0-D7)空接,RS、R/W、E分别与P0.0、P0.1、P0.2连接。每次上电后,单片机初始化完成后,进入系统默认的报站模式,一旦有键按下,通过软件解码读出键值,根据软件所设置的功能去执行[10]。模块电路图如3-8下:39 基于单片机的公交报站系统设计图3-8液晶串口显示电路图3.3.1液晶显示-12864系列与MCU的接口引脚描述(串行状态下):VCC(2引脚):模块电源输入,一般为5V;V0(3引脚):对比度调节;通过电位器调节后,从接口的V0脚引入模块来驱动LCD;VEE(1引脚):液晶电压输出端;RST(17引脚):复位信号,低电平有效;PSB(15引脚):并口/串口选择,H并口;L串口;RS(4引脚):片选,低有效;R/W(5引脚):串行数据线;E(6引脚):串行时钟输入;DB0-DB7(7-14引脚):空接;LEDK(19引脚):背光负;LEDA(20引脚):背光正。3.3.212864系列内置硬件说明12864液晶显示模块是采用控制芯片ST7920来控制显示的。ST7920是一种内置128*64-12汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置8192个中文汉字(16*16点阵)、128个字符的ASCII字符库(8*16点阵)及64*256点阵显示RAM(GDRAM)。中文字型产生ROM(CGROM)及半宽字型为字符产生器ROM(HCGORM):ST7920的字型产生ROM通过8192个16*16点阵的中文字型,以及126个16*8点阵的西文字符,用2个字节提供编码选择,硬件依照编码自动从CGROM中选择将要显示的字型;39 基于单片机的公交报站系统设计字型发生RAM(CGRAM):提供用户自定义字符生成(造字)功能,可提供4组16*16点阵空间,可将CGROM中没有定义的字符定义到CGRAM;显示RAM(DDRAM):用以存放LCD显示的数据,将标准的ASCII码放入DDRAM,内部控制线路就会自动将数据传送到显示器上,并显示出该ASCII码对应的字符。提供64*2字节的空间,最多可控制4行*16字的中文字,写入显示RAM,可分别显示CGROM、HCGROM、CGRAM的字型。三种字型的选择可通过在DDRAM中写入编码来进行设定,各种字型的详细编码如下:1)显示HCGROM字型,将一个字节的编码写入DDRAM,范围为02-7FH;2)显示CGRAM字型:将两个字节的编码写入DDRAM中来实现,有0000H、0002H、0004H、0006H四种编码方式;3)显示中文字型:将两字节的编码写入DDRAM中,先写高8位,后写低8位,范围为A140H-D75FH,A1A0H-F7FFH(GB)。绘图RAM:提供64*32个字节空间(扩充指令设定绘图RAM地址),最多可控制256*64点阵的二维绘图缓冲空间。更改时,先设置GDRAM地址的垂直地址后水平地址,再2个字节的数据绘图RAM(先高8位后低8位)。采用串口接线方式,PSB接低电平,只用两根线来完成数据传输。当多个连续指令被送入时,需考虑指令时间,必须等待上一个指令执行完毕后才送入下一个指令。一个完整的串行传输周期由以下部分组成:(1)送入启动字节:发送5个连续的“1”启动周期,然后指定2个位传输方向和传输性质(RW:确定读/写;RS:确定命令寄存器/数据寄存器),最后写入一个“0”;(2)送入指令/显示数据:指令或代码以字节为单位,送入的指令/数据以2个字节来处理。3.4时间显示模块时间显示我们采用DS1302芯片,因为它是涓流充电时钟芯片,自偿充放电,功耗低,外围电路简单。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能,普通采用32.768kHz晶振[11]。管脚图如图3-9所示:X1,X2:32.768KHz晶振管脚GND:地RST:复位脚I/O:数据输入/输出引脚SCLK:串行时钟Vcc1,Vcc2:电源供电管脚39 基于单片机的公交报站系统设计图3-9管脚配置图DS1302是一种带RAM的实时时钟电路,它可以对时、分、秒进行计时,具有闰年补偿功能。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302与单片机之间能简单地采用同步串行的方式通信,仅需要三个口线:(1)RES(复位),(2)I/O数据线,(3)SCLK(串行时钟)。内部有一个31×8的用于临时性存放数据的RAM寄存器,时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式组成。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。DS1302有2个电源:后备电源Vcc1,主电源Vcc2,且由Vcc1,Vcc2两者中较大者供电。当Vcc2>Vcc1+0.2V,由Vcc2供电;Vcc1>Vcc2,由Vcc1供电。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端,X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线。DS1302的外围应用电路如3-10所示:图3-10DS1302应用电路图DS1302在与CPU进行数据交换时,首先由微处理器向电路发送命令,且命令字节最高位逻辑为高电平,低电平则禁止写入DS1302;位6=0,表示取日历时钟数据,位6=1时,取RAM数据;位5-位1指示操作单元的地址;位0=0,进行写操作,位0=1,进行读操作,控制字节从最低位开始输出。39 基于单片机的公交报站系统设计在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。3.5键控模块报站系统的键盘采用独立式键盘接口。电路键盘共有6个键,采用软件查询和外部中断相结合的方法设计,当某个键按下时,低电平有效。6个键S1-S6功能的定义如表3-2所示:表3-26个键S1-S6的定义按键键名功能S1加1键设定的时间加1S2减1键设定的时间减1S3提示键服务用语提示S4报站键站名提示S5设置键时间初始化设置S6备用键用以扩展,或者其他备用本设计的独立式键盘电路图如图3-11所示,图3-11键盘电路图独立式键盘就是各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可以判断哪个按键被按下。键盘的电路图如下所示,各按键均采用了上拉电阻,为了保证在按键断开时,各I/O口有确定的高电平。若同时有2个按键闭合,将不做任何操作。39 基于单片机的公交报站系统设计4公交报站系统软件设计公交报站系统的软件设计,利用C语言进行编程,采用了结构化、模块化的设计方法,由主程序以及键盘子程序、显示子程序和语音子程序等模块组成。C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言.简洁紧凑、灵活方便、运算符丰富、数据结构丰富,应用范围非常广泛[12-15]。4.1主程序流程图及程序系统采用模块化结构,上电后,先对语音芯片和液晶显示器进行初始化;然后调用键盘程序实现控制,当有不同的键按下,通过扫描键盘、寻址(每个车站都有唯一的编码数据),调用其他子程序,从而基本实现公交报站和显示功能。其流程图如下图4-1所示:开始系统初始化按键按下?调用键盘子程序调用语音子程序调用显示子程序结束YYN图4-1主程序流程图39 基于单片机的公交报站系统设计主函数程序:main(){unsignedchartemp;DS1302SendData(WPR,0x00);//关闭写保护temp=DS1302GetData(SEC);//读出时钟开关,SEC寄存器的第七位是时钟控制位,为0时时钟运行temp&=0x7f;//打开时钟开关DS1302SendData(SEC,temp);//写入temp=DS1302GetData(HOU);temp&=0x7f;DS1302SendData(HOU,temp);//选择24小时制DS1302SendData(CHARGER,0xaa);//开启充电功能,给备用电池充电,选择两个二极管和4K的电阻.Timer0Init();init_12864();OldHour=12;Lcd_beel=0;while(1){ReadTimeData();//读取时间数据DisplayReady();//准备显示数据Display();//显示ScanKeyborad();//扫描键盘if(PLAY_KEY==0)ISDPlay(0x00);}}voidTimer0Int(void)interrupt1//定时器0中断函数,定时时间为1ms{TH0=0xfd;TL0=0x18;if(ucTimerKeyChange>0){ucTimerKeyChange--;}if(ucTimerDelay>0){ucTimerDelay--;}uiTimerHalfSecond++;if(uiTimerHalfSecond==2000){uiTimerHalfSecond=0;}if(uiTimerHalfSecond<1200){bFlagFlshTime=1;//beel=0;}else{bFlagFlshTime=0;//beel=1;}39 基于单片机的公交报站系统设计}4.2键盘子程序模块流程图及程序在单片机应用系统中,按键是重要的组成部分,用于向单片机应用系统输入数据和控制信息。由于按键数目较少,控制简单,采用独立式键盘。为了消除键的抖动,采用软件的方法消抖。其程序流程图4-2所示:开始置P2口为输入方式键闭合吗?延时10ms消抖指定地址单元是S1键闭合吗?有键闭合吗?是S2键闭合吗?是S3键闭合吗?是S4键闭合吗?是S5键闭合吗?是S6键闭合吗?指定地址单元指定地址单元指定地址单元指定地址单元指定地址单元YYYYYYYYNNNNNNN图4-2独立式键盘子程序模块流程图程序如下:voidScanKeyborad(void)//键盘扫描程序{if(FUNTION_KEY==0)//如果是功能键盘按下{Delayms(10);//延时10msif(FUNTION_KEY==0){while(!FUNTION_KEY)//等待键盘放开{ReadTimeData();//读取时间数据DisplayReady();//准备显示数据Display();//显示}if(ucClockStatu!=RUNING){39 基于单片机的公交报站系统设计DS1302SendData(HOU,OldHour);DS1302SendData(MIN,OldMinute);DS1302SendData(SEC,OldSecond);}ucClockStatu++;if(ucClockStatu==0x04){ucClockStatu=RUNING;lcdClear();init_12864();}}}4.3语音子程序模块流程图及程序电路上电后,先完成程序初始化,进入系统待机状态。若有键按下,转向执行该键指向的程序,直至语音播放结束。按键包括报站键、提示键、加1键和减1键。若放音键首次按下,自动读出第一站的放音内容;若不是首次按下,先判断当前站名,以该站名获得放音内容的首地址,进行放音。语音芯片数据的串行输入/输出,串行时钟信号分别与单片机的P0口相接,中断引脚INT(25)引脚空接,自动静噪(14引脚)对地接1uF的电容,构成内部信号电平峰值检测电路的一部分。延时上电等待25ms开始芯片初始化数据进入缓冲区按键按下?播放语音结束YN39 基于单片机的公交报站系统设计图4-3语音子程序模块流程图程序如下:voidTimer0Init(void)//定时器2初始化,自动重装初值模式,定时时间为1ms{TMOD=0x01;TH0=0xfd;TL0=0x18;TR0=1;ET0=1;EA=1;}voidDelayTPUD(void)//延时上电等待时间约25ms{uchari=100;ucharj;for(j=20;j>0;j--){while(--i){}}}voidISDSendCommand(uintcom){uchari;SS=0;CLK=0;for(i=16;i>0;i--){if(com&0x0001){MOSI=1;}Else{MOSI=0;}CLK=1;CLK=0;com=com>>1;}SS=1;}voidISDPowerUP(void)//ISD上电函数{ISDSendCommand(POWERUP);}voidISDPlay(uintaddr)//ISD放音函数{ISDPowerUP();//器件上电命令DelayTPUD();//等待上电延时ISDSendCommand(SETPLAY|addr);//设定放音地址ISDSendCommand(PLAY);}//开始放音voidDelayms(unsignedchartime)//延时函数,实现延时,具体时间根据晶振调整{ucTimerDelay=time;while(ucTimerDelay!=0);}voidFlash_Lcd(){uchari;39 基于单片机的公交报站系统设计for(i=0;i<5;i++)Lcd_beel=0;Delayms(500);Lcd_beel=1;Delayms(500);}Lcd_beel=0;}4.4显示子程序模块流程图及程序液晶显示器是一种功耗极低的显示器件。通常把它与驱动电路做在一块,形成液晶显示模块(LCM),使用者只要向LCM送入相应的命令和数据就可以实现所需要显示的内容。其程序流程图如图4-4所示:对12864初始化开始延时1ms检查忙信号信号忙?获得显示RAM地址延时1ms写入相应数据数据显示完毕?结束YYNN图4-4显示子程序模块程序流程图39 基于单片机的公交报站系统设计程序如下:voidDisplay(void)//显示函数,把显示缓冲区的时间数据送到数码管显示{unsignedchari;w_12864(com_byte,0x92);for(i=0;i<10;i++){w_12864(dat_byte,TAB3[aucDisplayBuff[i]]);}}voidDisplayReady(void)//显示前的准备{if(ucClockStatu==RUNING)//如果时钟正在运行,就把显示数据送到显示缓冲区{aucDisplayBuff[1]=OldHour&0x0f;aucDisplayBuff[0]=OldHour>>4;aucDisplayBuff[5]=OldMinute&0x0f;aucDisplayBuff[4]=OldMinute>>4;aucDisplayBuff[9]=OldSecond&0x0f;aucDisplayBuff[8]=OldSecond>>4;}if(ucClockStatu==MODIFY_HOU)//如果时钟正在修改小时,就让小时数据闪烁显示{if(bFlagFlshTime){aucDisplayBuff[1]=OldHour&0x0f;aucDisplayBuff[0]=OldHour>>4;}else{convertChar(1,2,2);//hour}aucDisplayBuff[5]=OldMinute&0x0f;aucDisplayBuff[4]=OldMinute>>4;aucDisplayBuff[9]=OldSecond&0x0f;aucDisplayBuff[8]=OldSecond>>4;}elseif(ucClockStatu==MODIFY_MIN)//如果时钟正在修改分钟,就让分钟数据闪烁显示{if(bFlagFlshTime){aucDisplayBuff[5]=OldMinute&0x0f;aucDisplayBuff[4]=OldMinute>>4;}else39 基于单片机的公交报站系统设计{convertChar(1,4,2);}aucDisplayBuff[1]=OldHour&0x0f;aucDisplayBuff[0]=OldHour>>4;aucDisplayBuff[9]=OldSecond&0x0f;aucDisplayBuff[8]=OldSecond>>4;}elseif(ucClockStatu==MODIFY_SEC)//如果时钟正在修改秒,就让秒显示数据闪烁显示{if(bFlagFlshTime){aucDisplayBuff[9]=OldSecond&0x0f;aucDisplayBuff[8]=OldSecond>>4;}else{convertChar(1,6,2);}aucDisplayBuff[1]=OldHour&0x0f;aucDisplayBuff[0]=OldHour>>4;aucDisplayBuff[5]=OldMinute&0x0f;aucDisplayBuff[4]=OldMinute>>4;}}//定义时钟函数#ifndef_CLOCK_H_#define_CLOCK_H_#include
此文档下载收益归作者所有