单片机讲解15.docx

上传人:b****6 文档编号:8537246 上传时间:2023-01-31 格式:DOCX 页数:13 大小:44.44KB
下载 相关 举报
单片机讲解15.docx_第1页
第1页 / 共13页
单片机讲解15.docx_第2页
第2页 / 共13页
单片机讲解15.docx_第3页
第3页 / 共13页
单片机讲解15.docx_第4页
第4页 / 共13页
单片机讲解15.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机讲解15.docx

《单片机讲解15.docx》由会员分享,可在线阅读,更多相关《单片机讲解15.docx(13页珍藏版)》请在冰豆网上搜索。

单片机讲解15.docx

单片机讲解15

教学内容:

单片机讲解

1、何谓单片机一台能够工作的计算机要有这样几个部份构成:

CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:

串行口、并行输出口等)。

在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。

而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。

天!

PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!

再说这块芯片也得非常大了。

不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。

为什么会这样呢?

功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。

另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。

既然如此,单片机的功能肯定不强,干吗要学它呢?

话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?

应用的关键是看是否够用,是否有很好的性能价格比。

所以8051出来十多年,依然没有被淘汰,还在不断的发展中。

2、MCS51单片机和8051、8031、89C51等的关系

我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系?

MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。

INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。

以后我们将用89C51来完成一系列的实验

单片机的内部、外部结构<一>

一、单片机的外部结构

拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。

1、电源:

这当然是必不可少的了。

单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。

2、振蒎电路:

单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。

只要买来晶振,电容,连上就可以了,按图1接上即可。

3、复位引脚:

按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。

4、EA引脚:

EA引脚接到正电源端。

至此,一个单片机就接好,通上电,单片机就开始工作了。

图1

二、任务分析

我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?

单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。

(见图1,其中R1是限流电阻)

按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。

因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。

即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?

叫它什么名字呢?

设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

名字有了,我们又怎样让它变'高'或变'低'呢?

叫人做事,说一声就可以,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。

让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。

因此,我们要P1.0输出高电平,只要写SETBP1.0,要P1.0输出低电平,只要写CLRP1.0就可以了。

现在我们已经有办法让计算机去将P10输出高或低电平了,但是我们怎样才能计算机执行这条指令呢?

总不能也对计算机也说一声了事吧。

要解决这个问题,还得有几步要走。

第一,计算机看不懂SETBCLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。

计算机能懂什么呢?

它只懂一样东西——数字。

因此我们得把SETBP1.0变为(D2H,90H),把CLRP1.0变为(C2H,90H),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。

第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?

这要借助于一个硬件工具"编程器"。

我们将编程器与电脑连好,运行编程器的软件,然后在编缉区内写入(D2H,90H)见图2,写入……好,拿下片子,把片子插入做好的电路板,接通电源……什么?

灯不亮?

这就对了,因为我们写进去的指令就是让

图2

P10输出高电平,灯当然不亮,要是亮就错了。

现在我们再拨下这块芯片,重新放回到编程器上,将编缉区的内容改为(C2H,90H),也就是CLRP1.0,写片,拿下片子,把片子插进电路板,接电,好,灯亮了。

因为我们写入的()就是让P10输出低电平的指令。

这样我们看到,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就可以改变电路的输出效果。

三、单片机内部结构分析

我们来思考一个问题,当我们在编程器中把一条指令写进单片要内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?

这个地方就是单片机内部的只读存储器即ROM(READONLYMEMORY)。

为什么称它为只读存储器呢?

刚才我们不是明明把两个数字写进去了吗?

原来在89C51中的ROM是一种电可擦除的ROM,称为FLASHROM,刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM。

单片机的内外部结构分析<二>

一、程序的完善

  上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。

怎样才能让灯不断地闪烁呢?

实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10不断地输出高和低电平。

怎样实现这个要求呢?

请考虑用下面的指令是否可行:

SETBP10

CLRP10

……

这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETBP10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLRP10指令,灯又亮了,所以根本分辨不出灯曾灭过。

第二,在执行完CLRP10后,不会再去执行SETBP10指令,所以以后再也没有机会让灭了。

  为了解决这两个问题,我们可以做如下设想,第一,在执行完SETBP10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。

第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为"循环",这样就可以完成任务了。

以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):

;主程序:

LOOP:

SETBP10    ;(1)

    LCALLDELAY  ;(2)

    CLRP10    ;(3)

    LCALLDELAY  ;(4)

    AJMPLOOP   ;(5)

;以下子程序

DELAY:

MOVR7,#250  ;(6)

D1:

MOVR6,#250   ;(7)

D2:

DJNZR6,D2   ;(8)

  DJNZR7,D1    ;(9)

  RET        ;(10)

  END        ;(11)

按上面的设想分析一下前面的五条指令。

  第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。

第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?

后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们可以认识到,它要转到第一条指令处。

这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。

是否一定要给它起名叫LOOP呢?

当然不是,起什么名字,完全由编程序的人决定,可以称它为A,X等等,当然,这时,第五条指令LJMP后面的名字也得跟着改了。

  第二条和第四条指令的用途是延时,它是怎样实现的呢?

指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。

这条指令的作用是这样的:

当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,可以看到确实有RET指令。

在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:

RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在不断地亮、灭了。

  在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。

程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。

二、单片机内部结构分析:

  为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从R1开始,R1被称之为工作寄存器。

什么是工作寄存器呢?

让我们从现实生活中来找找答案。

如果出一道数学题:

123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:

123+567+562,要让你要上回答,就不这么容易了吧?

我们会怎样做呢?

如果有张纸,就容易了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。

这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,往往要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?

放在前面提到过的ROM中可以吗?

显然不行,因为计算机要将结果写进去,而ROM是不可以写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它可以将数据写进去。

  特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。

单片机的内外部结构分析<三>

一、延时程序分析

上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。

DELAY:

MOVR7,#250  ;(6)

D1:

MOVR6,#250  ;(7)

D2:

DJNZR6,D2   ;(8)

DJNZR7,D1   ;(9)  

RET       ;(10)

 

1.MOV:

这是一条指令,意思是传递数据。

说到传递,我们都很清楚,传东西要从一个人的手上传到另一个人的手上,也就是说要有一个接受者,一个传递者和一样东西。

从指令MOVR7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:

并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者)。

它的意义也很明显:

将数据250送到R7中去,因此执行完这条指令后,R7单元中的值就应当是250。

在250前面有个#号,这又是什么意思呢?

这个#就是用来说明250就是一个被传递的东西本身,而不是传递者。

那么MOVR6,#250是什么意思,应当不用分析了吧。

2.DJNZ:

这是另一条指令,我们来看一下这条指令后面跟着的两个东西,一个是R6,一个是D2,R6我们当然已知是什么了,查一下D2是什么。

D2在本行的前面,我们已学过,这称之为标号。

标号的用途是什么呢?

就是给本行起一个名字。

DJNZ指令的执行过程是这样的,它将其后面的第一个参数中的值减1,然后看一下,这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移,转到什么地方去呢?

可能大家已猜到了,转到第二个参数所指定的地方去(请大家用自已的话讲一下这条语句是怎样执行的)。

本条指令的最终执行结果就是,在原地转圈250次。

3.执行完了DJNZR6,D2之后(也就是R6的值等于0之后),就会去执行下面一行,也就是DJNZR7,D1,请大家自行分析一下这句话执行的结果。

