基于单片机的公交车自动报站系统毕业论文

发布时间:2020-04-05 02:26:04   来源:文档文库   
字号:

基于单片机的公交车自动报站系统毕业论文

第一章 1

1.1 本课题的研究意义 1

1.2 目前几种公交车报站器详细比较 1

1.2.1 GPS公交车自动报站器 1

1.2.2 手动式公交车自动报站器 1

1.2.3 基于单片机的公交车自动报站系统 2

第二章 系统方案的确定 3

2.1 系统主要要实现的功能 3

2.2 无线传输模块的选择 3

2.3 控制模块的选择 3

2.4 液晶显示模块及语音模块的选择 3

2.5系统整体硬件电路的确定 3

第三章 系统功能模块详细介绍 5

3.1 单片机AT89C51 5

3.1.1 管脚说明 7

3.1.2 外部晶振的选择 8

3.1.3 复位电路 8

3.1.4 按键电路设计 9

3.2 无线收发模块PT2262/PT2272 10

3.2.1 PT2262/PT2272引脚图 10

3.2.2 PT2262/2272接线图以及工作原理 12

3.2.3 无线数传模块F05V/J05V 13

3.3 显示模块LCD1602 14

3.3.1 排阻Respack-8 14

3.3.2 LCD1602的引脚定义 14

3.3.3 液晶LCD1602常用的11条指令 16

3.4 语音模块ISD4004 18

3.5 蜂鸣器和LED指示灯 20

第四章 系统程序设计 21

4.1 系统仿真主程序流程图 21

4.2 程序子函数模块 22

4.2.1 延时函数 22

4.2.2 检查忙函数 22

4.2.3 写指令函数 22

4.2.4 写数据函数 23

4.2.5 光标位置函数 23

4.2.6 初始化函数 23

4.2.7 其他数组定义以及端口定义 23

4.3 主程序流程图 24

第五章 系统仿真实现 28

5.1 开发环境KeilC51介绍 28

5.2 仿真环境PROTEUS介绍 28

5.3 仿真运行结果截图 28

5.4 仿真结果 29

31

33

参考文献 34

附录A 系统仿真全部代码 35



第一章

1.1 本课题的研究意义

近些年来,随着城市人口的不断增加,人们生活节奏的不断加快,公交车在大城市以及中小城市已经普及,并且有了日新月异的发展,在人民生活中起着重要作用,因此,公交车的正常运行与人们的正常生活息息相关。传统公交车报站大多是由乘务人员来人工报站,但是因为方言的差异或者人多时语音嘈杂,这种方式不利于人民生活的和谐。所以根据这种需要市面上产生流行了多种公交车报站器也方便人们的生活。

目前虽然现在在一些大城市的公交车上已经采用GPS定位系统自动报站,但其造价昂贵,难以在一些中小城市实现普及。另外,现在也有一些城市正在使用的一种半自动语音报站系统,这种系统需要由司机在车子进出站的时候人工操作,由于这两个时间点往往是路面情况最复杂的时刻,因此也给行驶中的车辆带来了安全隐患。所以本设计针对目前常见公交车报站系统的主要缺陷,研究介绍了一种基于单片机控制的公交车自动报站系统,实现在到站时的自动语音报站和LCD液晶显示,而且该系统造价廉价,可以在中小城市中普及。

1.2 目前几种公交车报站器详细比较

公交车对社会影响巨大,对城市发展起着最基本的推动作用。随着公交车的不断普及市面上也出现各种各样的公交车报站器,现在市面上流行的几种报站器主要有下列几种类型:

1.2.1 GPS公交车自动报站器

利用GPS全球卫星定位系统的公交车报站系统,在司机座位后面隔板上,安装了一台15英寸的液晶电视和 GPS信号接收器,安装了这套设备后,公交车在语音报站的同时,通过液晶电视还可以显示到站站名的字幕,这样如果没听清报站的话,通过显示屏,乘客也可以一目了然。当出现紧急情况时,调度中心将会给公交车发出相应的信息,以短信的形式传送到显示屏上,同时车载台会发出相应的提示音;驾驶员也可以通过相应的工具进行回复。目前在美国部分城市GPS卫星定位系统已经投入使用,国内也有此类产品的研制开发,其功能强大,系统稳定,但其投资昂贵,尤其是一些中小城市无法承受。

1.2.2 手动式公交车自动报站器

手动式公交车自动报站器通过主机上的汉字显示器,显示当前车站名称,即将达到站名指示功能;通过主机屏幕的显示,可直观的观察到进站和下一站信息;通过按键,可播放进站,出站,服务用语等语音。但是该种报站器需要由司机在车子进出站的时候人工操作,由于这两个时间点往往是路面情况最复杂的时刻,因此也给行驶中的车辆带来了安全隐患,不利于公交车的安全行驶。

1.2.3 基于单片机的公交车自动报站系统

基于单片机的公交车自动报站系统,而这种系统又大致分为两种技术支持。

其中一种的技术关键是对车轮转轴的转角的脉冲进行计数,将计数值与预置值对比,即可确定报站时刻,达到准确自动的目的。该方式应用单片机的高速计数器端口进行脉冲计数,以距离来控制报站时刻,首次实现了模糊控制,改变现有设备的不足。做到简单实用自动化程度高。传感器在公交车上的应用极大的提高了设备功能。

