毕业设计论文:基于嵌入式Linux公交汉字显示系统的设计与实现 -

更新时间:2024-05-06 17:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业论文(设计)

题 目嵌入式公交汉字显示系统的设计与实现 学 院 电子子信息工程学院 专 业 电子信息工程 班 级 09级电子信息工程(本)1班 学 号 091102010131 学生姓名 王梦楠 指导教师 王元一 赵金龙 完成日期 2013年五月

西安思源学院教务处制

二〇一三年五月

摘要

随着时代的进步,公交车已经成为我们学生族和工薪族出门必须的交通工具。由于单片机技术以及嵌入式技术飞速发展。目前,在公交车报站方面,也由传统的人工报站,逐渐改变为使用微电脑控制的语音文字报站系统。从以前售票员的大声报站变成现在的自动语音报站以及汉字提示等新型的报站系统,加快了现代化建设的进程。

本文介绍了一种新型的嵌入式公交车汉字显示系统的设计原理,同时提供了一种以89C52RC单片机为核心,控制ISD4004语音芯片及LED点阵显示汉字的新方案。利用89C52RC单片机作为CPU来进行总体控制,通过语音控制电路进行各种提示语音的播放,同时使用LED点阵电路进行汉字显示,实现了公共汽车的语音自动报站以及汉字提示的功能,实现了图文、语音一体化协调工作,减轻了司售人员的劳动强度,提高了车辆的服务质量,是一种科技、时尚的新产品。同时它摆脱传统电子屏\线\的束缚,使其应用更加市场化,其流动显示的特点更为广告界所推崇,是一种全新的媒体。

ISD4004语音系列芯片是美国ISD4004公司推出的产品,具有多次重复录放,存储时间长,使用时不需扩充存储器,所需外围电路简单等特点。

本系统是以C语言来进行软件设计,指令的执行速度快,节省存储空间。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,使硬件在软件的控制下协调运作。

关键词:89C52RC单片机 LED点阵显示 语音芯片

I

Abstract

With the progress of The Times,the bus has become a general applicability and students go to the family transportation.Due to the micro controller technology and electronic voice technology rapidly develope.At present, in the bus stops,also from the traditional artificial stops, gradually changing into using the microcomputer control system of bus stop announcement. From before the loud voice stops of the conductor to be the new characters suggest and stops system,accelerating the process of modernization.It's the national symbol of automation transportation development. This paper introduces the design principle of a new kind of bus automatic stops display system and provides a new plan to control ISD4004 pronunciation chip and LED dot matrix to display Chinese characters by 89C52RC cu .Useing 89C52RC as CPU to overall control and through the speech control circuit to play various kind speech hint.Realizing the bus stops and characters of the voice of function,the text, voice integration are realized coordinationly too.Reduce the labor intensity of sales personnel department, improving the quality of bus service.It is a kind of new products of technology and fashion.At the same time,it gets rid of traditional electronic screen \make its application become more market-oriented.The characteristics of \shows is praised highly by advertising.it is a kind of new media.

ISD4004 series pronunciation chip is the products of ISD company,with the char actor of repeated recording, long time storage ,without expanded memory when using and simple circuit of the periphery, etc.

This system based on C language for software design,the instruction execute speedily and save storage space.In order to facilitate expansion and change,the design of software adopt modular structure,make the program design of logical relationship more concise,make the hardware under the control of the software operation harmoniously .

Keywords:89C52RC MCU, LED dot matrix display, pronunciation chip

II

目 录

1 绪论............................................................................................................................ 1 1.1 课题背景与意义 ................................................................................................. 1 1.2 选题的目的与研究内容 ..................................................................................... 2 1.3 国内的的动态发展趋势 ..................................................................................... 3 2 μC/OS-II操作系统移植 ............................................................................................ 5 2.1 ΜC/OS-II操作系统的工作原理.......................................................................... 5 2.2 ΜC/OS-II的组成部分.......................................................................................... 6 2.3 ΜC/OS-II操作系统移植...................................................................................... 6

2.3.1 OS_CPU.H文件的移植 ......................................................................... 6 2.3.2 OS_CPU_C.C 文件的移植 ................................................................... 9

3 系统硬件设计.......................................................................................................... 10 3.1 方案研究 ........................................................................................................... 10 3.2 方案选择 ........................................................................................................... 11 3.3 电路原理的总体设计 ....................................................................................... 11 3.3 芯片选择 ........................................................................................................... 12

3.3.1 STC89C52RC单片机芯片 .................................................................. 12 3.3.2 ISD4004语音芯片 ............................................................................... 14 3.3.3元器件清单........................................................................................... 16 3.4 硬件电路设计 ................................................................................................... 17

3.4.1电源电路............................................................................................... 17 3.4.2 LED点阵显示电路 .............................................................................. 18 3.4.3语音录放音电路................................................................................... 18 3.4.4按键控制电路....................................................................................... 19 3.5硬件电路总体设计 ............................................................................................ 20 4 系统软件设计.......................................................................................................... 21 4.1 系统软件结构 ................................................................................................... 21

III

4.2 系统软件设计 ................................................................................................... 22

4.2.1 延时设计.............................................................................................. 22 4.2.2 语音录放设计...................................................................................... 23 4.2.3 中断控制设计...................................................................................... 24 4.2.4 LED点阵汉字显示设计 ...................................................................... 25

5 软件程序调试.......................................................................................................... 26 5.1 调试软件 ........................................................................................................... 26 5.2 软件程序测试 ................................................................................................... 26 5.3 系统电路功能仿真 ........................................................................................... 27 5.4 KEIL与PROTEUS对系统联调 ........................................................................... 28 6 总结与展望.............................................................................................................. 30 6.1总结 .................................................................................................................... 30 6.2展望 .................................................................................................................... 30 参考文献...................................................................................................................... 32 致谢.............................................................................................................................. 33 附录1 系统原理图..................................................................................................... 34 附录2 源程序代码..................................................................................................... 35

