基于单片机控制音乐播放器.docx

上传人:b****6 文档编号:6155864 上传时间:2023-01-04 格式:DOCX 页数:17 大小:291.62KB
下载 相关 举报
基于单片机控制音乐播放器.docx_第1页
第1页 / 共17页
基于单片机控制音乐播放器.docx_第2页
第2页 / 共17页
基于单片机控制音乐播放器.docx_第3页
第3页 / 共17页
基于单片机控制音乐播放器.docx_第4页
第4页 / 共17页
基于单片机控制音乐播放器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于单片机控制音乐播放器.docx

《基于单片机控制音乐播放器.docx》由会员分享,可在线阅读,更多相关《基于单片机控制音乐播放器.docx(17页珍藏版)》请在冰豆网上搜索。

基于单片机控制音乐播放器.docx

基于单片机控制音乐播放器

郑州科技学院

《单片机原理及应用》课程设计

 

题目基于单片机的音乐

控制器的设计与实现

学生姓名

专业班级

学号

院(系)

指导教师

完成时间

 

 

0引言

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I

I/O设备概括的讲:

一块芯片就成了一台计算机。

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。

采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。

例如精密的测量设备(功率计,示波器,各种分析仪)。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

利用单片机实现音乐播放有很多要点,例如外部电路简单,控制方便等,因而备受广大单片机爱好者的喜爱。

通过音乐发声器的设计方案,掌握C语言的编程方法。

并熟练的运用AT89S52单片机定时器产生固定频率的方波信号,驱动喇叭发出旋律,按下按键可以演奏预先设置的歌曲旋律,最重要的是自己还可以通过程序设计输入自己喜欢的歌曲来演奏,本设计采用简易音阶编码直觉式输入法方便设计音乐旋律。

1设计方案

本设计是以AT89S52芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。

用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。

对于不同型号的单片机只需要相应的改变一下地址即可。

该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。

     

本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。

与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。

电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。

基于单片机制作的电子式音乐盒,控制功能强大,可根据需要扩展其显示、选歌功能,使用方便。

根据存储容量的大小,可以尽可能多的存储歌曲。

另外,可以设计彩灯外观效果,使音乐盒的功能更加丰富。

设计的课题是“基于单片机的音乐播放器设计”,它是以单片机AT89C52作为硬件核心控制部件,结合负脉冲电路和LM386功率放大器,数码管构成典型的显示电路,以及其他外围设备组成的音乐播放系统。

 

根据音乐演奏控制器所要实现的显示与选曲及音乐产生功能原理,系统包括演奏扬声器、选曲、播放和显示几部分。

其中,S1开关用来选曲,通过显示器显示歌曲序号。

S2按钮用作播放。

所设计的单片机乐曲播放控制器不仅能够播放悦耳的歌曲,同时设置按钮使所设计的程序能在五首歌曲之间进行选曲,并通过显示器使其显示歌曲序号。

 本文设计的音乐演奏控制器是通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音节的声音,再利用延迟来控制发音时间的长短,即控制音调中的节拍。

同时设置按钮使所设计的程序能在五首歌曲之间进行选曲、设计显示器使其显示歌曲序号。

1.1实现功能

硬件方面:

 

(1)可以通过按键进行曲目的选择; 

(2)可以通过按键进行曲目的播放和停止; 

(3)CPU可以控制声音的音节和长短; 

(4)音频数据信息记录需要大量非易失性数据存储器实时快速地记录数据。

因此需要具有掉电保护功能的大容量存储器; 

(5)可以通过显示器知道曲目的序号;

软件方面:

 

(1)系统中外扩的各器件的初始化工作均在主程序中完成,其次,要设计如何调

用显示子程序以及乐曲播放程序。

 

(2)在实际的控制过程,常要求有实时时钟,以实现定时或延时控制,所以需要此类中断服务程序。

 

(3)由于按键为机械开关结构,机械触点的弹性及电压突跳等原因,往往在触点闭合或断开的瞬间会出现电压抖动。

为保证键识别的准确,在电压信号抖动的情况下不能进行状态的输入。

为此需要进行去抖动处理的中断服务程序。

1.2方案选择

方案一:

用四个按键控制音乐的播放。

3个按键选择3首不同的音乐播放,另一个按键控制音乐的停止。

按下播放键,用一点简单的控制之后,才开始播放音乐。

比如,用定时器控制,亮灯倒计时10秒然后触发音乐播放。

 

方案二:

用4*4小键盘来实现音乐的选择播放,1~A按键控制播放10首音乐,C~F按键分别实现欢迎页面、上一首、下一首、停止播放。

方案三:

为了充分利用实验板的功能,进一步扩充音乐盒的功能。

设计用七段显示数码管LCD显示播放时歌曲序号。