另外一种基于单片机的公交车自动报站系统就是利用编码解码芯片PT2262/PT2272进行解码编码,利用无线数传模块F05V/J05V和天线进行发射和接收来实现的。在每个站牌上设置一个编码发送装置PT2262和无线数传模块F05V,通过公交车上设置的接收装置J05V和译码装置PT2272进行译码并传输到单片机。发送装置按照延时35秒不断发送信号,公交车在距离站牌1020米的时候就能接收到信号,然后根据程序来实现语音报站,LCD液晶显示。这种报站系统软件编写比较简单,也容易修改,并且芯片价格低廉,大批生产能够获得比GPS系统达到更高的性价比,是公交车自动报站系统的较佳选择。

综合上述各种公交车自动报站系统,本设计选择了基于单片机的公交车自动报站系统,并利用无线数传模块来实现公交车的自动报站。

第二章 系统方案的确定

2.1 系统主要要实现的功能

该系统应实现无线信号收发确认,到站时的公交车站名的液晶显示以及自动语音提示。系统的硬件设计中应充分考虑了性价比,用最少的器件设计出满足要求的硬件电路。本次设计主要是完成实现基本的仿真,该系统仿真电路的总体结构以51单片机为核心,由模拟接收电路、LCDLiquid Crystal Display,液晶显示屏)显示电路等组成。

2.2 无线传输模块的选择

PT2262/PT2272集成芯片。方案采用低功耗、低价位、通用编解码电路,发送用高β的达林顿管,所以在灵敏度和抗干扰性方面有保障。

无线数传模块F05V/J05V(典型遥控应用电路):F05V采用的SMT工艺,优点是低电压微功率、体积小、低功耗发射模块,适合单片机数据传输以及短距离无线遥控报警。J05V作为接收模块优点是低电压、体积小,两者连接在PT2262/2272配合使用

2.3 控制模块的选择

所学专业课中学习过51单片机,并且单片机体积小,重量轻,具有很强的灵活性而且价格便宜,所以控制模块选用单片机。

2.4 液晶显示模块及语音模块的选择

随着科学技术的日益发展和进步,微型计算机已经在很多领域得到广泛应用。LCD与微机技术结合,比传统的LED显示效果更佳。所以结合公交车报站的使用特点和运营环境,设计一种由单片机控制、LCD显示的公交车报站显示系统。公交车报站显示系统的设计应用单片机,LCD显示,使到站信息及提示信息以显示的方式告知市民,为市民提供人形化、完美的服务。所以本次设计中重点使用了LCD1602液晶显示模块

鉴于使用Proteus仿真,在仿真中使用蜂鸣器代替语音模块,使用蜂鸣器的连续间断发声作为提示。为了以后实际需要,在文章中介绍了常用的语音模块ISD4004

2.5系统整体硬件电路的确定

根据系统要实现的功能,以及各个模块的选择,确定了整个报站系统主要组成部分分为两个模块。发射模块即电子站牌部分主要由AT89C51单片机,PT2262编码装置,无线传输模块F05V和天线组成。接收控制模块即车载部分是主要部分,选择AT89C51为核心的控制器,PT2272译码装置和无线数传模块J05V以及天线作为接收信号装置,语音录放芯片ISD4004组成的语音播放电路以及LCD1602液晶显示屏构成液晶显示模块。

系统各部分框图如下图所示。

2-1 公交车站牌发射部分方框图

2-2 公交车车载接收部分方框图

公交车自动报站系统就是利用编码解码芯片PT2262/PT2272进行解码编码,利用无线数传模块F05V/J05V和天线进行发射和接收来实现的。在每个站牌上设置一个编码发送装置PT2262和无线数传模块F05V,通过公交车上设置的接收装置J05V和译码装置PT2272进行译码并传输到单片机。发送装置按照延时35秒不断发送信号,公交车在距离站牌1020米的时候就能接收到信号,然后根据程序来实现语音报站,LCD液晶显示。

发射部分通过编码芯片PT2262,无线数传模块F05V和天线不停发射周期信号,发射的一个周期的内容包括本站点的地址、站名等信息的编码信息。当公交车行驶进人该信号范围内,车载部分的通过天线,经无线数传模块J05VPT2272译码就会接收到这个编码信息,单片机将编码信息处理后,向显示模块和语音模块发送对应的信息,就能实现液晶显示屏显示对应的站名和语音报站,完成自动报站。

第三章 系统功能模块详细介绍

3.1 单片机AT89C51

随着计算机技术的发展,单片机技术已成为计算机技术中的一个独特的分支,单片机的应用领域也越来越广泛,特别是在工业控制和仪器仪表智能化中扮演着极其重要的角色。纵观单片机发展的30多年来,单片机正往多功能、高性能、高速度、低电压、低价格、低噪声、低功耗、小体积、大容量、专用化和外围电路内装化的方向发展。单片机的出现使的过去经常采用模拟电路、数字电路实现的电路系统,转变成现在用单片机予以实现,并且传统的电路设计方法演变成硬件和软件相结合的设计方法,并且许多电路设计问题将转化为纯粹的程序设计问题。诚然,单片机的应用意义远不限于它的应用范畴或由此带来的经济效益,更重要的是它已从根本上改变了传统的控制方法和设计思想,是控制技术的一次革命,是一座重要的里程碑

微控制器通常将主要的组成部分集成在一个芯片上,就是把中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、中断系统、定时器/计数器以及I/O接口电路等主要部件集成在一个芯片上。AT89C51俗称单片机,可擦除只读存储器可以反复擦除1000次。

主要特性:

1、一个CPU,一个片内振荡器以及时钟电路,

24KRAM)程序存储器,

3128BROM)数据存储器

421个特殊功能寄存器

5、数据能够保存的时间:10

6、与MCS-51指令相兼容

732个可编程I/O线(48位并行I/O端口)

816位定时器/计数器有两个

95个中断源,两个优先级嵌套结构

10、一个可编程全双工串行接口