IV

嵌入式公交汉字显示系统的设计与实现

1 绪论

1.1 课题背景与意义

随着现代社会的建设,公共汽车越来越为大众所喜爱,不仅仅可以在低消费下达到目的地,同时也能很方便的省去很多的自驾麻烦。是打工族和学生族的常用交通工具。而随着人们使用公共汽车的普遍,车辆上一般都相当拥挤,造成许多的乘客未到站先下车或者推迟下车的情况,也加重了售票员的劳动强度。随着信息社会的到来,单片机广泛的应用于工业控制系统、数据采集系统、自动测试系统、声学领域和微机技术等广阔的领域。而利用单片机对语音芯片进行控制可以达到语音报站的效果。因此,了解并掌握单片机智能控制技术工作原理及特性是非常重要的。

在一些自动语音报站系统中,广泛采用的是通过使用语音芯片进行设计电路,然后通过MIC录音电路以及功放电路进行语音的录制与播放,同时通过单片机对语音芯片进行选择以及功能的控制,从而完成语音报站。但是由于传统的语音芯片的外围电路比较复杂,所以实现复杂、易受干扰、不易控制且精度不高。因此,本系统用一种比较昂贵且现代社会才刚刚常用的一种ISD4004系列语音芯片,不需复杂的外围电路和A/D转换电路能直接与单片机完成语音的录制和播放,实现方便、精度高,可根据不同需要用于各种场合;为了提高对语音芯片的认识和了解,尤其是对ISD4004系列的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。

本设计基于ISD4004芯片设计的公交车汉字显示报站系统,介绍了STC89C52RC单片机语音汉字显示控制系统,主要是通过单片机组成的应用系统

1

来完成对语音的录制以及播放,汉字的LED点阵显示以及语音播放的控制,从而实现了单片机对语音汉字的控制。在正常情况下,通过ISD4004对语音报站信息进行播放以及利用LED点阵进行相关提示汉字的显示,ISD4004芯片采用CMOS技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。通过单片机对报站语音进行采集处理,同时设定相关汉字显示信息;当到站按键按下时,该系统会发出到站站名及相关语音声音,同时让LED点阵进行汉字提示信息的显示,报站语音以及汉字显示结束时等待下一个到站按键的触发。

1.2 选题的目的与研究内容

首先是设计出一种的方便实用的公交车汉字显示报站系统。单片机智能控制技术广泛地应用于工业控制、智能语音等方面,ISD4004 系列工作电压3V,单片录放时间8至16分钟,音质好,适用于移动电话及其他便携式电子产品中。芯片采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内闪烁存贮器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和\金属声\。采样频率可为 4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,而音质则有所下降,片内信息存于闪烁存贮器中,可在断电情况下保存100年(典型值),反复录音10 万次。而本系统则基本完成了设计的任务要求,通过STC89C52RC单片机语音录放控制系统,主要是通过单片机组成的应用系统来完成对语音的采集、语音的存储处理、提示汉字的显示以及语音播放的控制,从而实现了单片机对公交车到站的语音汉字显示功能。

其次,为了联系实际,用大学所学的理论来进行实际工作,将知识转变为生产力。通过大学本科四年的学习,已经初步具有了一定的分析和设计能力。通过本次设计将大学所学的知识进行系统地梳理,概括和总结,并综合运用这些所学的知识。

2

公共汽车为外出的人们提供了方便快捷的服务,而公共汽车的报站直接影响服务的质量。传统由乘务人员人工报站,该方式因其效果太差和工作强度太大,在很多大城市已经被淘汰。近年来,随着科学技术的日益发展和进步,微型计算机技术已经在许多领域得到了广泛的应用。在声学领域,微机技术与各种语音芯片相结合,即可完成语音的合成技术,使得汽车报站器的实现成为可能,从而为市民提供了更加人性化的服务。鉴于传统公交车报站系统的不足之处,结合公交车辆的使用特点及实际营运环境,设计了一种由单片机控制的公交车语音报站显示系统 。

1.3 国内的的动态发展趋势

当今社会,公交车是大多数城市居民出行的重要工具之一,但就公交车目前的报站系统来看很难满足大家的要求。现在公交车使用普遍的还是人工按键报站系统,此系统存在以下二个不可忽略的弊端:

(1)存在隐形的安全隐患,因为每次驾驶员都要在行驶时对报站器进行操作以进行报站,而车辆在进出站的时候路面情况都很复杂,因此给行驶中的车辆和行人带来一定的安全隐患。

(2)报站不够准确,因为驾驶员在行驶的过程中操作报站系统时时常会忘按键或者按错键,有时在调整报站系统时会连续报站,这样会给不熟悉路线的乘客带来不便。

目前我国的大部分城市公交自动报站的方式主要有三种:

(1)人工进行报站,一般是由当地的乘务人员用方言来进行报站,这样会给外地乘客带来很大的不便,但这种方式已经被淘汰。

(2)半自动报站,这种报站方式是现在运用普遍的,但由于这种报站系统需要驾驶员来控制,故会有误报现象且还存在安全隐患。

(3)自动报站系,此报站方式已智能化,即无需驾驶员得参与,系统将自动识别站点虽然比较准确,但也容易出现问题且价格昂贵,所以这种方式运用

3

的不是很普遍。

虽然国能外都在研究公交自动报站系统,但采用的技术手段不一样,如:采用GPS定位系统自动报站等等。这些开发成本较高,且难以实现普及,特别是一些中小城市难以负担,故开发一种综合性强的、且价格交低、易于实现普及的系统是公交事业迫切需要的。

