您好, 访客   登录/注册

基于51单片机的可视可听公交车自动报站系统的设计与实现

来源:用户上传      作者:方杰 胡春雷

  摘要:当今社会公交车成为一种必不可少的交通工具,公交车报站器在公交事业中占有举足轻重的地位,它直接影响到公交车的服务质量。介绍了一种可视/可听公交车自动报站系统的设计,以AT89S52单片机为核心,通过8255芯片扩展外围接口,采用ISD4003语音芯片进行语音播放,同时使用LED点阵电路进行汉字显示,实现了公交车的语音自动报站以及汉字显示提示的功能。经过实际测试,报站系统运行稳定,抗干扰能力强,并且操作簡便,成本低廉,适合于公交车领域的普遍应用推广。
  关键词:AT89S52;8255A;LED显示;语音报站;ISD4003
  中图分类号:TP393      文献标识码:A      文章编号:1009-3044(2019)02-0221-03
  The Visible and Audible Bus Automatic Reporting Station System Design and Implementation Based on MCS-51 MCU
  FANG Jie,HU Chun-lei
  (AnHui Vocational And Technical College, Hefei 230011,China)
  Abstract: Nowadays, public bus has become an indispensable means of transport. The bus station is in the public transport industry occupies a pivotal position, it directly affects the quality of service of the bus. This paper introduces a Visible and audible bus automatic report station system design, by AT89S52 microcontroller as the core, through the 8255 chip expansion peripheral interface, the ISD4003 voice chip for voice playback, also use circuit of LED dot matrix Chinese character display, achieve hint as to the function of bus voice automatic newspaper station and Chinese character display. Through the actual test, the newspaper station system has stable operation, strong anti-interference ability, and simple operation, low cost, suitable for the general application in the field of public transport.
  Key words: AT89S52;8255A;LED display; Reporting station;ISD4003
  1 引言
  公共汽车为外出的人们提供了方便快捷的服务,而公共汽车的报站及显示就直接影响服务的质量。近年来,随着科学技术的日益发展和进步,单片机技术已经在许多领域得到了广泛的应用[1]。在声学领域,微机技术与各种语音芯片相结合[2],即可完成语音的合成技术,使得汽车报站器的实现成为可能。同时,单片机与点阵式显示器的结合,完成了汉字显示的功能[3][4],从而为市民提供了更加人性化的服务。鉴于公交车报站系统的广泛应用,并结合公交车辆的使用特点及实际营运环境,我们设计了一种由单片机控制的公交车自动报站系统。本文通过设计一个实际的可视/可听公交车自动报站系统,详细地介绍了MCS-51单片机控制语音报站和汉字显示的全过程,从软件设计方面来说,更加熟悉了51单片机的指令及单片机C语音程序设计。从硬件电路设计方面来说,实现了用8255并行接口芯片扩展单片机输入输出口,解决了如何与语音芯片连接以及怎样解决电源抗干扰等问题。
  2 系统总体设计思想
  一个单片机应用系统的设计,往往既包括硬件设计又包括软件设计[5][6]。单片机应用系统的软件和硬件之间有密切的相互制约的联系。下面将对本系统的软硬件设计思想进行简单的介绍。
  2.1系统硬件设计思想
  MCS-51系列单片机产品有8051,8031,8751等型号,考虑到系统程序的稍大,本系统选择ATMEL公司的具有8K程序存储空间的AT89S52单片机作为主控芯片。本系统主要完成汉字显示和语音报站功能,还要与司机进行交互,因此还要包括键盘模块。
  由于MCS-51系列单片机只有4个8位的并行I/O端口,P0与P2分别作为单片机寻址外部存储器的低8位和高8位地址。P0口作为地址/数据分时复用口。P3口具有第二功能,为系统提供一些控制信号。对于本系统来说,单片机的并行口是远远不够的,必须进行扩展。本文使用并行可编程接口8255来扩展单片机的并行口,用于汉字显示的行选。由于需要16位行选,故需要使用8255两个并行口,本文设计使用A口和B口。汉字显示的列选由P1口的低4位通过4-16译码器芯片74LS154来控制。P1口的其他引脚用于与ISD4003进行连接,以与语音芯片进行通信。考虑到本系统按键不多,所以直接用P2口作为按键输入,而未采用矩阵式键盘电路。单片机与外围芯片连接情况如图1所示。   2.2 系统软件设计思想
  本系统实现的主要功能是语音报站和汉字显示,在公交车进出站时播放相应的语音及显示相应的信息以提醒乘客。系统软件设计采用模块化结构。整个系统程序由主程序、键盘扫描、键盘处理、汉字显示、数据块选择、数据传送、语音报站等个子模块组成,如图2所示。
  (1) 键盘扫描:
  传统的键盘扫描程序一般分为两种扫描方式:一种是循环扫描方式,另一种是中断扫描方式,这两种键盘扫描方式都占用一定的CPU时间。本文設计的键盘扫描程序,通过利用主程序的执行来达到延时消抖目的,主程序每执行一次就调用一次键盘扫描程序,键盘扫描程序将本次获得键值与上次的键值进行比较,若相等则让计数器加一,当计数器累加到一定值时(例如30)则认为该键值对应的键的确被按下,完成按键扫描。这种键盘扫描方式不占用CPU时间,可以使单片机的工作效率更高。
  (2)数据传送:
  为了实现汉字的动态移动显示,我们将汉字的字型码放在一个数组中,并定义一个大小为32字节的显示缓冲区,数据传送程序就只负责完成将字码往显示缓冲区里送,每间隔一定时间将更新显示缓冲区中的内容,从而使点阵显示新的内容。具体的显示由定时中断服务子程序来完成,这样可以使显示程序不仅不占用CPU时间,还可与其他程序并行工作而互不干扰,从而使显示更加稳定,显示的效果更好。
  (3)汉字显示:
  此模块采用一片8255芯片,将其并行接口的输出信号作为行选,将一片74LS154译码器的输出作为列选,用单片机P1口的低四位作为74LS154的输入,用P1.6作为74LS154的选通信号。定时中断服务程序负责从显示缓冲区往8255送数据从而使点阵显示相应的汉字[2][3],由于显示缓冲区中的内容是有规律的不断更新的,从而能够用四片8×8点阵式LED实现汉字的滚动显示。
  (4)键盘处理:
  对键盘扫描程序所得到的键值进行判断,确定哪个键按下,从而执行相应的按键处理子程序。例如若是报站键按下,则调用报站子程序进行语音报站。
  (5)数据块选择:
  根据报站计数器的值来选择对应的数据块,使数据传送程序能够从指定的数据块传送数据,为显示程序准备好数据。
  (6)语音报站:
  各站的报站语音是事先通过录音程序录进ISD4003的指定地址的,语音报站子程序是根据全局变量count(报站计数器)的值去取相应的语音地址,当按下报站键、快退键将会改变count的值,count的每个值都对应一个放音的地址,由该地址来组成16位从指定地址放音的指令,该指令再由单片机发往语音芯片,从而使语音芯片播放相应的语音。
  3 系统程序设计
  本系统单片机程序设计采用的是C语言并结合汇编语言,其中汉字显示部分采用定时中断方式,主程序完成中断准备工作并进行按键扫描和处理。
  3.1 主程序设计
  系统软件设计采用模块化结构[7]。主程序由键盘扫描程序、键盘处理程序、数据块选择程序、数据传输程序组成。具体的主程序流程图见图3所示。
  3.2按键扫描程序
  在设计键盘扫描程序时,我们通过利用主程序的执行来达到延时消抖的目的,在键盘扫描程序中我们用了3个全局变量,分别是kbuf,kcnt和kval。kbuf用于存放每次扫描时得到的键值,kcnt用于对kbuf进行计数,kval用于存放最终确定的键值。主程序每执行一次就调用一次键盘扫描程序,在键盘扫描程序中将本次获得键值与上次kbuf中的键值进行比较,若相等则使kcnt加1,否则把新的键值送入kbuf中,并将kcnt清零。若当kcnt累加到一定数值,例如累加到30时,则此时可认为某键的确按下了,此时将kbuf中的值送入kval中,以完成按键扫描。具体的键盘扫描程序流程图如图4所示。这种键盘扫描方式不占用CPU时间,可以使单片机的工作效率更高。
  3.3按键处理程序
  对键盘扫描程序所得到的键值进行判断,确定哪个键按下,从而执行相应的按键处理子程序。若是报站键按下,则调用报站子程序进行语音报站;若是上下行切换键按下,则进行上下行切换处理;若是快退键按下,则调用快退处理程序;若是文明用语键按下,则发送相应的语音指令使ISD4003播放相应的语音。具体的按键处理程序流程图如图5所示。
  3.4语音报站程序
  语音报站程序:各站的报站语音是事先通过录音程序录进ISD4003的指定地址的,语音报站子程序是根据全局变量count(报站计数器)的值去取相应的语音地址,当按下报站键、快退键将会改变count 的值,count的每个值都对应一个放音的地址,由该地址来组成16位从指定地址放音的指令,该指令再由单片机发往语音芯片,从而使语音芯片放相应的语音。具体的报站程序流程图见图6所示。
  3.5数据块选择程序
  系统定义了一个指示数据块起始地址的指针和一个表示数据块大小的全局变量,数据块传送程序根据报站计数器的值来给该指针及变量赋相应的值,使数据传送程序能够从指定的数据块传送数据,为显示程序准备好数据。
  4  结束语
  本文介绍了一种公交车自动报站系统的设计方案,利用89S52单片机作为CPU来进行总体控制,通过语音控制电路操作ISD4003语音芯片进行各种提示语音的播放和录制,同时使用LED点阵进行汉字显示,在系统设计过程中,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,使硬件在软件的控制下协调运作,最终实现了一种可视可听的城市公交车的语音自动报站系统。经过实际测试,报站系统运行稳定,抗干扰能力强,并且操作简便,成本低廉,适合于公交车领域的普遍应用推广。
  参考文献:
  [1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996(3).
  [2] 刘永平. 基于SPI总线的PIC与ISD4003语音接口电路[J].微计算机信息,2006(26).
  [3] 丰焕亭. 基于Proteus的LED汉字显示屏设计[J].中国科技信息,2011(21).
  [4] 李高.  16×16点阵的制作[J]. 电子制作,2008(02).
  [5] 王庆利等.单片机设计案例实践教程[M].北京:北京邮电大学出版社,2008(7).
  [6] 张弥左等.微型计算机接口技术[M].北京:机械工业出版社,2004(8).
  [7] 陈光东.单片微型计算机原理及其C语言程序设计[M].武汉:华中科技大学出版社,2004.
转载注明来源:https://www.xzbu.com/8/view-15270482.htm