11、低功耗的闲置和掉电模式

12、片内振荡器和时钟电路

尽管目前单片机种类多,各类单片机的指令系统各不相同,功能各有所长,但市场占有率最高的是51系列单片机。

单片机体积小,重量轻,具有很强的灵活性而且价格便宜,得到越来越广泛的运用。例如工业控制领域、家电产品,智能化仪器仪表,计算机外部设备,特别是机电一体化产品中都有重要的用途,其中的51单片机系列发展规模最大。

51单片的运用广泛,并且具有优异的性能价格比,集成度高,体积小,有很高的可靠性,并且控制功能强。所以是核心控制期间的最佳选择。

3-1 AT89C51单片机引脚图

3.1.1 管脚说明

下面对设计中用到的一些管脚进行简要的介绍:

VCC:供电电压,一般接+5V电源正端。

GND:接地,一般接+5V电源地端。

P0口(39~32脚):输入输出线P0.0~P0.7统称为P0口。可以用作准双向输入/输出口使用,但由于内部无上拉电阻,一般外加上拉电阻:在进行片外存储器扩展或I/O扩展时,P0口作为分时服用的低8位地址总线和双向数据总线。

P1口(1~8脚):P1口作为准双向I/O口使用。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P2口(21~28脚):P2口也可作为准双向I/O口,当进行片外村春气扩展或I/O口扩展时,P2口用作高8位地址总线。

P3口(10~17脚):P3口作为准双向I/O口使用外,每一个端口还具有第二功能。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚 备选功能

P3.0 RXD(串行口输入端)

P3.1 TXD(串行口输出端)

P3.2 /INT0(外部中断0

P3.3 /INT1(外部中断1

P3.4 T0(定时器/计时器0计数脉冲输入)

P3.5 T1(定时器/计时器1计数脉冲输入)

P3.6 /WR(外部数据存储器写选通信号输出)

P3.7 /RD(外部数据存储器读选通信号输出)

RST9脚):复位输入。当振荡器复位器件时,要保持10ms高电平时间才能保证有效的复位。

ALE/PROG30脚):地址锁存允许/编程线。采用了地址/数据总线复用技术。

/PSEN29脚):片外程序存储器读选通信号输出端,低电平有效。

/EA/VPP31脚):片外程序存储器选用端,低电平有效。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:外接晶体振荡器一端。

XTAL2:外接晶体振荡器另一端。

3.1.2 外部晶振的选择

AT89C51的内部有一个用于构成振荡器的高增益反相放大器。通过XTAL1ATAL2外部接上一片作为反馈元件的晶体,与C1C2构成了并联谐振电路,使其构成自激振荡器。电容的值通常30PF。具体的接线电路如图3—2外部晶振电路:

AT89C51单片机外接的是12MHZ的晶振,则机器周期为1us

3-2 外部晶振电路

3.1.3 复位电路

复位的作用是使程序自动从0000H开始执行,因此我们只要在AT89C51单片机的RST端加上一个高电平信号,并持续10ms以上即可,RST端接有一个上电复位电路,它是由一个小的电容和一个接地的电阻组成的。按键复位电路另外采用一个按钮来给RST端加上高电平信号。

本设计采用放电型的进行人工复位的电路,如图按键复位电路,上电时C3通过R2充电,维持宽度大于10ms的正脉冲,就可以完成复位操作。当C3结束充电后,RST端出现低电平,这是CPU将正常的工作。

在本次设计中如果需要按键进行复位,就按下按钮BUTTON3C3通过BUTTON3R2放电,RST端电位将会上升到高电平,从而实现人工复位,BUTTON3松开后C3重新充电,当结束充电后,CPU将会重新工作。下图中,R2是限流电阻,阻值不可以过大,否则不能起到复位作用。

3-3 按键复位电路

3.1.4 按键电路设计

对于此设计来说要准确的显示设计所要对应的信息,每按下一次按键要显示所要显示的信息。这按键是主要用来模拟无线信号的收发而设计的,即PT2262/PT2272的无线信号收发。

功能的实现主要是通过程序来实现,BUTTON1控制顺向报站,当报站系统启动后,按下BUTTON1开始按预先设置好的站名进行顺向报站,本设计设置的是从站名“AAAAAAA”到“EEEEEEE”依次报站,每次按键按下时实现LED提示灯亮,蜂鸣器连续鸣叫7次。

BUTTON2按键是实现公交车逆向返回时的报站,即从站名“EEEEEEE”到“AAAAAAA”的依次报站,也满足每次按键按下时实现LED提示灯亮,蜂鸣器连续鸣叫7次。

3-4 按键设置

如果使用过程中出现错误时,可以使用按键复位,重现选择正向或者逆向报站。同时,为了防止一次按键产生站名的漏报,在软件设计中使用了延时函数,防止站名的漏报。

3.2 无线收发模块PT2262/PT2272

PT2262/PT2272是台湾普城公司生产的一种CMOS工艺制造通用编解码电路,PT2262/PT2272它具有低功耗低价位,外部元器件少,RC振荡电阻,工作电压范围宽为2.6~15V的特点,最多可有12(A0—A11)三态地址端管脚(悬空,接高电平,接低电平),地址码最多可达53144l212),PT2262可有6(D0~D5)的数据端的管脚,设计可以设定地址码以及数据码在第17脚进行串行输出,以便于应用于无线的遥控发射的电路。

3.2.1 PT2262/PT2272引脚图

PT2262/2272这种器件的使用,根据资料一般将会使用8位的地址码和4位的数据码。PT2262编码电路引脚的选择是:第l~8脚作为地址的设定脚,他可以选择三种状态:悬空、接正电源、接地。38次方为6561,即地址编码的不重复度是6561组。