4

2 μC/OS-II操作系统移植

μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。μC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。

2.1 μC/OS-II操作系统的工作原理

μC/OS-II是一种基于优先级的可抢先的硬实时内核。

要实现多任务机制,目标CPU必须具备一种在运行期更改PC的途径,否则无法做到切换。一般CPU都允许通过类似JMP,CALL这样的指令来间接的修改PC。多任务机制的实现也正是基于这个出发点,使用CALL指令或者软中断指令来修改PC,主要是软中断。但在一些CPU上,并不存在软中断这样的概念,所以,在那些CPU上使用几条PUSH指令加上一条CALL指令来模拟一次软中断的发生。

在μC/OS-II里,每个任务都有一个任务控制块(Task Control Block),这是一个比较复杂的数据结构。在任务控制块的偏移为0的地方,存储着一个指针,它记录所属任务的专用堆栈地址。在μC/OS-II内,每个任务都有自己的专用堆栈,彼此之间不能侵犯。一般做法是把他们申明成静态数组,且要申明成OS_STK类型。当任务有自己的堆栈,就可以将每一个任务堆栈在那里记录到前面谈到的任务控制快偏移为0的地方。每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者时钟中断实现。然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。由于任务的堆栈里一定存的是地址,就达到修改PC为下一个任务的地址的目的。

5

2.2 μC/OS-II的组成部分

μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。

(1)核心部分(Os Core.c)

是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断退出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。

(2)任务处理部分(Os-task.c)

任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为μC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。

(3)时钟部分(Os-time.c)

μC/OS-II中的最小时钟单位是time tick(时钟节拍)。任务延时等操作是在这里完成的。

(4)任务同步和通信部分

为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。

(5)与CPU的接口部分

是指μC/OS-II针对所使用的CPU的移植部分。由于μC/OS-II是一个通用性的操作系统,对于关键问题的实现,是需要根据具体CPU的具体内容和要求作相应的移植。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。

2.3 μC/OS-II操作系统移植 2.3.1 OS_CPU.H文件的移植

OS_CPU.H 包括了用#defines 定义的与处理器相关的常量、宏和类型定义。OS_CPU.H的程序结构如下所示。

6

#if-def OS_CPU_GLOBALS #define OS_CPU_EXT #else

#define OS_CPU_EXT extern

#en dif /* 数据类型 (与编译器相关) */ type def unsigned char BOOLEAN;

type def unsigned char INT8U; /* 无符号8位整数 */

type def signed char INT8S; /* 有符号8位整数 */

type def unsigned int INT16U; /* 无符号16位整数 */

type def signed int INT16S; /* 有符号16位整数 */

type def unsigned long INT32U; /* 无符号32位整数 */

type def signed long INT32S; /* 有符号32位整数 */

type def float FP32; /* 单精度浮点数 */

type def double FP64; /* 双精度浮点数 */

type def unsigned char OS_STK; /* 堆栈入口宽度为8位 */

/* 与处理器相关的代码

*/

#define OS_ENTER_CRITICAL() EA = 0 /* 禁止中断 */

#define OS_EXIT_CRITICAL() EA = 1 /* 允许中断 */

#define OS_STK_GROWTH 0 /* 定义堆栈的增长方向 */

#define OS_TASK_SW() Oscitant()

(1)与编译器相关的数据类型

因为不同的微处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的类型定义以确保其可移植性。尤其是,μC/OS-Ⅱ代码从不使用 C 的 short,int 和 long 等数据类型,因为其是与编译器相关的,不可移植。相反的,将其定义成整型数据结构既是可移植的又是直观的。为了方便, μC/OS-Ⅱ虽然不使用浮

7

点数据,但还是定义浮点数据类型。μC/OS-Ⅱ和用户的应用程序就可以估计出声明为该数据类型的变量的数值范围是 0~65535。将 μC/OS-Ⅱ移植到32 位的处理器上也就意味着 INT16U 实际被声明为无符号短整型数据结构而不是无符号整型数据结构。但是,μC/OS-Ⅱ所处理的仍然是INT16U。

用户必须将任务堆栈的数据类型告诉给μC/OS-Ⅱ。这个过程是通过为OS_STK声明正确的 C 数据类型来完成的。MCS-51 系列单片机的堆栈成员是 8 位的,并且用户的编译文件指定字符型为8位数,所以应将OS_STK声明为无符号字符型数据类型。

(2)OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()

与所有的实时内核一样,μC/OS-Ⅱ需要先禁止中断再访问代码的临界段,并且在访问完毕后重新允许中断。这就使得μC/OS-Ⅱ能够保护临界段代码免受多任务或中断服务例程(ISR)的破坏。中断禁止时间是商业实时内核公司提供的重要指标之一,因为它将影响到用户的系统对实时事件的响应能力。虽然 μC/OS-Ⅱ尽量使中断禁止时间达到最短,但是μC/OS-Ⅱ的中断禁止时间还主要依赖于处理器结构和编译器产生的代码的质量的。通常每个处理器都会提供一定的指令来禁止/允许中断,因此用户的C编译器必须要有一定的机制来直接从C中执行这些操作。有些编译器能够允许用户在C源代码中插入汇编语言声明。这样就使得插入处理器指令来允许和禁止中断变得很容易。其它一些编译器实际上包括语言扩展功能,可以直接从 C 中允许和禁止中断。μC/OS-Ⅱ 定义两个宏来禁止和允许中断:OS_ENTER_CRITICAL() 和

OS_EXIT_CRITICAL()。