设置三个键,一个按键控制开机、播放、暂停音乐,另外两个按键分别实现上一首、下一首。

(1) 在方案1中,共用了4个按键,其中3个按键控制播放3首音乐,另一个键

控制音乐播放的停止。

但是只能选择3首音乐,不能显示是哪首歌局限性太强。

 

(2) 在方案3中,共用了3个按键,其中一个键用于控制开机、播放、暂停,另两个键用于上一首与下一首切换。

使用数码管作为显示输出。

功能过于单一,显示效果不佳。

考虑到设计要求和时间上的局限,本次课程设计使用了方案二。

 

本次设计是一个基于AT89C52系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。

该音乐盒主要由按键电路、复位电路、时钟电路、蜂鸣器以及显示电路组成。

使用一个按键来控制开始,播放和暂停。

利用两个按键分别切换上一曲和下一曲来演奏出不同的乐曲,共三首音乐,蜂鸣器发出某个音调,与之相对应的LED亮起。

本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试。

 

音乐盒的系统结构以AT89C51单片机位控制核心,加上矩阵按键、时钟复位电路、蜂鸣器、LCD模块组成。

单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。

系统组成框图如图1-1所示。

 

图1-1总体电路框图

2系统设计

2.1硬件原理

(1)单片机的选择

在设计中文章选择单片机AT89C52作为播放器的核心控制部件,原因是因为AT89C52的功能全部兼容MCS-51,并且还有程序加密等功能,相比而言更加实用。

 

AT89C52单片机是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8KB的可反复擦写的只读程序存储器和256字节的随机存取存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8051产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,其强大的功能更适合较为复杂的控制应用场合。

其主要工作特性是:

片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次; 

片内数据存储器内含256字节的RAM; 

具有32根可编程I/O口线; 

具有3个可编程定时器; 

中断系统是具有8个中断源、6个中断矢量、2级优先权的结构; 

串行口是具有一个全双工的可编程串行通信口; 

具有一个数据指针DPTR; 

低功耗工作模式有空闲模式和掉电模式; 

具有可编程的3级程序锁定位;

AT89C52工作电源电压位5(1±0.2)V,且典型值为5V。

 

AT89C52最高工作频率为24MHZ,编程频率为3~24HZ,编程启动电流为1mA。

(2)引脚排列及功能

AT89C52的引脚排列如图2-1所示:

图2-1单片机引脚图

首先对于I/O口线做一介绍:

 

P0口—8位、漏极开路的双向I/O口。

 

当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。

在编程时,P0口可用于接收指令代码字节;在校验时,P0口可输出指令字节(须外加上拉电阻)。

P0口也可做通用I/O口使用,但需加上拉电阻,变为准双向口。

当作为普通输入时,应将输出锁存器置1。

P0口可驱动8个TTL负载。

P1口—8位、准双向I/O口,具有内部上拉电阻。

 

P1口是为用户准备的I/O口双向口。

在编程和校验时,可用做输入低8位地址。

用做输入时,应先将输出锁存器置1。

P1口可驱动4个TTL负载。

P2口—8位、准双向I/O口,具有内部上拉电阻。

当使用片外存储器或外扩I/O口时,P2口输出高8位地址。

在编程/校验时,P2口可接收高字节地址和某些控制信号。

P2口也可做普通I/O口使用。

用做输入时,应先将输出锁存器置1。

P1口可驱动4个TTL负载。

P3口—8位、准双向I/O口,具有内部上拉电阻。

 

P3口可做普通I/O口使用。

用做输入时,应先将输出锁存器置1。

在编程/校验时,P3口接收某些控制信号。

它可驱动4个TTL负载。

(3) 晶振电路部分

AT89S52中有一个高增益反相放大器,它可以用来构成内部振荡器,其中引脚XTAL1是该放大器的输入端,XTAL2是放大器的输出端。

而用石英晶体或者陶瓷谐振器作为反馈元件,连接到它的高增益放大器,再接入电容C1、C2构成一个反馈回路,从而形成一个并联振荡电路,就也构成了一个自然振荡器。

对外接电容C1、C2的容量对振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性有着轻微的影响。

所以使用的是12MHz石英晶体的话,它的电容就取20PF左右,振荡脉冲信号通过内部的时钟发生器来进行二分频,这样就形成了单片机的时钟信号。

图2-2晶振电路

(4)单片机最小系统

单片机最小系统包括晶振电路、复位电路、电源、接地。

复位电路工作原理:

高电平为例,电源上电时,VCC可以认为一阶跃信号复位端电压是由于下拉电阻R1在CPU复位端引起的电压值,一般为0.3V以下。

但在实际应用中,VCC不可能为理想的阶跃信号。

其主要原因有两点:

(1)稳压电源的输出开关特性;

(2)我们通常在设计电路时,为保证电源电压稳定性,往往在电源的输入端并联一个大电容,从而导致了VCC不可能为阶跃信号特征。