PT2262/2272的配对使用是要求发射端PT2262和接收端PT2272的地址编码需要完全相同,用户如果想改变地址编码,只要将PT2262PT2272设置相同即可,两者的地址的编码相同时,PT2272输出端将会输出大约4V左右的互锁的高电平的控制信号。

3-5 PT2262/PT2272引脚图

PT2262/PT2272引脚基本类似,作为无线收发译码解码器,两者配对使用引脚连接必须一致。下面接收PT2262/PT2272的引脚说明图

3-1 PT2262引脚说明

3-2 PT2272引脚说明图

3-3 PT2262/PT2272工作参数

3.2.2 PT2262/2272接线图以及工作原理

发射电路主要由AT89C51、编码模块PT2262、无线数传模块F05V和一片74LS04(六输入非门,实际上就是六个非门集成在一块74LS04里面了)构成,发射部分电路如图3-6所示。接收电路主要由AT89C51、译码模块PT2272、无线数传模块J05V和一片74LS04构成,接收部分模拟电路如图3-7所示

3-6 PT2262发射部分模拟接线图

3-7 PT2272接收部分模拟接线图

发射的部分主要用于形成一个周期的编码信号。编码信号的内容包括三个部分,分别是起始标志、数据编码和结束标志,而无线收发模块是四路的,即因为每次收发半个字节的数据,所以一帧数据至少是16位的,其编码数据格式如表3-4所示。

3-4 16位编码数据格式

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

D0

D1

D2

D3

D0

D1

D2

D3

D0

D1

D2

D3

D0

D1

D2

D3

4位起始标志

8位编码数据

4位起始标志

由上图可以得知每一帧数据需要四次才能发送完毕。在现实生活应用中不需要编码信号不间断的发送,三秒钟或者五秒钟发送一次即可,因此程序里还需要有一段三秒或五秒的延时。在公交车上设置的接收装置J05V和译码装置PT2272进行译码并传输到单片机,通过单片机判断车辆到达的站点信息,根据这个站点的信息进行语音播报以及液晶显示提示。

射频触发信号是以中断的的方式送入单片机的,硬件电路将这个控制信号与单片机的INT0口相连接,所以本段程序是一个外部中断0的子程序。当射频信号到来时PT2272DVT引脚端由低变高,经非门送到单片机INT0,使单片机跳到外部中断O子程序。

3.2.3 无线数传模块F05V/J05V

无线数传模块F05V/J05V(典型遥控应用电路):F05V采用的SMT工艺,优点是低电压微功率、体积小、低功耗发射模块,适合单片机数据传输以及短距离无线遥控报警。J05V作为接收模块优点是低电压、体积小,两者连接在PT2262/2272配合使用

F05V引脚定义:1=正电源3V2=接地;3=数据信号输入;Y=外接天线。

J05V引脚定义:1=正电源3V2=接地;3=数据信号输出;Y=外接天线。

3-8 f05V/J05V引脚接线图

3.3 显示模块LCD1602

我们知道的用来显示的器件很多。比如数码管、LCD、点阵式LED。数码管只能显示数字,LCD可以显示汉字、符号、数字和图形,为了报站器的人性化

LCD1602能够同时显示162行的字符,可以显示数字、字母、以及各种符号。这种液晶模块由若干个5X7或者5X11点阵字符位组成,这种点阵字符显示字符并且自带间隔,也就是有自然的间距和行间距,也是因为这个特性不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

现在基于HD44780液晶芯片的字符液晶在市场上是最常见、数量最大的,控制原理是完全相同的,因此控制程序可以基于HD44780液晶芯片,这样可以很方便地应用于市面上大部分的字符型的液晶。

3.3.1 排阻Respack-8

Respack-8接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻,1端为公共端接VCC

3.3.2 LCD1602的引脚定义

字符型LCD一般是16条引脚线14条引脚线,多出来的两条线是背光电源线VCC15脚)和地线GND16脚),与14LCD的控制原理基本完全一样,定义如下表所示:

3-5 LCD1602引脚定义

引脚号

引脚名

电平

输入/输出

作用

1

VSS

电源地

2

VCC