OS_ENTER_CRITICAL() 用来关中断,OS_EXIT_CRITICAL()用来开中断。执行这两个宏的最简单的方法是在 OS_ENTER_CRITICAL()中调用处理器指令来禁止中断,以及在 OS_EXIT_CRITICAL()中调用允许中断指令。本移植过程就是通过这种方法来禁止允许中断的。在本移植对象中,所选用的 MCS-51 系列单片机是通过中断允许寄存器(IE)来控制中断的。IE的最高位EA为CPU中断标志位,当 EA=0 时为关中断,当EA=1时为开中断。由于该部分与处理器相关,固应对它们进行宏定义,以便移植。

(3)OS_STK_GROWTH

8

绝大多数的微处理器和微控制器的堆栈是从高地址往低地址增长的。但是某些处理器是从低地址向高地址增长的。μC/OS-Ⅱ被设计成两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的生长方式即可。

1)置OS_STK_GROWTH为0表示堆栈从低地址向高地址增长。 2)置OS_STK_GROWTH为1表示堆栈从高地址向低地址增长。 (4)OS_TASK_SW()

OS_TASK_SW()是一个宏,它是在 μC/OS-Ⅱ从低优先级任务切换到最高优先级任务时被调用的。OS_TASK_SW()总是在任务级代码中被调用的。另一个函数OSIntExit()被用来在 ISR 使得更高优先级任务处于就绪状态时,执行任务切换功能。任务切换只是简单的将处理器寄存器保存到将被挂起的任务的堆栈中,并且将更高优先级的任务从堆栈中恢复出来。

在μC/OS-Ⅱ中,处于就绪状态的任务的堆栈结构看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。为切换任务可以通过执行 OS_TASK_SW()来产生中断。大部分的处理器会提供软中断或是陷阱(TRAP)指令来完成这个功能。ISR 或是陷阱处理函数(也叫做异常处理函数)的向量地址必须指向汇编语言函数OSCtxSw()。

2.3.2 OS_CPU_C.C 文件的移植

μC/OS-Ⅱ的移植实例需要编写六个简单的C函数: 1)OSTaskStkInit(); 2)OSTaskCreateHook(); 3)OSTaskDelHook(); 4)OSTaskSwHook(); 5)OSTaskStatHook(); 6)OSTimeTickHook();

唯一必要的函数是OSTaskStkInit(),其它五个函数必须得声明但没必要包含代码。

9

3 系统硬件设计

3.1 方案研究

(1)方案一

使用ISD语音芯片和LED点阵模块构成。其具有下列特点:①具有高的语音录放质量及实用性,可重复使用;②抗干扰能力强,稳定性好;③信号易于处理、传送和自动控制;④便于现场录制播放,播放语音显示效果好⑤安装方便,维护简单,工作可靠性高。ISD语音芯片可以采用美国ISD(Information Storage Devices)公司的ISD4004系列芯片,这类芯片采用直接模拟存储专利技术,把语音信号以原始的模拟形式直接存储在片内EEPROM存储器中,无需进行A/D 转换和压缩处理等,从而减少了失真、大大提高了录放音质量,并具有抗断电、音质好、使用方便、可反复录放、无需专用的语音开发工具、能随意列改内容和耗电省等优点,很适合于现场录放音系统。

比较两个方案后可以发现,方案二更适合于用作本系统的实施方案。尽管方案二不需要A/D,但考虑到系统扩充等因素,单片机可以选用STC89C52RC。

(2)方案二

利用8031单片机作为CPU来进行总体控制,当汽车到达某站时,汽车司机通过键盘来控制本系统进行工作,并且,系统将使用状态指示电路,向司机指示出当前的行驶方向及站号(如与实际方向不符,司机可通过键盘来调整)。原理图框图如图2.1所示。

语音输入输出电路 语音合成电路 8031小系统 LED点阵显示电路 键盘 状态指示电路 图3.1 原理框图

10

本系统使用8031作为CPU,由CPU来控制语音合成芯片TC8830AF,使其工作在CPU控制模式下。当系统进行语音再生时,由CPU控制语音合成电路中的语音芯片来读取其外接的存储器内部的语音信息,并合成语音信号,再通过语音输出电路,进行语音报站和提示。CPU同时通过程序读取汉字信息,送入LED点阵显示电路来进行汉字提示。当系统进行语音录制时,语音信号通过语音输入电路输入给语音合成电路中的语音合成芯片,由语音合成芯片进行数据处理,并将生成的数字语音信息存储到语音存储芯片中,从而建立语音库。

3.2 方案选择

将方案一与方案二进行比较,方案二是采用8031单片机控制,通过键盘来控制报站时刻,并不完全符合设计的要求,它仍然需要操作员手动控制,所以本课题决定选用方案一,它使用STC89C52RC作为主控制芯片,通过对里程的计数来控制报站时刻,完全无需人工介入,选用的语音芯片是美国ISD公司的ISD4004,该芯片与其它语音芯片相比较,其语音音质好,录放时间长。

3.3 电路原理的总体设计

基于ISD4004语音芯片的语音报站汉字显示系统的设计研制过程主要包括:总体设计、硬件设计、软件设计、仿真调试等几个阶段。对于总体设计,主要是画出原理框图、确定出主要技术指标。如图3.2所示:

STC89C52RC LED点阵汉字显示 语音录放电路 电源电路 按键控制 图3.2系统总体设计框图

单片机芯片是与MCS-51 兼容的STC89C52RC,STC89C52RC单片机带8K

11

字节闪烁可编程可擦除只读存储器的低电压、高性能8位微处理器。

