毕业设计用纸
内容摘要
随着我国经济的飞速发展和城市化进程的加深,城市人口日益膨胀,机动车辆急剧增加,城市交通压力越来越大。发展公共交通事业是为居民提供安全有序的出行方式不可替代的途径,公共交通管理的高质量和公共服务水平的人性化是吸引居民采用公交出行的有效途径,是中国解决交通问题的重要措施。公交车报站系统是公共交通系统的一个重要的组成部分,设计先进的报站系统能为广大居民乘车提供优质的服务,提高公交系统的服务水平。
本设计主要研究的是基于AT89C51的公交车自动报站系统,以实现公交车的语音自动报站,即在进站、出站时候自动播报语音提示信息,同时利用LCD液晶屏进行站点信息显示。
本设计要求利用AT89C51作为主控芯片完成主控电路的设计,辅助电路要求包括语音电路、LCD显示电路、电源电路等。 本设计介绍基于AT89C51单片机实现自动报站功能,该系统能实够实现语音质量好,良好的显示站台信息和站点数,自动报站并及时更新等功能。
在附录中,本文还将给出一些重要的程序设计,供参考之用。
关键词:自动报站;AT89C51单片机;语音电路;LCD
共 39页 第 1页
毕业设计用纸
ABSTRACT
With the deepening of China's rapid economic development and urbanization, the urban population swelling, a sharp increase in motor vehicles, the increasing pressure of urban traffic. The development of public transport is an irreplaceable way to provide the residents with a safe and orderly way to travel, public transport management quality and the humanization of the level of public services is an effective way to attract residents using the bus travel is important for China to solve the traffic problems measures. The bus stop announcement system is an important part of the public transport system, the design of advanced stop system for the majority of residents traveling to provide quality services, to improve the transit system's service level.
The main study of this design is AT89C51-bus-based automatic stop announcement systems, in order to achieve the voice of the bus stop in the pit stop outbound time automatically broadcast a voice message, while taking advantage of the LCD screen to site information.
The design requirements by AT89C51 as the main chip to complete the design of the main control circuit, auxiliary circuit requirements include voice circuits, LCD display circuit, power circuit. This design introduces the automatic stop function, the system can be real enough to achieve good voice quality, good display site information and the number of sites, and automatically stop and promptly update the functionality based on AT89C51 microcontroller.
At the supplement, something like program code, dialogs etc will be written. It may be helpful for the future design.
KEY WORDS:SCM AT89S51, ISD1700speech chip, LCD
共 39页 第 2页
毕业设计用纸
目 录
第一章. 绪论 ............................................................. 1
1.1 公交报站系统的现状与发展方向 ..................................... 1 1.2 公交报站系统设计的意义 ........................................... 1 1.3 公交报站系统设计的任务及要求 ..................................... 1 1.4 公交报站系统设计研究内容 ......................................... 2 第二章.公交报站系统方案设计 .............................................. 2
2.1 公交报站系统设计思路 ............................................. 2 2.2 公交报站系统方案比较和选择 ....................................... 2
2.2.1 方案一 ..................................................... 2 2.2.2 方案二 ..................................................... 3 2.2.3 方案选择 ................................................... 3
第三章.公交报站系统硬件设计 .............................................. 5
3.1 主控电路设计 ..................................................... 5
3.1.1 AT89C51单片机的介绍 ........................................ 5 3.1.2 振荡器电路设计 ............................................. 7 3.1.3 复位电源电路设计 ........................................... 8 3.2 语音输出电路脉设计 .............................................. 10 3.3 LCD1602液晶显示电路设计 ........................................ 14
3.3.1 LCD液晶显示器件介绍 ....................................... 14 3.3.2 LCD液晶显示流程图 ......................................... 16 3.3.3 LCD1602液晶显示电路设计 ................................... 17
第四章 软件设计 ......................................................... 18
4.1 系统程序流程图 .................................................. 18 4.2 程序子函数模块代码 .............................................. 20 第五章 系统仿真与调试 ................................................... 25
5.1 系统的仿真 ...................................................... 25 5.2 系统调试 ........................................................ 27 结束语 .................................................................. 28 参考文献 ................................................................ 29 附录 程序清单 ........................................................... 30 致谢 ................................................................... 37
共 39页 第 3页
毕业设计用纸
第一章 绪 论
随着科学技术的日益发展和进步,城市化进程的加快,公共交通作为城市的基础设施之一,是绝大多出行者的首选交通方式。为了使得人们特别是为外来旅游、出差、就医、工作等急需了解本地的公交路线的人提供高效、方便、快捷的公交系统,使他们能够方便的获得自己所需要的各种信息,以此来减少各种不必要产生的交通流量,缓解交通压力,提高公交车的运作效率,由此公交车自动报站系统便得到了快速发展。在计算机还未普及之前公交车报站管理都是有工作人员人工报站的方式来操作的。随着社会的进步和计算机的快速发展,便有了公交车自动报站系统的出现。语音报站系统在公交车上的广泛使用,这在相当大的程度上免除了乘务人员沿途报站的麻烦,防止了错报、漏报,给许多不熟悉公交线路的乘客带来了方便。
1.1 公交报站系统的现状与发展方向
公交车报站器在公交事业中占有举足轻重的地位,它直接影响到公交车的服务质量。目前公交车报站有三种方式,一种是利用GPS全球卫星定位系统的公交车报站系统,在司机座位后面隔板上,安装了一台15英寸的液晶电视和 GPS信号接收器,安装了这套设备后,公交车在语音报站的同时,通过液晶电视还可以显示到站站名的字幕,这样如果没听清报站的话,通过显示屏,乘客也可以一目了然。当出现紧急情况时,调度中心将会给公交车发出相应的信息,以短信的形式传送到显示屏上,同时车载台会发出相应的提示音;驾驶员也可以通过相应的工具进行回复。目前在美国部分城市GPS卫星定位系统已经投入使用,国内也有此类产品的研制开发,其功能强大,系统稳定,但其投资昂贵,尤其是一些中小城市无法承受。另外两种是手动电子报站和人工报站的方式,而它们都离不开司务人员,加大司乘人员的工作强度。手动电子报站一般有司机或者乘务员控制,经常出现错报,误报的情况。城市公共交通是市民出行的主要交通工具之一。提供舒适,安全、便捷的乘车环境,对于公交企业来说,不仅是应尽的责任,亦是不断追求的目标。
1.2 公交报站系统设计的意义
近年来单片机技术迅猛发展,广泛应用于诸多领域,在公交事业上已经运用单片机来实现公交报站这项功能。但由于现在的公交车大部分还是采用的人工手动控制的报站器,这不但影响了公交司机的正常驾驶,分散了驾驶员的注意力,同时也加重了他的工作的负担。不过这相对于以前的人工报站已经有了大的提高,但同时由于人工控制就存在着差错,给人们的出行带来不便。 为了使大家的生活更加便捷,让公交车驾驶员的工作量能有效减轻,减少报站出错等的问题,故运用单片机技术、语音芯片技术、无线收发技术以及液晶显技术溶于一体设计出既能手动又能自动报站的公交语音自动报站系统,使每辆公交车都能准确无误的实现报站,让每位乘客准确知道自己的位置。
1.3 本设计的任务及要求
本设计主要设计一种用单片机设计公交车报站系统。利用AT89C51单片机控制语音芯片ISD1700语音芯片模块来控制播报站点信息,站点信息则通过LCD液晶屏显示出来。该设计可以模拟人声音进行报站和预报站;能准确报站,可及时更新。本设计要求利用AT89C51作为主控芯片完成主控电路的设计,辅助电路要求包括语音电路、LCD显示电路、电源电路等。
共37页 第4 页
毕业设计用纸
1.4 设计研究内容
根据对公交报站器的调研,本设计主要研究一种采用单片机来设计既能手动又能自动报站的公
交语音自动报站系统。此设计主要采用AT89C51单片机、LCD显示模块、ISD1700语音芯片来设计本公交报站系统。
共37页 第5 页
毕业设计用纸
第二章 系统方案设计
2.1 系统设计思路
本系统采用两种工作模式,分别为自动模式和手动模式。本次设计采用一个AT89C51单片机作为接收端的控制器。在每个站台上安装上无线发射装置,信号由无线发射头通过编码芯片不断向一定半径范围内发射无线信号。而公交车上则安装主体器件。包括LCD液晶显示模块、无线接收识别模块以及语音播报模块等。无线接收识别模块由无线接收头通过解码芯片解码接收到的信号。C51对无线接收模块的端口进行扫描,当公交车即将到站进入信号范围时,端口电平发生改变,C51识别到后先调用语音芯片内部播放指针,让其指向预置的数据段,并进行播报。同时改变LCD的显示内容,将下一站的站名进行更新。接着下车指示灯亮起,通知到站乘客下车。车子离站台后信号消失,指示灯熄灭。
2.2 系统方案比较和选择
2.2.1 方案一
公交车站自动报站器的设计,对车轮轴的转角的脉冲进行计数,将计数值与预置值对比,即可确定报站时刻,达到准确自动的目的。以AT89C51为主控芯片,对外来脉冲计数,结合语音芯片ISD1700输出语音。系统由脉冲检测、脉冲计数、CPU控制、控制信号、语音芯片、输出显示等组成。原理框图如图2-1所示。
语音芯片 音频播放电路 控制信号
CPU控制 输出显示 脉冲检测 脉冲计数 图2-1 原理框图
1. CPU控制:程序中将计数值于预置值进行比较,判断是否到站,当到站时就输出信号控制语言芯
片进行报站。
2. 控制按键:用于手动控制、手动调整、预置值的输入等。
3. 语言芯片:由专用语音芯片ISD1700组成,可擦写,便于在不同公交线上使用。 4. 输出显示:LCD液晶屏显示。
5. 预置存储:采用两种方式存储,一种是在烧写器上将数据写入,另一种是在车上,单片机处于输入状态,车辆行驶一遍,将站与站之间的脉冲数写入片内。
2.2.2 方案二
利用8031单片机作为CPU来进行总体控制,当汽车到达某站时,汽车司机通过键盘来控制本系
共37页 第6 页
毕业设计用纸
统进行工作,并且,系统将使用状态指示电路,向司机指示出当前的行驶方向及站号。原理图框图如图2-2所示。
语音合成电路 8031小系统 LED点阵显示电路 语音输入输出电路 键盘 状态指示电路 图2-2 原理框图
本系统使用8031作为CPU,由CPU去控制语音芯片,使系统在8031的控制下工作运行。当系统进行语音再生时,由CPU控制语音合成电路中的语音芯片来读取其外接的存储器内部的语音信息,并合成语音信号,再通过语音输出电路,进行语音报站和提示。CPU同时通过程序读取汉字信息,送入LCD屏显示电路来进行站点信息提示。当系统进行语音录制时,语音信号通过语音输入电路输入给语音合成电路中的语音合成芯片,由语音合成芯片进行数据处理,并将生成的数字语音信息存储到语音存储芯片中,从而建立语音库。
2.2.3 方案选择
将方案一与方案二进行比较,方案二是采用8031单片机控制,通过键盘来控制报站时刻,需要全人工员手动控制,比较繁琐。所以本课题决定选用方案一,它使用AT89C51作为主控制芯片,通过对里程的计数来控制报站时刻,无需人工控制,选用的语音芯片是美国ISD公司的ISD1700,该芯片与其它语音芯片相比较,其语音音质好,录放时间长。
共37页 第7 页
毕业设计用纸
第三章 系统硬件设计
3.1 主控电路设计
公交车报站系统主要由四个部分组成,即主控电路、显示电路、语音电路以及电源电路。
3.1.1 AT89C51单片机的介绍
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含有4K bytes的可反复擦写的只读程序存储器和128的随机存取数据存储器,器件采用AEMEL公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和FLASH存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。AT89C51的封装采用双列直插式封装(DIP),其外部含有40个引脚,如下图所示:
图3-1 AT89C51引脚图
VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据
共37页 第8 页
毕业设计用纸
/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 表3-1 端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
第二功能 RXD(串行输入口) TXD(串行输出口) INT0(外中断0) INT1(外部中断1) T0(定时/计数器0外部输入) T1(定时/计数器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器读选通) 3.1.2 振荡器电路设计
89系列单片机的内部振荡器电路如图3-2所示,由一个单级反相器组成。XTAL1为反相器的输
共37页 第9 页
毕业设计用纸
入,XTAL2为反相器的输出。可以利用它内部的振荡器产生时钟,只要在XTAL1和XTAL2引脚上外接一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,如图3-4示,此方法称为内部方式。
另一种使用方法如图3-3示,由外部时钟源提供一个时钟信号到XTAL1端输入,而XTAL2端浮空。在组成一个单片机应用系统时,多数采用图3-4所示的方法,这种方式的结构紧凑,成本低廉,可靠性高。 振荡器的等效电路如图3-4上部所示。在图中给出了外接元件,即外接晶体及电容C1,C2,并组成并联谐振电路。在电路中,对电容C1和C2的值要求不是很严格,如果用高质的晶振,则不管频率为多少,C1,C2通常都选择20nF。有时,在某些应用场合,为了降低成本,晶体振荡器可用陶瓷振荡器代替。如果使用陶瓷振荡器,则电容C1,C2的值取47pF。
内部定时 VCC Q2 D1 400 XTAL1
Q1 D2 /PD Q4 Q3 Rf XTAL2
图3-2 AT89C51单片机内部振荡器电路
NC 外部振荡信 号
CMOS门
XTAL2 VC/PD 内部定RGN89系列单XTAXTA石英晶体或
CCXTAL1 GND 图3-3 外部时钟接法 图3-4 片内振荡器等效电路
通常,在单片机中对所使用的振荡晶体的参数要求如下: ESR(等效串联电阻):根据所需频率按图3-6选取。 C0(并联电容):最大7.0pF。 CL(负载电容):30pF+3pF。
通常,其误差及温度变化的范围要按系统的要求来确定。
共37页 第10 页
毕业设计用纸
600 500 400 300 200 100
0 4 8 12 16
图3-5 ESR与频率的关系曲线
在本设计中,采用的是内部方式,即如图3-4所示,在XTAL1和XTAL2引脚上外接一个12MHZ的晶振及两个20nF的电容组成。
3.1.3 复位电源电路设计
89系列单片机与其他微处理器一样,在启动的时候都需要复位,使CPU及系统各部件处于确定的初始状态,并从初始状态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,则CPU就可以响应并将系统复位。
1、 手动复位
手动复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC的+5V电平就会直接加到RST端。由于人的动作很快也会使按钮保持接通达数十毫秒,所以,保证能满足复位的时间要求。手动复位的电路如图3-6所示。
Vcc 8.2k Vcc AT89C51 RST + 10uF GND
图3-6 手动复位电路
2、 上电复位
AT89C51的上电复位电路如图3-7所示,只要在RST复位输入引脚上接一电容至VCC端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,
共37页 第11 页
毕业设计用纸
而将外接电容减至1uF。
上电复位的过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平信号必须维持足够长的时间。
上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。
在图3-7的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“1”态。
如果系统在上电时得不到有效的复位,则在程序计数器PC中将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。 Vcc
8.2k Vcc 10uF + AT89C51 RST GND
图3-7 上电复位电路 3、 复位后寄存器的状态
当系统复位时,内部寄存器的状态如表3-1所列,即在SFRS中,除了端口锁存器、堆栈指针SP和串行口的SBUF外,其余的寄存器全部清0,端口锁存器的复位值为0FFH,堆栈指针值为07H,SBUF内为不定值。内部RAM的状态不受复位的影响,在系统上电时,RAM的内容是不定的。 专用寄存器 PC ACC PSW DPTR IP TMOD TL0 TL1 SBUF 复位值 0000H 00H 00H 0000H ×××00000B 00H 00H 00H 不定 专用寄存器 TCON B SP P0-P3 IE TH0 TH1 SCON PCON(CHMOS) 复位值 00H 00H 07H FFH 0××00000B 00H 00H 00H 0×××0000B 表3-2 各特殊功能寄存器的复位值
在本设计中复位电路采用的是上电复位,即如图3-7所示。
共37页 第12 页
毕业设计用纸
3.2 语音输出电路脉设计
ISD1700是华邦 ISD公司2007年新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示, 双运作模式,以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。 1、 特点:
(1)可录、放音十万次,存储内容可以断电保留一百年 (2)两种控制方式,两种录音输入方式,两种放音输出方式 (3)可处理多达 255 段以上信息 (4)有丰富多样的工作状态提示 (5)多种采样频率对应多种录放时间 (6)音质好,电压范围宽,应用灵活 2、电特性:
(1)工作电压: 2.4V-5.5V, 最高不能超过 6V (2)静态电流: 0.5 - 1 μA (3)工作电流: 20mA
图3-8 ISD1700引脚图
用户可利用震荡电阻来自定芯片的采样频率,从而决定芯片的录放时间和录放音质。芯片的采样率可以通过外部振荡电阻来调节: 采样频率(KHZ ) ROS阻值( KΩ ) 12 60 8 80 6.4 100 5.3 120 4 160 表3-3
3、独立按键工作模式
ISD1700的独立按键工作模式录放电路非常简单,而且功能强大。不仅有录、放功能,还有快
共37页 第13 页
毕业设计用纸
进、擦除、音量控制、直通放音和复位等功能。这些功能仅仅通过按键就可完成。
在按键模式工作时,芯片可以通过LED管脚给出信号来提示芯片的工作状态,并且伴随有提示音,用户也可自定4种提示音效。 录音操作:
按下REC键,/REC管脚电平变低后开始录音,直到松开按键使电平拉高或者芯片录满时结束。录音结束后,录音指针自动移向下一个有效地址。而放音指针则指向刚刚录完的那段语音地址。 放音操作 :
放音操作有两种模式,分别是边沿触发和电平触发,都由PLAY管脚触发。 快进操作:
点按一下FWD按钮将FWD端拉低,会启动快进操作。快进操作用来将播放指针移向下一段语音信息。当播放指针到达最后一段语音处时,再次快进,指针会返回到第一段语音。当下降沿来到FWD端时,快进操作还要决定于芯片当时的状态。 擦除操作:
擦除操作分为单段擦除和全体擦除两种擦除方式。 复位操作:
如果用RESET控制此管脚,建议RESET管脚与地之间连接 一个0.1μF电容。当RESET被触发,芯片将播放指针和录音指针都放置在最后一段语音信息的位置。 音量操作:
点按一下VOL键将VOL管脚拉低会改变音量大小。每按一下,音量会减小一档,再到达最小档后再按的话,会增加音量直到最大档,如此循环。总共有8个音量档供用户选择,每一档会改变4dB 。复位操作会将音量档放在默认位置,即最大音量。 FT 直通操作:
按住FT键将FT管脚持续保持在低电平会启动直通模式。出厂设定的是在芯片空闲状态,直通操作会将语音从Analn端直接通往喇叭端或AUD输出口。在录音期间按下FT键,会同时录下Analn进入的语音信号。 4、管脚功能说明:
管脚名称 VCCD /LED /RESET MISO MOSI SCLK /SS VSSA PDIP/SOIC1 2 3 4 5 6 7 8 TSOP管22 23 24 25 26 27 28 1 引脚说明 数字电路电源 LED 指示信号输出 芯片复位 SPI 接口的串行输出。 SPI 接口的数据输入端口。 SPI 接口的时钟。 为低时,开启 SPI 接口。 模拟地 共37页 第14 页
毕业设计用纸
9 MIC+ MIC- VSSP2 SP- VCCP SP+ VSSP1 AUD/AUX AGC /VOL ROSC VCCA /FT /PLAY /REC /ERASE /FWD RDY / INT VSSD 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 芯片录音或直通时,辅助的模拟输入。 麦克风输入 + 麦克风输入 - 负极 PWM 喇叭驱动器地 喇叭输出 - PWM 喇叭驱动器电源 喇叭输出 + 正极 PWM 喇叭驱动器地 辅助输出,用来输出一个 AUD 或 AUX 自动增益控制 音量控制 振荡电阻,决定芯片的采样频率 模拟电路电源 在独立芯片模式下,当 FT 一直为低, 播放控制端 录音控制端 擦除控制端 快进控制端 一个开路输出。 数字地 AnaIn
3.3 LCD1602液晶显示电路设计
3.3.1 LCD液晶显示器件介绍
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,市面上字符液晶绝大多数是基于HD44780液晶芯片,HD44780是带西文字库的液晶显示控制器,用户只需要向HD44780送ASCII的字符码,HD44780就按照内置的ROM点阵发生器自动在LCD液晶显示器上显示出来。所以,HD44780主要适用于显示西文ASCII字符内容的液晶显示。
1602字符型LCD能够同时显示16*2即32个字符(16列2行)。其内置192种字符(160个5*7点阵字符和32个5*10点阵字符),具有64个字节的自定义字符RAM,可自定义8个5*8点阵字符
共37页 第15 页
毕业设计用纸
或4个5*11点阵字符。
1602通常有14条引脚线或16条引脚线两种,多出来的2条线是背光电源线和地线,带背光的比不带背光的略厚,控制原理与14脚的LCD完全一样,是否带背光在应用中并无差别。本设计中采用带背光14引脚线的。其主要技术参数为:
图3-9 LCD1602引脚图
VSS:电源地(GND)。 VDD:电源电压(5V)。
VEE:LCD驱动电压,液晶显示器对比度调整端。使用时可以通过一个10K的电位器调整对比度,接正电源时对比度最弱,接地电源时对比度最高。
RS:寄存器选择输入端,选择模块内部寄存器类型信号。RS=0,进行写模块操作时指向指令寄存器,进行读模块操作时指向地址计数器。RS=1,无论进行读操作还是写操作均指向数据寄存器。
R/W:读写控制输入端,选择读/写模块操作信号。R/W=0,读操作;R/W=1,写操作。本设计中只需往LCD里写数据即可,写时序见图3-4。
E:使能信号输入端。读操作时,高电平有效;写操作时,下降沿有效
DB0~DB7:数据输入/输出口,单片机与模块之间的数据传送通道。选择4位方式通讯时,不使用DB0~DB3。
1602模块内部主要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。控制器接受来自MPU的指令和数据,控制着整个模块的工作。主要由显示数据缓冲区DDRAM,字符发生器CGROM,字符发生器CGRAM,指令寄存器IR,地址寄存器DR,忙标志BF,地址计数器AC以及时序发生电路组成。
模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制端与MPU接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线接受MPU发来的数据和指令,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。控制器还可以根据MPU的指令,实现字符的显示,闪烁和移位等显示效果。
CGROM内提供的是内置字符码,CGRAM则是供用户存储自定义的点阵图形字符。模块字符在LCD显示屏上的显示位置与该字符的字符代码在显示缓冲区DDRAM内的存储地址一一对应。
LCD1602模块内部具有两个8位寄存器:指令寄存器IR和地址寄存器DR,用户可以通过RS和R/W输入信号的组合选择指定的寄存器,进行相应的操作。
共37页 第16 页
毕业设计用纸
R/W 0 1 0 1 操 作 将DB0~DB7的指令代码写入指令寄存器IR中 分别将状态标志BF和地址计数器AC内容读到DB7和DB6~DB0 将DB0~DB7的数据写入数据寄存器中,模块的内部操作将数据写到DDRAM或者CGRAM中的数据送入数据寄存器中 将数据寄存器内的数据读到DB0~DB7,模块的内部操作自动将DDRAM或者CGRAM中的数据送入数据寄存器中 RS 0 0 1 1 表3-5 寄存器选择组合
1602提供了较为丰富的指令设置,通过选择相应的指令设置,用户可以实现多种字符显示样式。下面仅简要介绍本次设计中需要用到的一些指令设置。 清屏指令 Clear display
清显示指令将空位字符码20H送入全部DDRAM地址中,时DDRAM中的内容全部清除,显示消失,地址计数器AC=0,自动增一模式。显示归位,光标闪烁回到原点(显示屏左上角),但不改变移位设置模式。清屏指令码见表3-6。 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 表3-6 清屏指令码
进入模式设置指令 Entry mode set
见表3-7,进入模式设置指令用于设定光标移动方向和整体显示是否移动。 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D S 表3-7 模式设置指令码
显示开关控制指令 Display on/off control
指令码见表3-8,该指令功能为控制整体显示开关,光标显示开关和光标闪烁开关。 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 D C B 表3-8 显示开关控制指令码
D:显示开/关标志。D=1,开显示;D=0,关显示。
关显示后,显示数据仍保持在DDRAM中,开显示即可再现。
C:光标显示控制标志。C=1,光标显示;C=0,光标不显示。不显示光标并不影响模块其他显示功能。显示5*8点阵字体时,光标在第八行显示;显示5*10点阵字符时,光标在第11行显示。
B:闪烁显示控制标志。B=1,光标所在位置会交替显示全黑点阵和显示字符,产生闪烁效果;B=0,光标不闪烁。
功能设置指令 Function set
功能设置指令用于设置接口数据位数,显示行数以及字形。指令码见表3-9。
共37页 第17 页
毕业设计用纸
DB7 0 DB6 0 DB5 1 DB4 DL DB3 N DB2 F DB1 * DB0 * RS R/W 0 0 表3-9 功能设置指令码
DL:数据接口宽度标志。DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,DB3~DB0不使用,此方式传送数据需分两次进行。
1602模块内部设有上电自动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。初始化大约持续10ms左右。
但是需要特别注意的是,倘若供电电源达不到要求,模块内部复位电路无法正常工作,上电复位初始化就会失败。因此,最好在系统初始化时通过指令设置对模块进行手动初始化。
3.3.2 LCD液晶显示流程图
LCD液晶显示是通过调用初始化程序,写数据子程序,写指令子程序,地址转换子程序,读忙状态子程序以及延时子程序组合。具体如下: 调用忙子程序 调用延时子程序 LCD写指令子程序 启动写数据
清屏 读写线置0
LCD写指令子程序
启动使能控制线
调用延时子程序 传输数据 设定方向及位移
调用延时子程序
LCD写指令子程序
返回
调用延时子程序
图3.10 写数据子程序流程图
LCD主要负责将各个站台的名称显示出来,首先由CPU中央处理器调用延时子程序,然后传入
LCD,LCD首先清屏,清屏结束后LCD读取写指令子程序,并调用延时子程序,将方向和位移存入LCD,再利用LCD显示出来,在汽车运行过程中,会出现忙碌状态,汽车上会有自动提醒系统,首先由CPU写入忙碌时报警的程序,再由LCD显示出来,
返回 共37页 第18 页
毕业设计用纸
3.3.3 LCD1602液晶显示电路设计
图3.11 LCD1602液晶显示电路设计
程序存入AT89C51单片机系统,汽车会根据行驶的路程方向等条件判别到了哪个站,然后单
片机读取相对应的子程序传入LCD,LCD会显示相应的站台,并提示下一站的名字
共37页 第19 页
毕业设计用纸
第四章 软件设计
4.1 系统程序流程图
图4-1 系统程序流程图
首先打开程序,程序自动显示下一站的名称,由公交司机确定采用自动还是手动程序,如果采
用自动模式,由无线接收扫描是否到站,如果确定到站,则语音播报当前到站信息,LCD显示更新下一站的信息,同时下车指示灯亮,规定时间结束后,程序跳转到运行模式,再重复之前的步骤,若采用手动模式,那就由司机确定站台名称,并按下按键,出现语音播报,液晶显示还有下车指示灯亮,确定下车指示灯灭的情况下重复运行模式。
4.2程序子函数模块代码
①按键扫描驱动
共37页 第20 页
毕业设计用纸
该模块为语音芯片内部集成模块。 ②无线接收端扫描函数
该函数采用while语句判断P31端口是否出现下降沿,如果出现下降沿则往下执行,如果没有则等待。
while(P31); delay();
③红外发射模块(实验室演示用) void send() {
re=0;
TMOD=0x02; EA=1; TH0=0xf3; TL0=0xf3; ET0=1; }…………
void ttl(void)interrupt 1 {
re=~re; }
通过设定采用定时器/计数器0以方式2工作。定时/计数方式2是将两个8位计数器THx、TLx分成独立的两部分,组成一个8位可自动再装入的定时器/计数器。由TLx作为8位计数器,THx作为计数初值寄存器,设置初值时同时送THx和TLx,启动后,当TLx计数满回0产生溢出,不仅置为TFx,向主机请求中断,并且控制THx中的初值重新装入TLx中,继续下一轮计数。通过软件只需设置一次初值,启动后可连续无限次定时/计数运行,上一次计数结束,立即继续下一次,中间不会丢失计数信号。重新再装入将不影响THx的内容[7]。
系统采用12MHz晶振,时钟周期为1/12 us,机器周期则为1us。中断计数时间为(FF-F3)*2*1us=12us。如果忽略指令的执行时间,那么re的电平改变周期为24us。发射频率为1/24us≈41.7KHz。
④语音模块
该模块采用单片机端口输出负脉冲信号模拟按键信号对语音芯片进行控制。 P24=0; delay(); P24=1; delay(); 16P25=0; delay(); P25=1;
本模块程序流程如图4-3
共37页 第21 页
毕业设计用纸
接收到信号 P24输出一个负脉冲,语音芯片内部指针指向本站点语音段头 P25输出一个负脉冲,播放当前指针指向的语音段 结束
图4-2语音芯片运行流程
语音芯片接收到信号,24管脚输出一个负脉冲,语音芯片内部指针指向本站点语音段头,25管脚输出一个负脉冲,播放当前指针指向的语音段,然后结束语音播报 ⑤液晶显示模块
1、内部等待函数LCD_Wait(void) unsigned char LCD_Wait(void) {
LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_();
while(DBPort&0x80); LcdEn=0;
return DBPort; }
2、向LCD写入命令或数据子函数LCD_Write()
void LCD_Write(bit style,unsigned char input) {
LcdEn=0; LcdRs=style;
LcdRw=0; _nop_(); DBPort=input; _nop_(); LcdEn=1; _nop_(); LcdEn=0; _nop_(); LCD_Wait();
共37页 第22 页
毕业设计用纸
}
3、设置显示模式子函数LCD_SetDisplay()
该函数可以根据表3-2设置显示的开关、光标的有无、光标是否闪动。 void LCD_SetDisplay(unsigned char DisplayMode) {
LCD_Write(LCD_COMMAND,0x08|DisplayMode); }
4、设置输入模式子函数LCD_SetInput()
该函数可根据表3-2设置画面是否平移以及平移的方向。 void LCD_SetInput(unsigned char InputMode) {
LCD_Write(LCD_COMMAND,0x04|InputMode); }
5、初始化LCD子函数LCD_Initial() void LCD_Initial() {
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); }
6、显示定位子函数GotoXY()
void GotoXY(unsigned char x,unsigned char y) {
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x); if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40)); }
7、显示字符子函数Print()
void Print(unsigned char*str) {
while(*str!='\\0') {
LCD_Write(LCD_DATA,*str); str++;delay1(); } }
⑥站点信息设置及调用
用数组定义站点信息字符串: uchar code dis1[]=\"A zhan\"; uchar code dis2[]=\"B zhan \";
共37页 第23 页
毕业设计用纸
uchar code dis3[]=\"C zhan \"; uchar code dis4[]=\"D zhan \"; uchar code dis5[]=\"E zhan \"; uchar*p;
用case语句判断要显示的站点 switch(i)19 {
case 0:{p=dis1;}break; case 1:{p=dis2;}break; case 2:{p=dis3;}break; case 3:{p=dis4;}break; case 4:{p=dis5;}break; };
共37页 第24 页
毕业设计用纸
第五章 系统仿真与结果
5.1 系统的仿真
经过使用proteus软件的画电路仿真图结合keil c 软件的编写程序,最终系统的简单仿真出来了。
图5-1 系统初始化
图5-2 接到信号后
共37页 第25 页
毕业设计用纸
图5-3 语音报站
图5-4 到站门开
共37页 第26 页
毕业设计用纸
图5-5 车子离开
由仿真图可以看出,当程序下载至C51单片机中后即可运行电路仿真图,开始运行,当系统接收到信号后D2亮,语音芯片下移一位,此时D3灯亮,进行语音报站,LCD液晶屏显示下一站点信息。到站时指示灯D1亮,车子离站后指示灯灭。
5.2 电路调试
按照上面的步骤,系统在正常的情况下安装并焊接完成。在调试前,先检测系统的VCC和GND
之间是否短路和断路现象,如果有,用万用表检查故障原因并维修好,直接把故障消除。然后按照设计结构电路分别对各个电路结构进行检测。
1)前工序做好以后,接上+5V的电源,观察电源指示灯是否正常。如果正常点亮,则说明电源部分正常,否则检测电源电路故障,直到电源指示灯正常点亮。
2)单片机控制电路、液晶显示器、按键部分。接上电源,将单片机下载好编写的程序,再根据系统的控制要求对各部分进行检测,检测要求包括AT89S51单片机正常工作、时间和温度的显示是否正常、按键的控制是否符合电路的控制要求。
3)语音电路的检测:在接通电源的情况下,接上扬声器,芯片录音时,将REC键按下,并录好音,再按下PLAY键,观察录好的音是否能够播放,如果能播放,再按下VOL键看看能否调节音量,能够调节,则说明电路正常。如果不能播放和调节音量,则应该维修电路,直到正常为止。
对以上各个部分调节好以后。至此,系统的整个过程结束。否则,要对其相应的部分做维修处理,直到一切正常为止。
共37页 第27 页
毕业设计用纸
结束语
经过一个多月的奋战,我的毕业设计公交车自动报站系统,终于即将完成了。最终系统实现了自动报站功能。通过这次论文设计让我对AT89C51单片机和一些陌生的器件LCD1602液晶芯片和ISD1700语音芯片有了一定熟知和了解。
该设计的创新之处在于它应用89C51单片机的高速计数器端口进行脉冲计数,以距离来控制报站时刻。本系统功能强大,成本低,系统稳定,无需人工介入,语音音质好,很好的实现了车辆报站的自动化,具有很强的实用性。此次设计的公交车自动报站器初始值存入的方式是在车上,单片机处于输入状态,车辆行驶一遍,将站与站之间的脉冲数写入片内,该方式在公交车改变路线时便于修改。系统选用ISD1700语音芯片,它的录音数据被存放方法是通过ISD多级存储专利技术实现的,用声音和声频信号的自然形式直接存放在故态存储器,从而提供高质量回放语音的保真度,使得该系统与其他语音报站系统相比较,语音质量较好。但是,本设计仍然存在的许多的不足之处,比如它在报站时刻上不能十分的精确,存在一定的误差,还有就是所用的LCD液晶屏只能够显示32为字符但不能显示汉字。这些问题都需要在今后的研究工作中加以改进,使系统更完善,更好的为人们服务。
共37页 第28 页
毕业设计用纸
参考文献
[1] 唐颖.单片机原理与应用及C51程序设计[M]. 北京: 北京大学出版社,2008. [2] 李建忠.单片机原理与应用[M]. 西安: 西安电子科技大学出版社,2004. [3] 胡辉.单片机原理与应用[M]. 北京: 中国水利水电出版社,2007.
[4] 周波.公交车自动报站系统的设计[J]. 四川理工学院学报: 自然科学版,2008. [5] 李学军.如何用MCS-51单片机扩展串口进行通讯[J]. 宁夏机械,2003,(2). [6] 潘新民,王燕芳.微型计算机控制技术.[M] 北京: 电子工业出版社,2007. [7] 杜志强,魏秉国.单片机原理及应用[M]. 北京: 郑州大学出版社,2007.. [8] 谭浩强 .C程序设计(第三版)[M]. 北京: 清华大学出版社,2007.
[9] 常通义.微型计算机原理与接口技术(第二版)[M]. 华中科技大学出版社,2009. [10] 董晓红.单片机原理及接口技术[M]. 西安电子科技大学出版社,2004. [11] 郭培源.电子电路及电子器件[M]. 高等教育出版社,2008. [12] 石生.电路基本分析[M]. 高等教育出版社,2008. [13] 徐熙文.电路基础[M]. 北京: 高等教育出版社,2007.
共37页 第29 页
毕业设计用纸
附录:程序清单
(1)LCD1602头文件程序 #include LcdEn=0; return DBPort; } #define LCD_COMMAND 0 #define LCD_DATA 1 #define LCD_CLEAR_SCREEN 0x01 #define LCD_HOMING 0x02 void LCD_Write(bit style,unsigned char input) { LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_(); 共37页 第30 页 毕业设计用纸 LcdEn=1; _nop_(); LcdEn=0; _nop_(); LCD_Wait(); } #define LCD_SHOW 0x04 #define LCD_HIDE 0x00 #define LCD_CURSOR 0x02 #define LCD_NO_CURSOR 0x00 #define LCD_FLASH 0x01 #define LCD_NO_FLASH 0x00 void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND,0x08|DisplayMode); } #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 #define LCD_MOVE 0x01 #define LCD_NO_MOVE 0x00 void LCD_SetInput(unsigned char InputMode) { LCD_Write(LCD_COMMAND,0x04|InputMode); } void LCD_Initial() {LcdEn=0; LCD_Write(LCD_COMMAND,0x38); LCD_Write(LCD_COMMAND,0x38); 共37页 第31 页 毕业设计用纸 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); } void GotoXY(unsigned char x,unsigned char y) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } void Print(unsigned char*str) { while(*str!='\\0') { LCD_Write(LCD_DATA,*str); str++; } } (2)主程序清单 #include\"AT89X52.H\" #include\"LCD1602.h\" #define uchar unsigned char sbit beep=P3^4; sbit P31=P3^1; sbit P24=P2^4; sbit P25=P2^5; sbit led=P1^0; 共37页 第32 页 毕业设计用纸 sbit re=P3^0; //sbit reset=P3^4; char i; uchar code dis0[]=\"busstation\"; uchar code dis1[]=\"A zhan \"; uchar code dis2[]=\"B zhan \"; uchar code dis3[]=\"C zhan \"; uchar code dis4[]=\"D zhan \"; uchar code dis5[]=\"E z han \"; uchar *p; uchar *p0; void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i for(i=0;i<255;i++) for(j=0;j<120;j++); } void send() { re=0; TMOD=0x02; EA=1; 共37页 第33 页 毕业设计用纸 TH0=0xf3; TL0=0xf3; ET0=1; } main() { LCD_Initial(); GotoXY(0,0); Print(\"Now:\"); GotoXY(0,1); Print(\"Next:\"); i=0; GotoXY(5,0); Print(dis0); p=dis1; GotoXY(6,1); Print(dis1); delay(); beep=1; delay(); delay(); delay(); beep=0; P31=1; send(); TR0=1; while(1) { 共37页 第34 页 毕业设计用纸 Delay1ms(300); while(P31); delay(); P24=0; delay(); P24=1; delay(); P25=0; delay(); P25=1; if(i==5) {i=0;} else {i++;} switch(i) { case 0:{p0=dis0;p=dis1;}break; case 1:{p0=dis1;p=dis2;}break; case 2:{p0=dis2;p=dis3;}break; case 3:{p0=dis3;p=dis4;}break; case 4:{p0=dis4;p=dis5;}break; }; GotoXY(5,0); Print(p0); GotoXY(6,1); Print(p); delay(); beep=1; 共37页 第35 页 毕业设计用纸 delay(); delay(); delay(); beep=0; while(!P31) { delay(); led=0; } led=1; delay(); } } void ttl(void)interrupt 1 { re=~re; } 共37页 第36 页 毕业设计用纸 致谢 毕业设计暂告收尾,这也意味着我大学的三年的学习生活既将结束。回首既往,自己一生最宝贵的时光能在这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这三年的时间里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的 在本次设计过程中首先要感谢我们的麻丽娟老师的悉心指导,她渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。没有麻老师的辛勤栽培、孜孜教诲,就没有我论文的顺利完成。在这里我表示衷心的感谢。 本次毕业设计的也得到了肖金、袁敏等同学的热情帮助。感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在设计的每一个阶段,我们都是团结合作,互帮互助,正因为这样,我们的毕业设计才能够很顺利的完成。 最后要感谢的是我的父母,他们不仅培养了我对中国传统文化的浓厚的兴趣,让我在漫长的人生旅途中使心灵有了虔敬的归依,而且也为我能够顺利的完成毕业论文提供了巨大的支持与帮助。在未来的日子里,我会更加努力的学习和工作,不辜负父母对我的殷殷期望!我一定会好好孝敬和报答他们! 感谢所有关心、支持、帮助过我的良师益友。 共37页 第37 页 因篇幅问题不能全部显示,请点此查看更多更全内容