电源(+5V

3

VEE

进行对比的调整电压

4

RS

0/1

输入

0进行输入I指令

1进行输入O数据

5

R/W

0/1

输入

0=LCD写入指令以及数据

1=LCD中来读取信息

6

E

1,1—0

输入

使能信号,1是进行读取信息

1—0下降沿执行指令

7

DB0

0/1

I/O

数据总线line0(最低位)

8

DB1

0/1

I/O

数据总线line0

9

DB2

0/1

I/O

数据总线line0

10

DB3

0/1

I/O

数据总线line0

11

DB4

0/1

I/O

数据总线line0

12

DB5

0/1

I/O

数据总线line0

13

DB6

0/1

I/O

数据总线line0

14

DB7

0/1

I/O

数据总线line0

15

A

+VCC

LCD背光灯电源正极

16

K

接地

LCD背光灯电源负极

3-9 LCD1602引脚接线图

LCD模块上固化了字模存储器,这就是CGROMCGRAMHD44780内置了192个常用字符的字模,存于字符产生器CGROM中,另外还有8个允许用户自定义的字符产生RAM,成为CGRAM。下图3-10说明了CGROMCGRAM与字符的对应关系。读的时候,先读左边那列,再读上面那行,如:感叹号!的ASCII0x21,字母BASCII0x42(前面加0x表示十六进制)

3-10 CGROMCGRAM中字符代码与字符图形对应关系

3.3.3 液晶LCD1602常用的11条指令

3-6 液晶LCD1602常用指令

指令功能

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

执行时间

清屏

0

0

0

0

0

0

0

0

0

1

1.64ms

功能详解:清除液晶显示器的内容。

光标归位

0

0

0

0

0

0

0

0

1

X

1.64ms

功能详解:光标撤回到显示器的左上方,地址计数器(AC)值为0DDRAM值不变

进入模式设置

0

0

0

0

0

0

0

1

I/D

S

40us

功能详解:I/D当为0时写入数据后光标左移,当为1时写入数据后光标右移

S0时写入新数据后显示屏不移动,为1时写入新数据后显示屏整体右移1字符

显示开关控制

0

0

0

0

0

0

1

D

C

B

40us

功能详解:D0时显示功能关,为1时显示功能开

C0时无光标。1时有光标

B0时光标闪烁,1时光标不闪烁

设定显示屏或光标移动方向

0

0

0

0

0

1

S/C

R/L

X

X

40us

功能详解:

S/C

R/L

设定的情况

0

0

光标左移1格,且AC值减1

0

1

光标右移1格,且AC值加1

1

0

显示器上字符全部左移一格,但光标不移动

1

1

显示器上字符全部右移一格,但光标不移动

功能设定

0

0

0

0

1

DL

N

F

X

X

40us

功能详解:DL0时数据总线为4位,1时数据总线为8

N0时显示1行,1时显示两行

F05*7点阵/每个字符,15*10点阵/每个字符

设定CGRAM地址指令

0

0

0

1

CGRAM的地址(6位)

40us

功能详解:设定下个要存入的数据的CGRAM的地址

设定DDRAM地址指令

0

0

1

CGRAM的地址(7位)

40us

功能详解:设定下个要存入的数据的DDRAM的地址

读取忙碌信号或AC地址

0

1

BF

AC内容(7位)

40us

功能详解:BF1表示液晶显示器忙,为0时,液晶显示器可以接收单片机送来的数据或指令

数据写入到DDRAMHCGRAM

1

0

要写入的数据D7~D0

40us

功能详解:(1)将字符码写入DDRAM,液晶显示屏并显示对应的字符

2)使用者设计的图形存入CGRAM

CARAMDDRAM读取数据

1

1

要读出的数据D7~D0

40us

功能详解:读取DDRAMCGRAM的内容

3.4 语音模块ISD4004

实际公交车报站都是语音报站,因为本设计用Proteus仿真,所以用蜂鸣器替代语音模块进行仿真试验,下面简要介绍下语音模块的基本知识。

ISD4004语音模块工作特点:工作时的电压在3V,能够完成的录放的时间在816分钟左右,同型号的ISD1730等,录音时间一般在4分钟以内。并且它的音质也很不错,目前在移动电话以及其他电子产品中应用比较广泛。ISD4004是经过CMOS技术来制作的,内部有各种模块:音频放大器、平滑滤波器、振荡器、自动静噪及高密度多电平闪烁存贮、防混淆滤波器。芯片经过微控制器设计,其指令采用的是串行通信,如(SPI)。芯片采用了多电平接模拟量的存储技术,采样值可以在片内的闪烁存贮器进行直接存储,因此可以非常真实得还原声音。而一般固录音电路是有很多缺点的,会有很多噪声和"金属声"。采样的频率可以选为8.06.45.34.0kHz,这几个频率选择的越低,录放的时间也就会越长,确实是造成音质的下降,闪烁存贮器中的信息,可保存的时间是100(典型值),并且可以反复录音10万次。

ISD4004芯片优点是无须A/D的转换和A/D的压缩,能过进行直接的储存,并且没有A/D转换的误差,还具有所需的外围的电路是比较简单的、使用时不用扩充存储器、、存储时间也很长、也可以进行多次重复录放。

3-10 ISD4004的引脚排列图

在本次设计后续设计中,也可以利用AT89C51控制该芯片,实现语音的存储以及语音报站。

1、电源端(VCCA,VCCD):为了使噪声最小,芯片内部的数字和模拟电路要使用不同的电源的总线,,并且分别引出到外封装的不同的管脚上。数字和模拟电源端最好走不同的线,比如,选择在离供电端相近的地方相连,而去耦电容就应尽量选择离器件近。

2、地线(VSSD,VSSA)芯片的内部的模拟和数字电路也使用不同的地线。

3、同相的模拟输入(ANA IN+):即录音信号同相输入端这时输入放大器采用单端或差分驱动。当采用单端时,在耦合电容中输入信号,最大的幅度是32mV峰峰值,芯片频带的低端截止频率决定耦合电容和本端的3KΩ电阻的输入阻抗。作为差分的驱动时,信号最大幅度16mV峰峰值,这是和ISD33000系列一样的

4、反相的模拟输入(ANA IN-):作为差分驱动是录音信号的反相的输入端。信号是通过耦合电容来输入,最大幅度是16mV峰峰值

5、音频输出(AUD OUT):作用是提供音频的输出,可以驱动5KΩ的负载。

6、片选(SS):此端为低电平,在向ISD4004芯片发送指令时,并且该两条指令间应该为高电平

7、串行输入(MOSI):此端是串行的输入端。主控制器应该在串行时钟的上升沿前半周期把数据放到这个端口,来让ISD输入

8、串行输出(MISO):作为ISD 的串行的输出端。当ISD没有选中时本端会呈高阻态

9、串行时钟(SCLK):作为ISD 的时钟的输入端。从主控制器中产生,可以用于同步的MOSIMISO的数据传输

10、中断(/INT):本端作为漏极的开路输出。ISD 在任何操作过程(比如快进)中检测到EOM OVF 时,本端会变低电平并保持。并且中断的状态在下一个SPI周期开始时清除。中断状态也可以用RINT 的指令读取。