(转去执行MOVR6,#250,同时R7中的值减1),最终DJNZR6,D2这句话将被执行250*250=62500次,执行这么多次同一条指令干吗?

就是为了延时。

4.一个问题:

如果在R6中放入0,会有什么样的结果。

二、时序分析:

前面我们介绍了延时程序,但这还不完善,因为,我们只知道DJNZR6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?

是否满足我们的要求呢?

我们还不知道,所以下面要来解决这个问题。

先提一个问题:

我们学校里什么是最重要的。

(铃声)校长可以出差,老师可以休息,但学校一日无铃声必定大乱。

整个学校就是在铃声的统一指挥下,步调一致,统一协调地工作着。

这个铃是按一定的时间安排来响的,我们可以称之为“时序��时间的顺序”。

一个由人组成的单位尚且要有一定的时序,计算机当然更要有严格的时序。

事实上,计算机更象一个大钟,什么时候分针动,什么时候秒针动,什么时候时针动,都有严格的规定,一点也不能乱。

计算机要完成的事更复杂,所以它的时序也更复杂。

我们已知,计算机工作时,是一条一条地从ROM中取指令,然后一步一步地执行,我们规定:

计算机访问一次存储器的时间,称之为一个机器周期。

这是一个时间基准,好象我们人用“秒”作为我们的时间基准一样,为什么不干脆用“秒”,多好,很习惯,学下去我们就会知道用“秒”反而不习惯。

一个机器周期包括12个时钟周期。

下面让我们算一下一个机器周期是多长时间吧。

设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。

它的一个机器周期是12*(1/12)也就是1微秒。

(请计算一个工作于6M晶振的单片机,它的机器周期是多少)。

MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。

这也不难再解,不是吗?

我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长。

为了恒量指令执行时间的长短,又引入一个新的概念:

指令周期。

所谓指令周期就是指执行一条指令的时间。

INTEL对每一条指令都给出了它的指令周期数,这些数据,大部份不需要我们去记忆,但是有一些指令是需要记住的,如DJNZ指令是双周期指令。

下面让我们来计算刚才的延时。

首先必须要知道晶振的频率,我们设所用晶振为12M,则一个机器周期就是1微秒。

而DJNZ指令是双周期指令,所以执行一次要2个微秒。

一共执行62500次,正好125000微秒,也就是125毫秒。

练习:

设计一个延时100毫秒的延时程序。

要点分析:

1、一个单元中的数是否可以超过255。

2、如何分配两个数。

三、复位电路

任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?

它就象是我们上课之前打的预备铃。

预备铃一响,大家就自动地从操场、其它地方进入教室了,在这一段时间里,是没有老师干预的,对单片机来说,是程序还没有开始执行,是在做准备工作。

显然,准备工作不需要太长的时间,复位只需要5ms的时间就可以了。

如何进行复位呢?

只要在单片机的RST引脚上加上高电平,就可以了,按上面所说,时间不少于5ms。

为了达到这个要求,可以用很多种方法,这里提供一种供参考,见图1。

实际上,我们在上一次实验的图中已见到过了。

这种复位电路的工作原理是:

通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始正常工作。

单片机的内外部结构分析<四>

1.第三个实验

上两次我们做过两个实验,都是让P1.0这个引脚使灯亮,我们可以设想:

既然P1.0可以让灯亮,那么其它的引脚可不可以呢?

看一下图1,它是8031单片机引脚的说明,在P1.0旁边有P1.1,P1.2….P1.7,它们是否都可以让灯亮呢?

除了以P1开头的外,还有以P0,P2,P3开头的,数一下,一共是32个引脚,前面我们以学过7个引脚,加上这32个这39个了。

它们都以P字开头,只是后面的数字不一样,它们是否有什么联系呢?

它们能不能都让灯亮呢?

在我们的实验板上,除了P10之外,还有P11��P17都与LED相连,下面让我们来做一个实验,程序如下:

MAIN:

MOVP1,#0FFH

LCALLDELAY

MOVP1,#00H

LCALLDELAY

LJMPMAIN

DELAY:

MOVR7,#250

D1:

MOVR6,#250

D2:

DJNZR6,D2

DJNZR7,D1

RET

END

将这段程序转为机器码,用编程器写入芯片中,结果如何?

通电以后我们可以看到8只LED全部在闪动。

因此,P10��P17是全部可以点亮灯的。

事实上,凡以P开头的这32个引脚都是可以点亮灯的,也就是说:

这32个引脚都可以作为输出使用,如果不用来点亮LED,可以用来控制继电器,可以用来控制其它的执行机构。

程序分析:

这段程序和前面做过的程序比较,只有两处不一样:

第一句:

原来是SETBP1.0,现在改为MOVP1,#0FFH,第三句:

原来是CLRP1.0,现在改为MOVP1.0,#00H。

从中可以看出,P1是P1.0��P1.7的全体的代表,一个P1就表示了所有的这八个管脚了。

当然用的指令也不一样了,是用MOV指令。

为什么用这条指令?

看图2,我们把P1作为一个整体,就把它当作是一个存储器的单元,对一个单元送进一个数可以用MOV指令。

二、第四个实验

除了可以作为输出外,这32个引脚还可以做什么呢?

下面再来做一个实验,程序如下:

MAIN:

MOVP3,#0FFH

LOOP:

MOVA,P3

MOVP1,A

LJMPLOOP

先看一下实验的结果:

所有灯全部不亮,然后我按下一个按钮,第()个灯亮了,再按下另一个按钮,第()个灯亮了,松开按钮灯就灭了。

从这个实验现象结合电路来分析一下程序。

从硬件电路的连线可以看出,有四个按钮被接入到P3口的P32,P33,P34,P35。

第一条指令的用途我们可以猜到:

使P3口全部为高电平。

第二条指令是MOVA,P3,其中MOV已经见,是送数的意思,这条指令的意思就是将P3口的数送到A中去,我们可以把A当成是一个中间单元(看图3),第三句话是将A中的数又送到P1口去,第四句话是循环,就是不断地重复这个过程,这我们已见过。

当我们按下第一个按钮时,第(3)只灯亮了,所以P12口应当输出是低电平,为什么P12口会输出低电平呢?

我们看一下有什么被送到了P1口,只有从P3口进来的数送到A,又被送到了P1口,所以,肯定是P3口进来的数使得P12位输出电平的。

P3口的P32位的按钮被按下,使得P32位的电平为低,通过程序,又使P12口输出低电平,所以P3口起来了一个输入的作用。

验证:

按第二、三、四个按钮,同时按下2个、3个、4个按钮都可以得到同样的结论,所以P3口确实起到了输入作用,这样,我们可以看到,以P字开头的管脚,不仅可以用作输出,还可以用作输入,其它的管脚是否可以呢?

是的,都可以。

这32个引脚就称之为并行口,下面我们就对并行口的结构作一个分析,看一下它是怎样实现输入和输出的。

3.并行口结构分析:

1、输出结构

先看P1口的一位的结构示意图(只画出了输出部份):

从图中可以看出,开关的打开和合上代表了引脚输出的高和低,如果开关合上了,则引脚输出就是低,如果开关打开了,则输出高电平,这个开关是由一根线来控制的,这根数据总线是出自于CPU,让我们回想一下,数据总线是一根大家公用的线,很多的器件和它连在一起,在不同的时候,不同的器件当然需要不同的信号,如某一时刻我们让这个引脚输出高电平,并要求保持若干时间,在这段时间里,计算机当然在忙个不停,在与其它器件进行联络,这根控制线上的电平未必能保持原来的值不变,输出就会发生变化了。

怎么解决这个问题呢?

我们在存储器一节中学过,存储器中是可以存放电荷的,我们不妨也加一个小的存储器的单元,并在它的前面加一个开关,要让这一位输出时,就把开关打开,信号就进入存储器的单元,然后马上关闭开关,这样这一位的状态就被保存下来,直到下一次命令让它把开关再打开为止。

这样就能使这一位的状态与别的器件无关了,这么一个小单元,我们给它一个很形象的名字,称之为“锁存器”。

2、输入结构

这是并行口的一位的输出结构示意图,再看,除了输出之外,还有两根线,一根从外部引脚接入,另一根从锁存器的输出接出,分别标明读引脚和读锁存器。

这两根线是用于从外部接收信号的,为什么要两根呢?

原来,在51单片机中输入有两种方式,分别称为‘读引脚’和‘读锁存器’,第一种方式是将引脚作为输入,那是真正地从外部引脚读进输入的值,第二种方式是该引脚处于输出状态时,有时需要改变这一位的状态,则并不需要真正地读引脚状态,而只是读入锁存器的状态,然后作某种变换后再输出。

请注意输入结构图,如果将这一根引线作为输入口使用,我们并不能保证在任何时刻都能得到正确的结果(为什么?

)参考图2输入示意图。

接在外部的开关如果打开,则应当是输入1,而如果闭合开关,则输入0,但是,如果单片机内部的开关是闭合的,那么不管外部的开关是开还是闭,单片机接受到的数据都是0。

可见,要让这一端口作为输入使用,要先做一个‘准备工作’,就是先让内部的开关断开,也就是让端口输出‘1’才行。

正因为要先做这么一个准备工作,所以我们称之为“准双向I/O口”。

以上是P1口的一位的结构,P1口其它各位的结构与之相同,而其它三个口:

P0、P2、P3则除入作为输入输出口之外还有其它用途,所以结构要稍复杂一些,但其用于输入、输出的结构是相同的。

看图()。

对我们来说,这些附加的功能不必由我们来控制,所以我们就不去关心它了。

单片机内部结构分析<五>

通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部作一个完整的分析吧!

看图

(1)(本图太大,请大家找本书看吧,一般讲单片机的书,随便哪本都有)。

从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存

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

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

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

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