语音录放电路使用的是ISD4004-8MS以及其外围录放电路,外围电路相当简单;由于其可以进行直接模拟信号的存储,省去了信号模数转换的相关电路,使得信号更加的稳定、录放音质量好。同时单片8至16 分钟语音录放,内置微控制器串行通信接口,3V单电源工作,多段信息处理,工作电流25-30mA,维持电流1μA,不耗电信息保存100 年(典型值),高质量、自然的语音还原技术,10 万次录音周期(典型值),自动静噪功能,片内免调整时钟,可选用外部时钟。利用9014三极管对录制语音进行放大处理,同时通过LM386及喇叭,对输出语音信号进行放大播放,让语音质量以及稳定性更加高。

汉字显示电路采用的是16*16 LED点阵显示。一种方法属于静态显示。显然,静态显示需占用较多的I/O口线。另一种是动态扫描显示。通过控制各个显示器公共阳极轮流接高电平的办法,逐一轮流地启动各个LED。动态显示法是目前各种单片机采用的流行方法。其优点是硬件简单,“动态”由软件实现。因而选用动态显示的方法。

电源电路是给语音芯片ISD4004提供3V稳压电源,利用LM317,通过电阻分压,输出稳定的3V稳定电源,让语音芯片可以正常的工作。实现语音录制播放功能。

按键控制电路完成对语音播放以及汉字显示开始的控制,通过对单片机相关引脚的高地电平的控制,从而完成对语音芯片的控制,从而达到完成语音报站汉字显示功能。

3.3 芯片选择

3.3.1 STC89C52RC单片机芯片

STC89C52RC是STC公司生产的低电压,高性能CMOS8位单片机,片内含8Kb的可反复擦写的Flash只读程序存储器和512b的随机存取数据存储器(RAM),器件采用高密度,非易失性存储技术生产,兼容标准MCS—51指令

12

系统,片内置通用中央处理器(CPU)和Flash存储单元,功能强大STC89C52RC单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。单片机的可擦除只读存储器可以反复擦除100000次。将多功能8位CPU和闪烁存储器组合在单个芯片中,是一种高效微控制器, STC89C52RC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如图3.1

图3.3 STC89C52RC管脚图

STC89C52RC有P0、P1、P2、P3四个端口,共有32I/O口,P3口也可作为一些特殊功能口,如下表所示:

表3.1 P3口的第二功能

口 线 第 二 功 能 P3.0 P3.1 P3.2 P3.3 P3. 4 P3. 5 P3. 6 P3. 7 RXD TXD INT0 INT1 T0 T1 WR RD 串行数据接收(输入)端 串行数据发送(输出)端 外部中断0输入端 外部中断0输入端 定时/计数器T0的外部输入端 定时计数器T1的外部输入端 外数据存储器写选通信号,低电平有效 外数据存储器读选通信号,低电平有效 P3口同时为闪烁编程和编程校验接收一些控制信号。 STC89C52RC单片机主要性能参数:

13

? 时钟频率(HZ):0~80M ? 8Kash程序存储器 ? 512内程序存储器(RAM) ? 2个数据指针

? 3个16位定时器/计数器T0/T1

? 4个8位输入输出接口(P0~P3),共32根I/O口线 ? 8个中断源 ? 4个优先级

3.3.2 ISD4004语音芯片

ISD4000系列单片声音录放器件是用CMOS工艺实现的高语音质量、3V工作电压的集成电路芯片,特别适用于移动电话和各种便携式产品[7]。按录放时间又分ISD4002、ISD4003和ISD4004三个子系列。片内集成有振荡器、抗混叠滤波器、平滑滤波器、自动静音电路、音频放大器和高密度多级Flash存储阵列。这个系列的新片要求用于微处理器或微控制器系列,通过串行外围接口SPI或Microwire串行接口进行寻址和控制。录音数据被存放方法是通过ISD的多级存储专利技术实现的,用声音和声频信号的自然形式直接存放在故态存储器中,从而提供高质量回放语音的保真度。

(1)ISD4004的主要性能及其特点

1)单片实现声音录放功能;采用单一3V工作电压;

2)低功耗:典型的录音工作电流为25mA;典型的放音工作电流为15mA; 3)典型待机节能状态电流为1uA ;单片录放时间为8min、10min、12min和16min;

4)高质量自然的声音/音频回放;自动静音电路可以在无声状态时消除背景噪音;

5)不需要考虑实现算法;具有微控制器SPI或Microwire串行接口;

6)可以对多段信息寻址控制;可以通过SPI或Microwire控制寄存器控制

14

功耗;

7)语音数据断电不丢失,可以保存100年;允许反复录音10万次 8)片上带有时钟源;有PDIP、SOIC、TSOP和CSP多种封装形式; (2)外部引脚及其说明

/SSMOSIMISOVSSDNCNCNCNCNCNCVSSAVSSAAUDOUTAMCAP1282ISD40042732642552462372282192010191118121713161415SCKJVCCDXCLKINTRACVSSANCNCNCNCVCCAANA IN+ANA IN-NC

图3.4 ISD4004引脚图

电源 (VCCA,VCCD):为使噪声最小,芯片的模拟和数字电路使用不同的电源总线,并且分别引到外封装的不同管脚上,模拟和数字电源端最好分别走线,尽可能在靠近供电端处相连,而去耦电容应尽量靠近器件。

地线(VSSA,VSSD):芯片内部的模拟和数字电路也使用不同的地线。 同相模拟输入(ANA IN+): 这是录音信号的同相输入端。输入放大器可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3KΩ电阻输入阻抗决定了芯片频带的低端截止频率。差分驱动时,信号最大幅度为峰峰值16mV,与ISD33000系列相同。

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

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

片选(SS):此端为低,即向该ISD4004芯片发送指令,两条指令之间为高电平。

串行输入(MOSI):此端为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD输入。

串行输出(MISO):ISD的串行输出端。ISD未选中时,本端呈高阻态。

15