OVF 标志---指示ISD的录放操作是否已经到存储器未尾状态。

EOM 标志---只在放音过程中检测到内部的EOM 标志时,状态才会置1

11、行地址时钟(RAC):漏极的开路输出。每经过一个RAC 周期,表示ISD存储器操作进行了一行。该端口并且可以用于存储的管理技术。

12、外部时钟(XCLK):本端内部带有下拉元件。工业级的芯片在整个温度和电压范围内,频率变化范围在-6/+4%内,此时建议使用稳压电源。如果要求更高精度,可从本端来输入外部时钟(如前边所描述)。并且由于内部的防混淆及平滑滤波器已经设定好,所以上述推荐时钟频率不应该再改变。输入时钟占空比是无关紧要的,因为内部首先进行了分频。并且在不外接地时钟时,此端是必须接地的。

13、自动静噪(AMCAP):一般本端对地会接1mF的电容,来构成内部信号的电平峰值检测电路一部分。并且与内部设定阈值和峰值电平来作比较,从而决定自动静噪的功能的翻转点。大信号时,自动静噪的电路不衰减,静音时衰减6dB1mF 的电容也影响自动静噪的电路对信号幅度的响应速度。本端接VCCA 则应该禁止自动静噪

3.5 蜂鸣器和LED指示灯

蜂鸣器

鉴于用Proteus仿真,语音模块用蜂鸣器代替如图3-7,采用三极管NPN,当P11为高电平时电路导通,通过程序使P11进行短时间内高低电平转换,以达到断续蜂鸣提示的效果。

3-11 蜂鸣器接线图

到站LED提示灯

鉴于用Proteus仿真,语音模块用蜂鸣器代替如图3-7,采用三极管PNP,当P1.0为低电平时电路导通,到站提示灯亮。

3-12 LED提示灯接线图

第四章 系统程序设计

4.1 系统仿真主程序流程图

N N

Y Y

4-1 系统仿真主程序流程图

系统仿真,初始化运行程序时,LCD第一行显示欢迎字符,蜂鸣器蜂鸣,选择BUTTON1或者BUTTON2(通过控制P35,P34)选择顺序或者逆序报站,按下按键之后,蜂鸣器提示,LED指示灯亮,延迟一段时间后显示站名。随后可以每到一个站依次显示公交车站名,如果出现错误或者重新选择另一顺序报站,可以使用按键复位,重新选择报站方式

4.2 程序子函数模块

4.2.1 延时函数

/*******延时*********/

void delay(uint n)

{

uint i;

for(;n>0;n--)

for(i=200;i>0;i--);

}

4.2.2 检查忙函数

/*******判断是否忙*******/

void check()

{

rs=0;

rw=1; // e=1

port=0x00;

e=1;

while(busy);

e=0;

}

4.2.3 写指令函数

/*******写指令******/

void send(uchar command)

{

check();

rs=0; //指令

rw=0; // e=0

port=command;

e=1;

_nop_();_nop_();

e=0; //写入指令

}

4.2.4 写数据函数

/********写数据********/

void write(uchar dat)

{

check();

rs=1; //数据

rw=0;

port=dat;

e=1;

_nop_();_nop_();

e=0;

}

4.2.5 光标位置函数

/********光标位置*********/

void pos(uint p)

{

send(p|0x80);//第一行第一个0x80

}

4.2.6 初始化函数

/**********初始化*********/

void init()

{

send(0x38); // 8位数据,双列,5*7字形

delay(1);

send(0x0c); // 0x08

delay(1);

send(0x06);//地址增加一

delay(1);

send(0x01);//清屏

delay(1);

}

4.2.7 其他数组定义以及端口定义

用数组定义站点信息字符串

uchar code dis1[]="AAAAAAA "; //站点的内容可更新也可以增加

uchar code dis2[]="BBBBBBB ";//每个字符串假设了10个字符

uchar code dis3[]="CCCCCCC ";

uchar code dis4[]="DDDDDDD ";

uchar code dis5[]="EEEEEEE ";

uchar num[]="Welcometo YanTai";液晶显示第一行(刚好18个字符)

端口定义

#define port P0 //DB0~DB7数据口

sbit P34=P3^4; //控制反向报站

sbit P35=P3^5; //控制正向正向

sbit led=P1^0; //到站指示灯

sbit fmq=P1^1; //蜂鸣器

sbit e=P2^2;//使能

sbit rw=P2^1;//读写

sbit rs=P2^0;//数据/命令

sbit busy=P0^7;//检测忙

4.3 主程序流程图

void main()

{

int i=0,j=0,k=0,s=0;

uchar n;

init();

delay(10);

pos(0x00);

delay(1); //或者使用i=0,删除后会发现不能显示第一个数。

for(n=0;n<18;n++)

{write(num[n]);delay(1);

}

while(1)

{if (P35==0)

{j++;

if(j==1)

{loop1:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop1;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<10;n++)

{write(dis1[n]);

delay(5);

}

}

if(j==2)

{loop2:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop2;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<10;n++)

{write(dis2[n]);

delay(5);

}

}

if(j==3)

{loop3:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop3;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<10; n++)

{write(dis3[n]);

delay(5);

}

}

if(j==4)

{loop4:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop4;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<10; n++)

{

write(dis4[n]);

delay(5);

}

}

if(j==5)

{loop5:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop5;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<10; n++)

{write(dis5[n]);

delay(5);

}

}

}

第五章 系统仿真实现

5.1 开发环境KeilC51介绍

KeilC51是集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,,易学易用。在 KeilC51 集成开发环境下使用工程的方法来管理文件,所有的源文件、头文件甚至说明性文档都可以放在工程项目文件里统一管理。