从而影响了的复位电压的复位特性。

图2-3复位电路

扬声器电路

本设计是采用蜂鸣器用来发出声音,由于在实际应用中,单片机输出的标准高电平为5伏,输出功率很有限,所以本设计中,理论联系实际,用一个PNP型三极管驱动蜂鸣器,由于三极管具有放大作用,在实际应用中,输出功率将会提高很多。

图2-4扬声器电路

复位电路

AT89S52的复位是由外部的复位电路来实现的。

复位引脚RST通过一个施密特触发器用来抑制噪声,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

本设计是采用上电自动复位,上电自动复位是通过外部复位电路的电容充电来实现的。

只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

时钟频率用12MHZ 时C取20PF。

 

电源、接地 

单片机AT89C52所选用的是+5V的电源,可直接由稳压电源提供,接地直接接GND。

单片机最小系统 由以上晶振电路、复位电路、电源、接地即可组成单片机最小系统如图4-5所示。

图2-5单片机最小系统电路图

2.2软件原理

(1)音乐原理

乐曲中的不同音符,实质就是不同频率的声音,声音的频谱范围通常约为几十到几千赫兹,通过程序控制单片机产生不同频率的脉冲信号,当该脉冲信号的频率位于声音频谱范围内时,在单片机的I/O口街上喇叭就能发出声音。

然后利用延时程序控制矩形波的高低电平持续时间,即改变矩形波的频率,即可产生不同的音调,从而发出不同的声音,再让矩形波输出的长短对应节拍,就可以实现单片机对音乐的演奏。

音频转换的原理想要产生我们需要的音频脉冲,就需要算出每个音频的半个周期,也就是音频的半周期时间。

我们以半周期时间为定时器的计时时间,当计时时间到后就将引脚P3.0反相,重复操作,就可以得到这个引脚上我们需要的音频脉冲。

首先设置单片机的内部定时器的工作方式为1,那么通过改变TH1和TL1的计数值就能够产生不同的频率,从而产生不同的音阶。

例如,频率为440HZ,其周期T=1/440=1272us,因此只要令计时器计时1272 us/2 us=1136,每计数1136次时将I/O反相,就可得到低音D6(440HZ)。

计数脉冲值与频率的关系式是:

 

N = F1/2/F2  

此表达式中N为单片机定时器计数值;F1为单片机的机器频率;F2为想要产生的声音频率。

当晶体振荡器是12MHz时,其频率为1MHz。

其计数初值T的求法如下:

 

T = 65536 –N = 65536 - F1/2/F2

(N:

计数值,F1:

内部计时一次为1uS,故其频率为1MHz,F2:

要产生的频率 )

由于各个音调对应的频率是已知的,因此,播放音乐时,应对乐曲中出现的音调进行编码,并找出单片机播放这些音调所对应的定时初值。

表1所列是音调编码与定时器的初值表。

其中频率是已知的。

编码可以自己设置,而定时器初值是怎样得来的呢?

下面以“低6”为例进行说明。

“低6”的频率为440Hz,其对应的周期为:

T=1/f=1/440=272us.单片机上对应蜂鸣器的I/O口来回取反的时间应为:

t=T/2=2272/2=1136us.单片机奏乐时,其定时器为工作方式1,若以振荡器的十二分频信号为基数脉冲,如果单片机晶振为12MHz,则1us计数一次。

所以,对于“低6”,其定时器的初值应该是:

216-1136=64400。

(2)节拍的产生

音阶的频率是固定的,而节拍有快有慢,拍子越短节奏越快,拍子越长节奏越慢。

控制发音的时间有两种方法:

调用延时子程序或采用定时器中断。

本次对节拍的控制是通过延时程序来实现的。

表2所列是节拍编码表。

若以2拍的时长为400ms为例,1/2拍得时长为200ms,1/4拍得时长为100ms。

首先这样,确定一个基本时长的延时程序,比如以100ms,为基本延时时间,那么,1/4拍可以调用一次延时程序,1/2拍需要用二次延时程序,1拍需调用四次延时程序,依次类推。

(3)编程

音调和节拍进行过编码后,那么,一首乐曲就可以用若干个8位的简码表示。

比如“生日快乐歌”的第一个简码是“82H”,由表一可知,其高四位“8”表示音调“中5”,对应的频率是782Hz,对应的定时器初值是64898;另由表2可知,其低4位“2”表示节拍为“2/4拍”。

这样,任意一首乐曲的简码都可以通过乐谱提取软件而获得,而得到简码后,就可以编程了。

图3所示是单片机播放音乐的程序流程图,本文使用的事定时器0,音调的高低由定时器来控制P3.7并按一定频率取反实现,节拍的长短由延时程序控制。

流程图中的“TABLE”是由表1中的定时器初值组成的。