串行时钟(SCLK):ISD的时钟输入端,由主控制器产生,用于同步MOSI和MISO的数据传输。数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。

中断(/INT):本端为漏极开路输出。ISD在任何操作(包括快进)中检测到EOM或OVF时,本端变低并保持。中断状态在下一个SPI周期开始时清除。中断状态也可用RINT指令读取。OVF标志----指示ISD的录、放操作已到达存储器的未尾。EOM标志----只在放音中检测到内部的EOM标志时,此状态位才置1。

行地址时钟(RAC):漏极开路输出。每个RAC周期表示ISD存储器的操作进行了一行(ISD4004系列中的存贮器共2400行)。该信号175ms保持高电平,低电平为25ms。快进模式下,RAC的218.75μs是高电平,31.25μs为低电平。该端可用于存储管理技术。

外部时钟(XCLK):本端内部有下拉元件。芯片内部的采样时钟在出厂前已调校,误差在 +1%内。商业级芯片在整个温度和电压范围内, 频率变化在+2.25%内。工业级芯片在整个温度和电压范围内,频率变化在-6/+4%内,此时建议使用稳压电源。若要求更高精度,可从本端输入外部时钟(如前表所列)。由于内部的防混淆及平滑滤波器已设定,故上述推荐的时钟频率不应改变。输入时钟的占空比无关紧要,因内部首先进行了分频。在不外接地时钟时,此端必须接地。

自动静噪(AMCAP):当录音信号电平下降到内部设定的某一阈值以下时,自动静噪功能使信号衰弱,这样有助于养活无信号(静音)时的噪声。通常本端对地接1mF的电容,构成内部信号电平峰值检测电路的一部分。检出的峰值电平与内部设定的阈值作比较,决定自动静噪功能的翻转点。大信号时,自动静噪电路不衰减,静音时衰减6dB。1mF的电容也影响自动静噪电路对信号幅度的响应速度。本端接VCCA则禁止自动静噪。

3.3.3元器件清单

表3.2元器件清单

器件名称 芯片 规格型号 数量 1 1 4 STC89C52RC ISD4004 74HC138

16

LM317 电阻 电容 按键 LED点阵 扬声器 二极管 晶振 3WTT10k 20PF 8*8 1 9 10 3 4 1 1 1

3.4 硬件电路设计 3.4.1电源电路

由于语音芯片ISD4004的工作电压时3V,不同于单片机的5V工作电压,所以就必须有电源电路,提供3V的稳定电压,本电路才用LM317电源电路,5V进,3V出的一个稳压电路,很适合于产品电源。利用电容滤波,使语音电路噪声减少。电路图如图3.5所示。

图 3.5 电源电路

17

3.4.2 LED点阵显示电路

图 3.6 LED点阵显示电路

在这次显示电路的设计中使用了四个8*8 LED点阵,利用74HC138译码器的E1、E2低有效,E3高电平有效进行点阵行列的控制显示,然后通过单片机控制,进行汉字的显示。电路图如图3.6所示。

3.4.3语音录放音电路

语音录放电路如下:使用的是ISD4004-8MS以及其外围录放电路,外围电路相当简单。由于其可以进行直接模拟信号的存储,省去了信号模数转换的相关电路,使得信号更加的稳定、录放音质量好。同时单片8至16 分钟语音录放,内置微控制器串行通信接口,3V单电源工作,多段信息处理,工作电流25-30mA,维持电流1μA,不耗电信息保存100 年,高质量、自然的语音还原技术,10 万次录音周期,自动静噪功能,片内免调整时钟,可选用外部时钟。利用9014三极管对录制语音进行放大处理,同时通过LM386及喇叭,对输出语音信号进行放大播放,让语音质量以及稳定性更加高。电路图如图3.7所示。

18

图3.7 ISD4004 语音录放电路

3.4.4按键控制电路

利用按键与单片机相关引脚进行连接,我们都知道单片机的引脚在工作状态时无负载时均是高电平,故如果需要进行相关控制,只需其通过按键与地连接,然后通过程序控制,当按键按下时,程序控制其他的引脚高低变化,从而让语音报站以及汉字显示。电路图如图 3.8所示。

19

图3.8按键控制电路图

本章节主要是对电路的硬件个部分的设计,电路的各部分硬件功能设计基本完成。 3.5硬件电路总体设计

根据以上的语音录放电路、电源电路、按键电路以及LED点阵显示电路的设计,构成了整体系统的总电路图,具体电路见附录1

20

4 系统软件设计

4.1 系统软件结构

整个程序包括主程序和延时子程序以及ISD语音录放程序等几部分。STC89C52RC单片机提供了用户按键、显示和ISD4004所需接口。它接收击键功作,并将相应指令传给ISD4004,同时监控ISD4004的中断输出。当开关闭合时,读取ISD4004的状态寄存器,从而根据OVF和EOM的状态进行相应的处理。当OVF=1,即存储器溢出时,则不管当前为何种状态均将ISD4004的地址置零,并继续运行原指令;当EOM=1时,当前状态只可能为放音或快进,若为快进则置为放音态,并继续运行。如此设计便实现了循环录放的功能,同时在快进时,自动停止在下一个语音段开始处,并继续放音。流程图如图4.1所示。

21

图4.1主程序开始 流程图 程序就是为计算机某一算式或完成某一工作的若干指令的有序集合。计算机的全部工作概括起来就是执行这一指令序列的过成。这一指令序列称为程序。主程序主要调用了4个子程序,分别是延时子单片机语音芯片初始化 设置允许外部中断T0, 并打开全局中断允许位 程序、ISD4004语音录放程序、LED点阵显示子程序、中断控制程序等。 4.2 系统软件设计 按键扫描 PR是否为1? N Play模式 N Y REC模式 按键是否按下? Y N 按键是否按下? 4.2.1 延时设计 录音播放 Y 语音录制 N Y 汉字滚动显示 为了精确的控制单总线N 接口的特殊时序要求,延时函停止键是否按下? Y 停止键是否按下? 数是相当关键