本次设计使用KeilC51的开发工具大致流程如下:

1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。

2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令建立一个新的μVision2 工程。这时会弹出所示的工程文件保存对话框,选择工程目录并输入文件名后,单击保存。

3)本次设计建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它,可以选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。这次设计我采用的是将.c的文件导入工程。

4)输入程序,完毕后点击“保存”命令保存源程序,KeilC51 支持汇编和C语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理。

5)不断纠正源文件错误,检查无误后生成HEX文件,并将HEX文件导入Proteus中的51单片机来运行实现。

5.2 仿真环境PROTEUS介绍

Proteus是英国Labcenter公司开发的电路分析与实物仿真软件(EDA工具软件)。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的十分适用于仿真设计。

该软件具备许多优点,首先能够仿真的器件非常多,里面有30多个元件库,包括各种型号单片机、电阻、二极管、三极管、晶振、按键、电压表电流表等各种实验会用到的器件。再次,该软件能实现单片机及其外围电路组成的系统的仿真、单片机的数字电路仿真、模拟电路仿真、键盘和LCD的仿真等等各种功能,并且能使用示波器等各种辅助工具研究器件。最后该软件还能提供软件调试的功能,观察各器件在程序运行时的状态,当然,该软件支持KeilC51生成的HEX文件。

5.3 仿真运行结果截图

初始化运行界面

5-1 初始化运行界面

Proteus进行仿真,模拟基本的公交车报站。

初始化运行程序时,LCD第一行显示欢迎字符,蜂鸣器蜂鸣,选择BUTTON1或者BUTTON2选择顺序或者逆序报站,按下按键之后,蜂鸣器提示,LED指示灯亮,延迟一段时间后显示站名。随后可以每到一个站依次显示公交车站名,如果出现错误或者重新选择另一顺序报站,可以使用机械复位,重新选择报站方式。

5.4 仿真结果

本次课题用Proteus设计出硬件电路,用KeilC51编写程序共同完成课题的仿真,基本完成了公交车的模拟报站。

功能的实现主要是通过程序来实现,BUTTON1控制顺向报站,当报站系统启动后,按下BUTTON1开始按预先设置好的站名进行顺向报站,本设计设置的是从站名“AAAAAAA”到“EEEEEEE”依次报站,每次按键按下时实现LED提示灯亮,蜂鸣器连续鸣叫7次。

BUTTON2按键是实现公交车逆向返回时的报站,即从站名“EEEEEEE”到“AAAAAAA”的依次报站,也满足每次按键按下时实现LED提示灯亮,蜂鸣器连续鸣叫7次。如果使用过程中出现错误时,可以使用机械复位,重现选择正向或者逆向报站。同时,为了防止一次按键产生站名的漏报,在软件设计中使用了延时函数,防止站名的漏报

5-2 系统正向报站

5-3 系统反向报站

经过了近几个月的学习和努力,我终于完成了基于单片机的公交车自动报站系统的设计,在这个过程中我的收获是非常多的,并且需要改进和学习的地方也非常多。我从以下两个方面来对自己在这次毕业设计的过程中的感想来做一下总结:

(一)收获

通过这次设计我知道了在做一个系统之前很重要的是要做好需求分析,为此,我在网上查看了大量的相关资料,对目前市面上流行的几种公交车报站器进行了分析和比较,来

为此次设计个方案确定来做了充足的准备。通过研究各种公交车报站器来自己确定要完成的公交车报站器的工作原理和要具备的各种功能。

在这次毕业设计过程中王跃桦老师进行了专门的辅导,老师具有丰富的理论及实践经验,给我提供了许多非常具有参考价值的资料,开拓我的眼界,本来不懂的地方茅塞顿开。当我在遇到困难时王跃桦老师耐心的帮我分析,帮助我克服各种困难,这样我的毕业设计才可以更加顺利进行。说实话,在我做这次毕业设计之前,我以为这东西很好做,一做起来才感动力不从心,并且我对一些EDA的软件基本没有了解,甚至都不知道它是干什么,怎么用,对程序的理解也仅仅局限于书本上有限的知识。但是通过了这次设计,我深入了解了单片机的工作原理和机制,对它的各个模块功能有了更深层认识和更本质的理解,并且在这个过程中,我更加深入认识了ProteusKeilC51这两个软件,对这软件的基本操作能够熟练的使用,了解了软件的优缺点,并且熟练了对C语言的使用和LCD1602程序设计。在做课程设计的过程中我遇到了很多困难,很多方案确定不下来,编写代码时也总是出现这样或者那样的错误,并且有些功能自己也不知道该用什么方法来实现,经过向同学的请教和讨论以及王跃桦老师的深刻指导,我克服了这一些困难。最终基本完成了用Proteus来实现公交车的模拟报站,但是模块还是很简陋,也需要进一步的优化。

(二)不足之处

该系统还存在着一些不足,主要体现在:仿真过程没有办法使用PT2262/2272ISD4004语音模块,用了按键和蜂鸣器来代替,只对这两个模块根据资料进行了相应的介绍。如果以后做实物的过程,那应该完善这两部分。并且在设计过程中也暴露了很多的缺点,比如编程能力有待提高,需要通过不断的编译仿真调整才能最终得到想要的结果,英语技术文档阅读也很不熟练,需要反复斟酌才能下结论

(三)总结

本次设计用Proteus仿真基本达到了预先的要求。设计采用了Atmel公司的AT89C51单片机来设计的一个公交自动报站系统,该系统主要包含PT2262/PT2272无线信号收发模块,LCD1602液晶显示模块,ISD4004语音模块,各个模块通过AT89C51单片机来控制实现无线信号收发与识别、信息显示及语音报站任务。