3实验与仿真 

3.1 Keil C51单片机软件开发系统

(1)C52工具包的整体结构中,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及A51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

(2) 采用KEIL 开发的89c51单片机应用程序步骤:

在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)。

 

用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。

一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。

 

通过uVision 2 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。

对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。

对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。

3.2proteus的操作

(1)硬件电路图的接法操作  

放置选择(删除)元器件 

移动元器件 

缩放视图

连接导线

仿真,调试

(2)单片机系统PROTEUS设计与仿真过程 

Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。

全部过程都是在计算机上通过Proteus来完成的。

其过程一般也可分为三步:

在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。

简称Proteus电路设计。

 

在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。

简称Proteus源程序设计和生成目标代码文件。

 

在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。

它在相当程度上反映了实际单片机系统的运行情况。

简称Proteus仿真。

(3)本次设计的硬件电路主要由单片机AT89S52和外围放音电路组成,在调试电路的过程中也碰到了一些问题。

 

问题一:

单片机无法正常下载程序。

 问题二:

下载音频程序后无法播放音乐。

调试步骤:

 

在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:

晶振电路的连接,复位电路是否设计正确。

 

根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。

然后将所有程序组织起来,在软件环境下运行,检查程序是否正确。

通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。

4结论

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。

做完这个课题设计后,发现还是有许多地方存在不足,如知道了AT89C51单片机在装入时有方向性、焊接时需格外的小心、需要接上拉电阻、按键要选择好等。

在经过后期的努力,我已经改善许多,尾灯控制电路已经可以正常工作。

并且此方案相比其他方案具有很多直观的优点,用单片机编程比较直接,用硬件电路搭建很方便,通过对AT89C51单片机的编写程序,来控制LED的亮、灭,这样可降低材料的成本、简化系统的结构、提高系统的可靠性以及先进性,能够实现控制器的系统编程。

我的题目是音乐播放器硬软件的设计,对于我们这些工科学生来说,这是一次考验。

怎样让自己的计划更具有序性,而不会忙无一用?

这都是我们所要考虑和努力的。

这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

 

 同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。

这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。

 

参考文献

[1]史敬灼.步进电动机伺服控制技术[M].北京:

科学出版社,2007,23-35

[2]余永权.单片机应用系统的功率接口技术[M].北京:

北京航空航天大学出版社,2006,53-70

[3]陈理壁.步进电机及其应用[M].上海:

上海科学技术出版社,2009,32-47

[4]王晓明、胡晓柏.电动机的单片机控制[M].北京:

北京航空航天大学出版社,2002,181-208

[5]刘宝延、程树康.步进电动机及其驱动控制系统[M].哈尔滨:

哈尔滨工业大学出版社,2007,134-167

[6]王宗培.步进电动机及其控制系统[M].哈尔滨:

哈尔滨工业大学出版社,2009,121-150

[7]莫正康.电力电子应用技术[M].北京:

机械工业出版社,2009,169-183

[8]曾晓宏.数字电子技术[M].北京:

机械工业出版社,2008,150-163

 

附录1:

仿真电路图

附录2:

程序

ORG   0000H      

LJMP  START      

ORG  001BH       

LJMP  TIME1 

START:

MOV  TMOD,#10H

MOV   IE,#88H

MAIN:

 MOV   40H,#00H

NEXT:

 MOV   A,40H

MOV   DPTR,#TABLE

MOVC  A,@A+DPTR

CJNE  A,#00H,PLAY

LJMP  STOP

PLAY:

 MOV   

R1,A

ANL   A,#0FH

MOV   R2,A

MOV   A,R1

ANL   A,#0F0H

CJNE  A,#00H,MUSIC

CLR   TR1

LJMP  DEL

MUSIC:

SWAP  A      

DEC   A       

MOV   22H,A       

ADD   A,22H       

MOV   R3,A

MOV   DPTR,#TABLE1

MOVC  A,@A+DPTR         

MOV   TH1,A

MOV   21H,A     

MOV   A,R3      

INC   A

MOVC  A,@A+DPTR

MOV   TL1,A

MOV   20H,A

SETB  TR1

DEL:

  LCALL DELAY 

INC   40H

LJMP  NEXT

STOP:

 CLR   TR1

LJMP  MAIN

TIME1:

PUSH  ACC

PUSH  PSW 

CPL   P1.7

MOV   TL1,20H

MOV   TH1,21H      

POP   PSW       

POP   ACC      

RETI

DELAY:

MOV   R7,#02H

DELA1:

MOV   R6,#125 

DELA2:

MOV   R5,#248      

DJNZ  R5,$       

DJNZ  R6,DELA2      

DJNZ  R7,DELA1      

DJNZ  R2,DELAY       

RET

TABLE1:

DW 64524,64580,64684,647

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1