22

的,它是所有读控制和写控制的组成部分以及显示时延时用;下面us的延时(12M)延时子程序和ms的延时(12M)延时子程序。 void delay1(void) {

int16 i;

for (i=0;i<50;i++) ; }

void delay(unsigned int time) //延时n微秒 {while(time!=0) {time--; } }

void delayms(unsigned char g){/*延时gms*/ unsigned char i,j; }

for(i=0;i

4.2.2 语音录放设计

//*********************************** //入口:放音位置的高低位 //放音程序

//功能:从指定位置放音

//*********************************** void play(unsigned char adl,unsigned char adh) {

unsigned char ovflog; while(AN == 0) {;}

isd_setplay(adl,adh); //发送setplay指令,从0x0000地址开始放音 do

23

{

isd_play(); //发送放音指令 delay(20);

while(ISD_INT == 1) //等待放音完毕的EOM中断信号 {;}

LED2 = 1;

isd_stop(); //放音完毕,发送stop指令

if(ovflog == chk_isdovf()) //检查芯片是否溢出,如溢出则停止放音,芯片复位 break;

while(AN == 1) //等待AN键再次按下 {

if(STOP == 0) break;

if(AN == 0) delayms(20); }

}while(AN == 0); //An键再次按下,播放下一段语音 }

4.2.3 中断控制设计

中断定时控制程序,对LED点阵动态扫描进行控制,同时也对汉字显示进行中断控制,让汉字可以按照从右至左的顺序进行滚动显示。 /*****定时器T0中断子程序*******/ void timer0() interrupt 1 using 3 {

TF0=0; TH0=0xb1; TL0=0xe0; if (n<10) { n++; } else

24

{ offset+=2; if (offset>860) offset=0; n=0; } }

4.2.4 LED点阵汉字显示设计

该程序段主要完成向LED点阵点阵动态扫描显示,控制系统的汉字显示部分。

/*********汉字显示函数**************/

while (1) {

for (i=0;i<8;i++) //显示左半边屏幕 {

P0=*(p+offset+2*i);

P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6 delay1();

P0=*(p+offset+2*i+1);

P2=i|0x10; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7 delay1(); }

for (i=8;i<16;i++) //显示右半边屏幕 {

P0=*(p+offset+2*i);

P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8 delay1();

P0=*(p+offset+2*i+1);

P2=(i-8)|0x40; / /P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9 delay1(); }

25

5 软件程序调试

5.1 调试软件

Keil C51软件是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编语言、PLM语言和C语言的程序设计,界面友好,易学易用。

1)Keil的μVision3可以进行纯粹的软件仿真(仿真软件程序,不接硬件电路);也可以利用硬件仿真器,搭接上单片机硬件系统,在仿真器中载入项目程序后进行实时仿真;还可以使用μVision3的内嵌模块Keil Monitor-51,在不需要额外的硬件仿真器的条件下,搭接单片机硬件系统对项目程序进行实时仿真。 2) uVision3调试器具备所有常规源极调试,符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。DDE界面和shift语言支持自动程序测试。

5.2 软件程序测试

1) 工程设置

根据系统电路中晶振参数对工程中STC89C52进行设置, 将Xtal(MHz)项中参数改为12.0,与晶振频率相同。 2) 程序调试

对程序中参数进行调整需进入调试模式,按按钮

进入调试模式,由于该

模式下可单步执行程序且左边框图同步显示运行时间值,所以可以随意对参数进行设置,直到得到所要求的功能。程序调试图如图5.1所示。

26

图5.1 程序调试图

5.3 系统电路功能仿真

利用protus绘制仿真图。整个仿真图的绘制过程主要有以下几部组成:首先新建一个protus的工程,在元件库里面搜索所需要的元器件,在元器件上单击右键选中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出绘制各种需要的线条和其他一些相关的线条和器件,进行节点出是否连接好进行检查,为下一步的系统仿真作准备。画出的仿真电路图如图5.2所示:

27

图5.2 仿真电路图

5.4 Keil与Proteus对系统联调

Proteus与Keil两个软件可以进行联调,这一强大功能是其他软件无法办到的,仿真时通过KEIL C51和Protus结合实现的。首先,要将KEIL C51中调试成功的程序生成.HEX文本并保存,在Protus中的主芯片STC89C52RC中导入此文本,即可在Protus环境中实现系统的仿真。 1) Keil与Proteus联调,如图5.3所示。

图 5.3 联调图

2) 无故障正常时,即正常,P0输出扫描码,P2输出汉字码,点阵正确显示,测试图如图5.4所示:

28

图5.4 工作时仿真电路图

利用仿真软件对所编写的程序进行调试,联机前先断电,把将调试成功的程序下载到STC89C52 芯片中,检查一下电路之间的电源、接地是否良好,若一切正常,即可打开电源。在系统的调试过程中不是希望中的顺利,在调试中出现了问题,一点点的解决,软、硬件调试出预期的结果。

29

6 总结与展望

在科技高速发展的今天,公交车在城市交通事业中占有举足轻重的地位,它给人们外出提供了方便快捷的服务,而报站器直接影响到公交车的服务质量,因此,我认为在不久之后,自动报站器将完全取代传统的人工报站,普遍使用于各大、中、小城市。

6.1总结