本设计使用了C语言进行编程,利用了KeilC51软件进行编译生成HEX文件,使用了Proteus软件进行了基本的仿真实现,能够完成对输入信号的判断处理,自动液晶显示站名以及声音提示。这次设计能够实现设计中提出的功能方案。通过这次的设计,对于在KeilC51环境下的编程能力有了进一步的提高,同时对单片机系统设计理念也有了进一步认识,理解了模块化设计在整个系统设计中的作用。

最后要感谢王老师在我的毕业设计过程中对我的悉心指导以及许多同学们对我的帮助,正是有了大家的帮助,我才能顺利的完成了毕业设计,在这里,我由衷地对帮助过我的人表示感谢。



参考文献

[1] 汪贵平,新编单片机原理及应用,北京:机械工业出版社,2009.9

[2] 赵德安,单片机原理与应用,北京:机械工业出版社,2005

[3] 周波,公交车自动报站系统的设计,四川理工学院学报(自然科学版),2008.6

[4] 韦日华,张春,王志华 .一种点对多点无线数据传输系统的设计 . 电讯技术,2003

[5] 向赛辉,基于单片机实现遥控编码器PT2262的软件解码,国外电子元器件,2008年第5

[6] 安颖,遥控编码芯片PT2262的单片机译码模块,计算机与数字工程,2005,338

[7] 于志赣,液显LCD1602模块的应用,机电技术,2009,323

[8] 张建华,ISD4004语音芯片在语音报站器中的应用,电子技术应用,2003,298

[9] 张常年,ISD4004语音芯片的工作原理及其在智能控制系统中的应用,2001,206

[10] 窦振中. 单片机外围器件实用手册 [M]. 北京,北京航空航天大学出版社, 2003

[11] 颜世强,李树广.公交车自动报站系统的设计 [J].工业控制计算机 ,2004,17(6) 60.

[12] 求是科技.单片机典型模块设计实例导航 [M].北京,人民邮电出版社 ,2008



附录A 系统仿真全部代码

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define port P0 //DB0~DB7数据口

sbit P31=P3^1; //无线信号接收端(控制反向)

sbit P32=P3^2; //无线信号接收端(控制正向)

sbit led=P1^0; //到站指示灯

sbit fmq=P1^1; //蜂鸣器

sbit e=P2^2;//使能

sbit rw=P2^1;//读写

sbit rs=P2^0;//数据/命令

sbit busy=P0^7;//检测忙

uchar code dis1[]="AAAAAAA "; //站点内容可更新或增加

uchar code dis2[]="BBBBBBB ";

uchar code dis3[]="CCCCCCC ";

uchar code dis4[]="DDDDDDD ";

uchar code dis5[]="EEEEEEE ";

uchar num[]="Welcometo YanTai";

/*******延时*********/

void delay(uint n)

{

uint i;

for(;n>0;n--)

for(i=200;i>0;i--);

}

/*******判断是否忙*******/

void check()

{

rs=0;

rw=1; // e=1

port=0x00;

e=1;

while(busy);

e=0;

}

/*******写指令******/

void send(uchar command)

{

check();

rs=0; //指令

rw=0; // e=0

port=command;

e=1;

_nop_();_nop_();

e=0; //写入指令

}

/********写数据********/

void write(uchar dat)

{

check();

rs=1; //数据

rw=0;

port=dat;

e=1;

_nop_();_nop_();

e=0;

}

/********光标位置*********/

void pos(uint p)

{

send(p|0x80);//第一行第一个0x80

}

/**********初始化*********/

void init()

{

send(0x38); // 8位数据,双列,5*7字形

delay(1);

send(0x0c); // 0x08

delay(1);

send(0x06);//地址增加一

delay(1);

send(0x01);//清屏

delay(1);

}

void main()

{

int i=0,j=0,k=0,s=0;

uchar n;

init();

delay(10);

pos(0x00);

delay(1); //或者用i=0,删除后会发现不能显示第一个数。

for(n=0;n<18;n++)

{write(num[n]);delay(1);

}

while(1)

{if (P32==0)

{j++;

if(j==1)

{loop1:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop1;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9;n++)

{write(dis1[n]);

delay(5);

}

}

if(j==2)

{loop2:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop2;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9;n++)

{write(dis2[n]);

delay(5);

}

}

if(j==3)

{loop3:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop3;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{write(dis3[n]);

delay(5);

}

}

if(j==4)

{loop4:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop4;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{

write(dis4[n]);

delay(5);

}

}

if(j==5)

{loop5:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop5;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{write(dis5[n]);

delay(5);

}

}

}

if (P31==0)

{k++;

if(k==1)

{loop6:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop6;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9;n++)

{write(dis5[n]);

delay(5);

}

}

if(k==2)

{loop7:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop7;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9;n++)

{write(dis4[n]);

delay(5);

}

}

if(k==3)

{loop8:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop8;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{write(dis3[n]);

delay(5);

}

}

if(k==4)

{loop9:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop9;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{

write(dis2[n]);

delay(5);

}

}

if(k==5)

{loop10:{s=s+1;

led=0;

fmq=1;

delay(100);

led=1;

fmq=0;

if(s<=7)

goto loop10;

}

s=0;

pos(0x40);

delay(1);

for(n=0;n<9; n++)

{write(dis1[n]);

delay(5);

}

}

}

}

}

本文来源:https://www.2haoxitong.net/k/doc/f45afb2800f69e3143323968011ca300a6c3f6e7.html

《基于单片机的公交车自动报站系统毕业论文.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式