万方科技学院模拟电子琴发声控制系统

来源:雅思 发布时间:2020-08-21 点击:

  河 南 理 工 大 学 学

  《单片机应用与仿真训练》设计报告

 模拟电子琴发声控制系统

 姓

 名:

 学

 号:

 专业班级:

 指导老师:

 所在学院:

 电气工程与自动化学院

 2012 年 6 月 27 日

 摘

 要

 本设计是一个基于单片机的简易电子琴,它是以单片机作为主控核心,设臵键盘、蜂鸣器等外围器件;另外还用到一些简单器件如:

 NPN 型三极管及电阻等。利用按键实现音符和音调的输入;用 NPN 型三极管 8550 实现低音频功率放大;最后用蜂鸣器进行播放“世上只有妈妈好”。

 本设计硬件部分主要由最小系统,按键系统模块、数码管显示模块和蜂鸣器模块组成。其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。

 (1)最小系统:它是单片机应用系统的设计基础。它包括单片机的选择、时钟系统设计、复位电路设计、简单的 I/O 口扩展、掉电保护等。

 (2)按键系统模块:本设计采用 10 个按键,其中 7 个按键用来显示 7 个音调,其它 3 个按键可以进行高低中音的切换,并自动播放已存歌曲。

 (3)蜂鸣器模块:此电子琴发音电路是通过三极管驱动蜂鸣器发音,经过上拉电阻提高驱动能力。

 本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共 21 个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。

 目

 录

 . 1. 概述

 ................................ ................................ ................................ ................................ ...........

 3 3

  1.1 设计背景 .............................................................................................................................. 3 1.2 设计意义 .............................................................................................................................. 3 1.3

 设计任务 ............................................................................................................................. 3

 . 2. 系统总体方案及硬件设计

 ................................ ................................ ................................. ...

 4 4

 2.1 总体设计 .............................................................................................................................. 4 2.2 单片机选型 ......................................................................................................................... 4 2.3

 原理框图 ............................................................................................................................. 5 2.4 显示部分设计 ..................................................................................................................... 5 2.5

 按键部分设计 .................................................................................................................... 5 2.6 发音部分设计 ..................................................................................................................... 7

 . 3. 系统软件设计

 ................................ ................................ ................................ .........................

 8 8

 3.1 系统分析 .............................................................................................................................. 8 3.2

 参数计算 ........................................................................................................................... 10 3.3 程序设计 ............................................................................................................................ 10

 S 4. PROTEUS 软件仿真

 ................................ ................................ ................................ ..........

 14

 4.1 硬件调试 ............................................................................................................................ 14 4.2

 软件调试 ........................................................................................................................... 14 4.3

 仿真结果 ........................................................................................................................... 14 4.4

 结果分析 ........................................................................................................................... 15

 5. 课程设计体会

 ................................ ................................ ................................ .....................

 16

 参考文献

 ................................ ................................ ................................ ................................. ...

 17

 附 附 1

 源程序代码

 ................................ ................................ ................................ ...................

 18

 附 附 2

  系统原理图

 ................................ ................................ ................................ .................

 23

 . 1. 概述

 1.1 设计背景 随着电子科学技术的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们带来更多的生活乐趣。

 基于当前市场上的玩具需求量增大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件来实现电子琴的功能,从而可以实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“1”到“A”键演奏从低 So 到高 DO等 11 个音,从而也可以通过单片机实现对十个按键的扩展,实现七个音符键的高、中、低 21 个音调的显示播放和任意音乐的自动播放。该设计将十个音键制作成独立键盘,其中七个为音符键,三个为控制键,并用数码管进行显示,使电子琴的功能更加完美。不但可以实现对按键的显示,而且可以实现对音乐的自动存储和播放,使该设计功能更加完善。

 1.2 设计意义 该设计具有以下优点:

 ①可以方便得知播放的音符和音调; ②比传统电子琴功能更完善;

 ③制作简单,成本低; 1.3 设计任务

  实现电子琴发声控制系统;要求电路实现如下功能:

 利用蜂鸣器作为发声部件,设臵 10 个按键,实现高音、中音、低音的 1、2、3、4、5、6、7 的发音。并在存储一首歌曲的内容,可以实现自动播放。

  用 PROTEUS 实现的电子琴仿真设计 说明:单片机的工作时钟频率为 11.0592MHz。

 . 2. 系统总体方案及硬件设计 2.1 总体设计

 采用 AT89S52 单片机作为主控芯片,设臵键盘、蜂鸣器等外围器件,另外还用到一些简单器件如:NPN 型三极管及电阻等。利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用 NPN 型三极管 8550 实现低音频功率放大;最后用蜂鸣器发音。

 2.2 单片机选型 硬件电路要以单片机作为主控芯片,实现按键输入音符和音调,两位数码管的显示以及低音频功率放大和蜂鸣器发音。针对本设计的功能和用途,采用AT89S51 单片机更好,实现功能完全,性价比较高,更适合本设计。

 时钟电路

 单片机内部具有一个高增益反相放大器,用于构成振荡器。通常在引脚XTALl 和 XTAL2 跨接石英晶体和两个补偿电容构成自激振荡器,结构图 2 中X1、C1、C2。可以根据情况选择 6MHz、12MHz 或 24MHz 等频率的石英晶体,补偿电容通常选择 30pF 左右的瓷片电容。

 图 2-1、时钟电路

 复位电路

  单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。上电复位要求接通电源后,自动实现复位操作。手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。其结构如下图。

 上电自动复位通过电容 C3 充电来实现。手动按键复位是通过按键将电阻 R1 与VCC 接通来实现。

 图 2-2、复位电路

 2.3 原理框图

  本系统有主控芯片 89S52、发音单元、显示模块、按键模块组成。

  图 2-3、原理框图

 2.4 按键部分设计 键盘设计 键盘在单片机应用系统中是一个关键的部件,它能实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。

 89S52单片机

 发音模块

 LED 显示模块

 按键控制模块

 键盘可以分为 2 类:独立连接式键盘和矩阵式键盘。

 独立连接式键盘 独立式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根 I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。独立式按键电路配臵灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,然而,在按键较多时,I/O 口线浪费较大,不宜采用。

 独立式按键软件常采用查询式结构。先逐位查询每根 I/O 口线的输入状态,如某一根 I/O 口线输入为低电平,则可确认该 I/O 口线所对应的按键已按下,然后,再转向该键的功能处理程序。由于本程序较为简单,为了使用方便及节省资源,选择独立式键盘。下图为独立式键盘电路图:

  图 2-5、独立式键盘电路图 去抖 键盘编程中主要考虑去抖动的问题。

 当测试表明有键被按下之后,紧接着就进行去抖动处理。因为键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。为保证键识别的准确,在电压信号抖动的情况下不能进行行状态输入。为此需进行去抖动处理。去抖动有硬件和软件两种方法。硬件方法就是加去抖动电路,从根本上避免抖动的产生。软件消抖,在第一次检测到有键按下时,执行一段延时程序之后,再检测此按键,如果第二次检测结果仍为按下状态,CPU便确认此按键己按下,消除了抖动。

 2.5 发音部分设计 如下图所示,发音电路是由蜂鸣器、三极管、上拉电阻构成。由三极管来驱动扬声器发音的,同时加上拉电阻增强驱动电流,提高驱动能力。

 图 2-5、发音部分电路图

  . 3. 系统软件设计 3.1 系统分析 系统软件的组成

 (1)键盘扫描程序:检测是否有按键按下,有按键按下则记录按下键的键值,并跳转至功能转移程序;无按键按下,则返回键盘扫描程序继续检测。

 (2)功能转移程序:对检测到的按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲的功能。

 (3)琴键处理程序:根据检测到的按键值,查询音调表,给计时器赋值,使发出相应频率的声音。

 (4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有按键按下。

 系统总体功能流程图

 图 3-1、系统总体功能流程图

 3.2 参数计算 发音原理 若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将 P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值 TH0 及 TL0 以产生不同频率的方法产生不同音阶。

 例如,频率为 523Hz,其周期 T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数 956 次时将 I/O 反相,就可得到中音 DO(523Hz)。计数脉冲值与频率的关系式是:N=fi÷2÷fr,式中,N 是计数值;fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz);fr 是想要产生的频率。其计数初值 T 的求法如下:T=65536-N=65536-fi÷2÷fr 例如:设 K=65536,fi=1MHz,求中音 DO(261Hz)。T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音 DO 的 T=65536-500000/523=64580。

 计算结果 (1)单片机 12MHZ 晶振,中音符与计数 T0 相关的计数值如表所示:

 音符 频率(HZ)

 计 数 值 ( T值)

 音符 频率(HZ)

 计数值(T值)

 低 1DO 262 63628 #4FA# 740 64860 #1DO# 277 63737 中 5SO 784 64898 低 2RE 294 63835 #5SO# 831 94934 #2RE# 311 63928 中 6LA 880 64968 低 3MI 330 64021 #6LA# 932 64994 低 4FA 349 64103 中 7SI 968 65030 #4FA# 370 64185 低 1DO 1046 65058 低 5SO 392 64260 #1DO# 1109 65085 #5SO# 415 64331 高 2RE 1175 65110 低 6LA 440 64400 #2RE# 1245 65134 #6LA# 466 64463 高 3MI 1318 65157 低 7SI 494 64524 高 4FA 1397 65178 中 1DO 523 64580 #4FA# 1490 65198 #1DO# 554 64633 高 5SO 1568 65217 中 2RE 587 64633 #5SO# 1661 65235 #2RE# 622 64884 高 6LA 1760 65252 中 3MI 659 64732 #6LA# 1865 65268

 中 4FA 698 64820 高 7SI 1967 65283 采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音 0-19 之间,中音在 20-39 之间,高音在 40-59 之间。用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。

 (2)音调数据表

 曲调值 DELAY

 曲调值 DELAY 调 4/4 125ms

 调 4/4 62ms 调 3/4 187ms

 调 3/4 94ms 调 2/4 250ms

 调 2/4 125ms 上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。

 定义音调数据表的程序如下:

 DW 63628,63835,64021,64103,64260,64400,64524 64580,低音区:1 2 3 4 5 6 7

 DW 64580,64671,64777,64820,64898,64968,65030 65058 中音区:1 2 3 4 5 6 7

 DW 65058,65110,65157,65178,65217,65252,65283 65312 高音区:1 2 3 4 5 6 7 把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。

 3.3 程序设计 (1) 判断音阶(高中低音)子程序

  在软件设计中采用 yinjie 代表音阶,如下图所示 音阶 Yinjie 值 高 2

 中 1 低 0 初始化状态为中音(yinjie=1),电路中设计高、低两个音阶键。上电后,若无按键按下,则为中音模式。若音阶键被按下,则如下流程图所示,初始化后进行按键扫描,在高音键按下,若初始 yinjie 不为 2,则令 yinjie=2,进入高音工作模式,若初始 yinjie 为 2,则对 yinjie 进行初始化,即另 yinjie=1,重新进入进入中音工作模式,这样即实现了高音键切换高、中音方式的转换。同理,用低音键实现中、低音的切换。

 初始化音阶为1,即中音阶判断是否有音阶按钮按下判断哪个音阶按下Y Y音阶=2 音阶=0设定音阶=2开始高音阶按下判断当前音阶值低音阶按下NY判断当前音阶值设定音阶=0NY音阶=1 图 3-2、判断音阶(高中低音)子程序 (2) 播放子程序(包括自动播放存储音乐和按键发音)

 本设计共两种播放模式,包括自动播放存储音乐和按键发音。上电后,首先开中断并设定定时器 0 为工作方式 1,当自动播放键按下时,进入中断,根据乐谱在定义的音频数组中查找相应音律,然后给定时器赋初值,即开始播放音乐。当 DO、RE、MI、FA、SO、LA、SI 七种音符键按下时,根据音阶值(如 3.3.1中高中低对应)和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。

 开始开中断并设定工作方式寄存器有键按下自动播放键按下进入中断给定时器T0赋值播放音乐进入中断根据yinjie和工作方式取值,并在数组查找相应音律给定时器T0赋值播放键值对应的音符根据乐谱在数组中查找相应音律

  图 3-3、播放子程序

 s 4. Proteus 软件仿真

 4.1 硬件调试 硬件调试主要是针对单片机部分进行的调试。

 在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

 在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分和音频转换电路硬件调试。

 4.2 软件调试 调试主要方法和技巧:通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。

 4.3 仿真结果(任举一例)

 图 4-1、低音音符 RE 仿真图 4.4 结果分析 根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求。左侧数码管可以显示 a、b、c 三种结果,分别代表低音、中音和高音。右侧数码管可以显示 1、2、3、4、5、6、7 七个数字,分别代表 DO、RE、MI、FA、SO、LA、SI 七种音符。下面以 4.3 为例具体进行分析:当系统上电后,若按下低音键(如图 P3.6),,则选定工作方式为低音模式,图中 a 即代表低音。P0 口连接数码管段选端,右侧数码管显示的 1 即代表 DO。两位数码管即代表低音 DO。

 5. 课程设计体会

 总体来说,此次单片机课程设计使我们收获良多,虽然课程设计的过程中遇到了很多困难与问题,但我们最终还是完成了设计的任务及要求。具体来说可以分为以下几点:第一,不够细心,不够严谨(如因为粗心大意而焊错线);第二,因对课本理论的掌握度不够导致编程出现错误;第三,硬件方面,刚开始有的程序模块不能实现预期的效果,对于有的硬件,在实物制作过程中焊了比较多的排线,同时对于整体各元器件的布局都有很高的要求。不过在向同学请教,各方面都有了不同程度的改善;第四,在做人方面,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。

 这次课程设计中,经过我们的努力,在仿真软件和实物上都实现了高、中、低 21 个音符的发声和音乐的自动播放,使我们有了一定的成就感,也使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤, 掌握了单片机仿真软件 Proteus 的使用方法和键盘、显示器在的单片机控制系统中的应用,同时也掌握了撰写课程设计报告的方法。总之,通过这次课程设计,我们都清楚明白了自己的能力有多深,想提高还得归于多锻炼,多动手,多向别人学习。

 参考文献 【1】余发山、王福忠. 单片机原理及应用技术. 中国矿业大学出版社.2008 年 6月第 1 版 【2】杨凌霄. 微型计算机原理与应用,中国矿业大学出版社.2008 年 8 月第一版 【3】康华光. 电子技术基础(数字部分),高等教育出版社.第五版 【4】徐志军,伊廷辉等. EDA 技术与 PLD 设计 人民邮电出版社, 2006 年 2 月第 1版 【5】李朝青. 单片机原理及接口技术[M].

  北京:北京航天航空大学出版色,2001. 【6】胡汉才. 单片机原理及其接口技术[M]. 北京:清华大学出版社,2004. 【7】

 彭伟.单片机 C 语言程序设计实训 100 例.电子工业出版社.2009 年 【8】

 李建忠.单片机原理及应用.西安:西安电子科技大学,2002 年 【9】

 韩志军等.单片机应用系统设计[M].机械工业出版社,2004 【10】

 马忠梅等.单片机的 C 语言应用程序设计[M].北京航空航天大学出版社,2006

  附 附 1

 源程序代码 #include<reg52.h>

 #define keyport P1 #define uchar unsigned char #define uint unsigned int uchar high,low;

 //定时器预装值的高 8 位和低 8 位 sbit speak=P3^0; sbit gao=P3^5; sbit di=P3^6; sbit zdbf=P3^7; uchar yinjie=1; uchar time; uchar n=0; uchar bo=0; uchar code fre[][2]= {

 0x8c,0xf8,

  0x5b,0xf9,

  0x15,0xfa,

  0x67,0xfa,

  0x90,0xfb,

  0xae,0xfb,

  0x0c,0xfc,

 //低音

  0x44,0xfc,

  0xac,0xfc,

  0x09,0xfd,

  0x34,0xfd,

  0x82,0xfd,

 0xc2,0xfd,

  0x06,0xfe,

  //中音

  0x22,0xfe,

  0x56,0xfe,

  0x85,0xfe,

  0x9a,0xfe,

  0xc1,0xfe,

  0xe4,0xfe,

  0x03,0xff,

 //高音

 }; void delay(uint ); void ITimer0(void);//定时器初始化 void key(void); void dtxs(int,int); void song() { TH0=high; TL0=low; TR0=1; delay(time*180);

 } void yinyue() {

 uchar code hls[]={

  1,2,4, 4,2,3, 4,2,1, 4,2,8, 1,2,4, 5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3,

  7,2,1, 7,2,4, 6,2,3, 5,2,1, 4,2,4, 3,2,3, 4,2,1, 5,2,8, 1,2,4, 4,2,3, 4,2,1, 4,2,8, 1,2,4,

  5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3, 6,2,1, 1,3,4, 6,2,3, 4,2,1, 4,2,8, 7,2,4, 6,2,3, 5,2,1,

  2,2,4, 2,2,4, 3,2,4, 4,2,3, 5,2,1, 5,2,8, 7,2,4, 6,2,3, 5,2,1, 2,2,4, 2,2,4, 3,2,4, 4,2,3,

  5,2,8, 1,2,4, 4,2,3, 4,2,1, 1,2,4, 5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3, 6,2,1, 1,3,4, 6,2,3,

  4,2,1, 2,2,4, 5,2,3, 6,2,1, 4,2,8, 2,2,4, 5,2,3, 6,2,1, 4,2,8, 4,2,8

  };

 uchar m;

 n=0;

  while(n<216)

 {

  m=hls[n]+7*(hls[n+1]-1)-1;

  high=fre[m][1];

  low=fre[m][0];

  time=hls[n+2];

  n=n+3;

  song();

 } }

 void main (void) {

 uchar num;

 ITimer0();

 speak=0;

 while(1)

 {

  key();

  switch(keyport)

  {

 case 0xfe:num=1;break;

 case 0xfd:num=2;break;

 case 0xfb:num= 3;break;

  case 0xf7:num= 4;break;

  case 0xef:num= 5;break;

  case 0xdf:num= 6;break;

  case 0xbf:num= 7;break;

  case 0x7f:num= 8;break;

  default:num= 0;break;

  }

  if(num==0)

  {

 TR0=0;

 speak=0;

  }

  else

  {

 high=fre[7*yinjie+num-1][1];

 low=fre[7*yinjie+num-1][0];

 TR0=1;

  }

  dtxs(yinjie,num);

 } } void ITimer0(void) { TMOD |= 0x01;

 //使用模式 1,16 位定时器,使用"|"符号可以在使用多个定时器时不受影响

  EA=1;

 //总中断打开 ET0=1;

  //定时器中断打开 TR0=1;

  //定时器开关打开 }

 void Timer0_isr(void) interrupt 1 { TH0=high; TL0=low; speak=!speak; if(zdbf==0)

 {

 delay(100);

  if(zdbf==0)

  {

  bo++;

 if(bo/2==1)

  { delay(100);

 if(n<216)n=500;

  //n 赋值大于 216,跳出 while,停止音乐

 else n=0;

 dtxs(3,0);

  }

  if(bo%2==0)

  { delay(100);

 n=500;

  //n 赋值大于 216,跳出 while,停止音乐

  }

  }

  }/**/ } void key() {

 if(zdbf==0)

  {delay(100);

  if(zdbf==0)

  yinyue();

  }

 if(gao==0)

 {

  delay(100);

  if(gao==0)

  {

 delay(100);

 if(yinjie==2)

  yinjie=1;

 else yinjie=2;

  }

 }

  if(di==0)

 {

 delay(100);

  if(di==0)

  {

 delay(100);

 if(yinjie==0)

  yinjie=1;

 else yinjie=0;

  }

 } } void delay(unsigned int x) {

  int a,b;

  for(a=x;a>0;a--)

 for(b=110;b>0;b--); } void dtxs(k,l)//k 是工作方式,l 是按键号 {

 char seg[12]={0x77,0x7c,0x39,0x3f,0x06,0x5b,0x4f,0x66,0x6d,

 0x7d,0x07,0xff};

  P2=0x01;//选择第一个数码管

  P0=seg[k];//显示工作方式

  delay(4);

  P2=0x02;//选择第二个数码管

  P0=seg[l+3];//显示按键号

  delay(4); }

 附 附 2

  系统原理图

推荐访问:万方 电子琴 发声
上一篇:厦门市重点建设项目建设工期管控指导规范
下一篇:(全)2021烟草笔试模拟试题2套.含答案

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有