我毕业设计的题目是嵌入式公交车汉字显示系统的设计,经过几个月的奋斗,终于完成了设计,使系统实现了汉字显示以及自动报站功能。本设计是基于嵌入式的公交车语音文字报站系统,使用STC89C52RC单片机作为主控制器,通过与语音芯片ISD4004,LED点阵电路的连接完成语音录制、播放和按键电路等功能。文中详细介绍了ISD4004内部结构、各引脚功能、工作原理等。系统其他部分包括人机界面(键盘控制)技术的实现和抗干扰设计等。

通过本次设计,我不仅学习到了MCS-51系列单片机的知识,更拓展了自己的视野,培养了自己的学习能力。这些进步对以后的工作学习肯定会有很大的帮助。

该设计的创新之处在于它很好的实现了车辆报站的自动化,具有很强的实用性。系统选用ISD4004语音芯片,它的录音数据被存放方法是通过ISD多级存储专利技术实现的,用声音和声频信号的自然形式直接存放在故态存储器,从而提供高质量回放语音的保真度,使得该系统与其他语音报站系统相比较,语音质量较好。另外,本设计仍然存在的许多的不足之处,存在一定的误差。这些问题都需要在今后的研究工作中加以改进,使系统更完善,更好的为人们服务。

6.2展望

本毕业设计是基于嵌入式的公交车汉字显示系统的设计与实现,在此基础上仍可扩展以下功能。

1)使用GPS定位公交车,从而自动报站及显示。

30

2)应用89C51单片机的高速计数器端口进行脉冲计数,以距离来控制报站时刻并且控制LED点阵电路显示该站点的信息,很好的实现了公交车的自动化。

3)采用单片机接受无线模块发送过来的数据并且判断这个数据是那个站点的数据,从而控制语音芯片播送语音并且控制LED点阵电路用汉字显示该站点的信息

31

参考文献

[1]胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2004 [2]潘新民、王燕芳.微型计算机控制技术.北京:电子工业出版社,2006 [3]康华光.电子技术基础数字部分.北京:高等教育出版社,2002 [4]郭天祥.51单片机C语言教程.北京:电子工业出版社,2009 [5]王东等.基于GPS的公交车自动报站系统的设计.微型机与应,2010 [6]杨烈军.基于RFID的智能公交报站系统.长春理工大学学报,2011 [7]王娟等.公交自动报站系统的设计.自动化技术与应用,2010

[8]Winbond. ISD4004 Series Single-Chip Voice Record/Playback Devices.California: Information Storage Devices, Inc,2000

[9]National Semiconductor. LM2576/LM2576HV Series Step-Down Voltage Regulator. Hong Kong: National Semiconductor Asia Pacific Customer Support Center,2004

[10] 余锡存. 单片机原理及接口技术. 西安电子科技大学出版社,2000 [11] 王金凤.单片机实用系统设计技术. 国防工业出版社,1999 [12] 潘永雄.新编单片机原理与应用. 西安电子科技大学出版社,2003 [13] 周航慈.单片机应用程序设计技术. 北京航空航天大学出版社,1999 [14] 赵佩山.单片机接口技术及应用. 机械工业出版社,2000

32

致谢

毕业设计终于在王元一老师和赵金龙老师的悉心指导下完成了。作为一名即将离开大学校门的学生,我把本次设计看作是大学中的最后一门功课,投入了巨大的时间和精力。设计题目是嵌入式公交汉字显示系统的设计。由于在大学中重点学习的是强电方面的知识,仅靠自己的力量完成设计任务的难度是相当大的。在制作设计的过程中,我确实遇到了许多棘手的问题,碰到了很多的困难。但是,这些问题和困难在和同学们的帮助下都被一一解决。

本毕业设计虽然凝聚着自己的汗水,但更感谢老师的指引,没有老师和朋友的帮助和支持,此次设计不会有这么顺利;当我完成毕业论文时,涌上心头的不是长途跋涉后抵达终点的欣喜,而是源自心底的诚挚谢意。我首先要感谢我的导师王元一老师和赵金龙老师,给予我宝贵的意见、严格的要求和细心的指导。王老师和赵老师他们思维敏锐,治学严谨,科研上具有敏锐的科研观察力、丰富的科研经验,求真务实,对新知识、新事物有独到的理解,生活上平易近人。给我留下了深刻的印象。

通过这次的设计使我认识到我对嵌入式方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。此次的公交车汉字显示系统的设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。

另外 ,在设计中,许多同学也给予了我无私的帮助,也感谢他们!同时感谢学校老师师对我的照顾和帮助,让我的学业取得了不小的进步。我的成长是离不开他们的关心和帮助的。总之,感谢所有帮助和关心过我的人,真诚的向你们表示谢意!

33

附录1 系统原理图

34

附录2 源程序代码

#include

#define int8 unsigned char #define int16 unsigned int #define int32 unsigned long

sbit SS=P1^0; //片选 sbit SCLK=P3^1; //ISD4004时钟

sbit MOSI=P3^0; //数据输入 sbit MISO=P1^1; //数据输出 sbit LED1=P1^7; //指示灯 sbit LED2=P3^2; //指示灯 sbit ISD_INT=P1^2; //中断 sbit AN=P1^5; //执行 sbit STOP=P1^6; //复位 sbit PR=P1^3;//PR=1 录音 PR=0放音 int8 flag; int8 n;

int8 code table[][32]={

{0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00},/*\欢\

{0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00},/*\迎\

{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*\您\

{0x44,0x10,0x44,0x14,0x88,0x54,0x88,0x54,0xD0,0x5F,0x30,0x50,0x60,0x50,0xFE,0x7F,0x40,0x50,0x20,0x90,0xB0,0x9F,0x98,0x92,0x8C,0x94,0x88,0x34,0x80,0x11,0x00,0x00},/*\乘\

{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*\坐\

35

本文来源:https://www.bwwdw.com/article/bftg.html

Top