马伟力AVR笔记六模拟比较器和ADC实验.docx

上传人:b****0 文档编号:18285030 上传时间:2023-08-15 格式:DOCX 页数:28 大小:122.24KB
下载 相关 举报
马伟力AVR笔记六模拟比较器和ADC实验.docx_第1页
第1页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第2页
第2页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第3页
第3页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第4页
第4页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第5页
第5页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第6页
第6页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第7页
第7页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第8页
第8页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第9页
第9页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第10页
第10页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第11页
第11页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第12页
第12页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第13页
第13页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第14页
第14页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第15页
第15页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第16页
第16页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第17页
第17页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第18页
第18页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第19页
第19页 / 共28页
马伟力AVR笔记六模拟比较器和ADC实验.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

马伟力AVR笔记六模拟比较器和ADC实验.docx

《马伟力AVR笔记六模拟比较器和ADC实验.docx》由会员分享,可在线阅读,更多相关《马伟力AVR笔记六模拟比较器和ADC实验.docx(28页珍藏版)》请在冰点文库上搜索。

马伟力AVR笔记六模拟比较器和ADC实验.docx

马伟力AVR笔记六模拟比较器和ADC实验

AVR学习笔记六、模拟比较器和ADC实验

-------基于LT_Mini_M16

6.1模拟比较器实验

6.1.1实例功能

模拟比较器和模数转换ADC是单片机内部最常见的两种支持模拟信号输入的功能接口。

大部分AVR都具备这两种类型的接口。

本实例将以ATmage16芯片为例,介绍模拟比较器的使用方法,在下一个实例中介绍模数转换ADC。

使用模拟比较器可以实现单片机系统电源电压的检测,更巧妙的应用是利用模拟比较器和一些简单的外围电路,设计简单的模数转换ADC。

本实例实现利用模拟比较器比较某一点电压与内部模拟比较器参考电压的高低。

共有3个功能模块,分别描述如下:

●单片机系统:

使用ATmega16单片机的模拟比较器比较某一点的电压与参考电压的关系。

●外围电路:

利用电阻设计的分压电路。

●软件程序:

熟悉掌握ATmega16单片机的模拟比较器的使用。

通过本实例的学习,掌握相关电路设计,并掌握以下知识点:

●了解单片机的模拟比较器。

●了解单片机的模拟比较器的使用。

●掌握单片机模拟比较器的编程。

6.1.2、器件和原理

1、模拟比较器的介绍

ATmega16的模拟比较器可以实现对两个输入端:

正极AIN0和负极AIN1(分别对应于ATmage16的引脚PB2、PB3)的模拟输入电压进行比较。

当AIN0上的电压高于AIN1的电压时,模拟比较器输出ACO被设为“1”。

比较器的输出还可以被设置作为定时计数器1输入捕获功能的触发信号。

此外,比较器的输出可以触发一个独立的模拟比较器中断。

用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。

2、与模拟比较器相关的寄存器

与模拟比较器相关的寄存器是SFIOR、ACSR。

用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。

1)特殊功能IO寄存器—SFIOR

寄存器SFIOR中的第3位ACME为模拟比较器多路使能控制位。

当该位为逻辑“1”,同时模数转换(ADC)功能被关闭(ADCSRA寄存器中的ADEN使能位为“0”)时,允许使用ADC多路复用器选择ADC的模拟输入端口作为模拟比较器反向端的输入信号源。

当该位为零时,AIN1引脚的信号将加到模拟比较器反向端。

本实例中我们使用ADC的模拟输入端口作为模拟比较器反向端的输入信号源,所以需要设置第3位ACME为1.

2)模拟比较器控制和状态寄存器—ACSR

ACSR是模拟比较器主要的控制寄存器,其中各个位的作用如下:

1.位7—ACD:

模拟比较器禁止

当该位设为“1”时,提供给模拟比较器的电源关闭。

该位可以在任何时候被置位,从而关闭模拟比较器。

在MCU闲置模式,且无需将模拟比较器作为唤醒源的情况下,关闭模拟比较器可以减少电源的消耗。

要改变ACD位的设置时,应该先将寄存器ACSR中的ACIE位清零,把模拟比较器中断禁止掉。

否则,在改变ADC位设置时会产生一个中断。

2.位6—ACBG:

模拟比较器的能隙参考源选择

当该位为“1”时,芯片内部一个固定的能隙(Bandgap)参考电源1.22V将代替AIN0的输入,作为模拟比较器的正极输入端。

当该位被清零时,AIN0的输入仍然作为模拟比较器的正极输入端。

3.位5—ACO:

模拟比较器输出

模拟比较器的输出信号经过同步处理后直接与ACO相连。

由于经过同步处理,ACO与模拟比较器的输出之间,会有1~2个时钟的延时。

4.位4—ACI:

模拟比较器中断标志位

当模拟比较器的输出事件符合中断触发条件时(中断触发条件由ACIS1和ACIS0定义),ACI由硬件置“1”。

若ACIE位置“1”,且状态寄存器中的I位为“1”时,MCU响应模拟比较器中断。

当转入模拟比较中断处理向量时,ACI被硬件自动清空。

此外,也可使用软件方式清零ACI:

对ACI标志位写入逻辑“1”来清零该位。

5.位3—ACIE:

模拟比较器中断允许

当ACIE位设为“1”,且状态寄存器中的I位被设为“1”时,允许模拟比较器中断触发。

当ACIE被清“0”时,模拟比较器中断被禁止。

6.位2—ACIC:

模拟比较器输入捕获允许

当该位设置为“1”时,定时计数器1的输入捕获功能将由模拟比较器的输出来触发。

在这种情况下,模拟比较器的输出直接连到输入捕获前端逻辑电路,从而能利用定时器/计数器1输入捕获中断的噪声消除和边缘选择的特性。

当该位被清零时,模拟比较器和输入捕获功能之间没有联系。

要使能比较器触发定时器/计数器1的输入捕获中断,定时器中断屏蔽寄存器(TIMSK)中的TICIE1位必须被设置。

7.位1、0—ACIS1、ACIS0:

模拟比较器中断模式选择

这2个位决定哪种模拟比较器的输出事件可以触发模拟比较器的中断。

不同的设置参见表6.1.1。

表6.1.1模拟比较器中断模式选择

ACIS1

ACIS0

中断模式

0

0

比较器输出的上升沿和下降沿都触发中断

0

1

保留

1

0

比较器输出的下降沿触发中断

1

1

比较器输出的上升沿触发中断

注意:

当要改变ACIS1、ACIS0时,必须先清除ACSR寄存器中的中断允许位,以禁止模拟比较器中断;否则,当这些位被改变时,会发生中断。

在本实例中,我们要使用模拟比较器,所以应当允许模拟比较器,即ACD应为0,选择芯片内部的固定能隙参考电源。

即ACBG设置为1,我们不使用中断和捕获,所以不必理会与此相关的各位。

3)模拟比较器的多路输入

用户可以选择ADC7..0引脚中的任一路的模拟信号代替AIN1引脚,作为模拟比较器的反向输入端。

模数转换的ADC多路复用器提供这种选择的能力,但此时必须关闭芯片的ADC功能。

当模拟比较器的多路选择使能位(SFIOR中的ACME位)置“1”,同时ADC被关闭时(ADCSRA中的ADEN位置“0”),由寄存器ADMUX中的MUX[2:

0]位所确定的引脚将代替AIN1作为模拟比较器的反向输入端,如表6.1.2所示。

如果ACME被清零,或ADEN被置1,则AIN1仍将为模拟比较器的反向输入端。

表6.1.2模拟比较器多路输入选择

ACME

ADEN

MUX2..0

模拟比较器反向输入端

0

x

xxx

AIN1

1

1

xxx

AIN1

1

0

000

ADC0

1

0

001

ADC1

1

0

010

ADC2

1

0

011

ADC3

1

0

100

ADC4

1

0

101

ADC5

1

0

110

ADC6

1

0

111

ADC7

本实例中我们采用ADC0作为模拟比较器的反向输入端,所以选择ADMUX寄存器中的MUX2:

0=0;

6.1.3、电路

本实例的电路包含分压电路,下面的电路是电阻分压电路,如下图所示。

1、电路原理

在本实例中利用电位器(即可调电阻)组成分压电路,单片机的PA0连接在电位器的动片引脚上,这个电路实际上相当于两个电阻组成的串联电路,只不过这两个电阻的阻值是可变的,改变动片的位置,就可以改变PA0与地之间的电阻值,根据串联电路分压的原理,当动片移动时,PA0处的电压就会发生变化。

2、电路连接

电路电位器的动片引脚连接到单片机的PA0口,作为模拟比较器的反向输入端。

6.1.4、程序设计

1、程序功能

程序的功能是使用单片机的模拟比较器比较PA0口的电压与单片机内部的固定能隙电压(1.22V)之间的高低,如果PA0的电压低于1.22V,则D1灯点亮,否则D2灯点亮。

2函数说明

本程序有两个功能函数,分别是:

●端口初始化函数,设置连接D1、D2两个LED的端口PB0、PB1为输出口,输出低电平,使两个LED都处于熄灭状态。

●模拟比较器初始化函数

设置与模拟比较器相关的寄存器,使模拟器按照一定的方式工作。

3、使用WINAVR开发环境,我们使用的是外部12M的晶振,所以需要将makefile文件中的时钟频率修改为12M。

另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序)。

4、程序代码

#include

#include

#include//中断函数头文件

//函数声明

voidPort_Init(void);//端口初始化配置

voidCompare_Init(void);//模拟比较器初始化设置

intmain(void)

{

Port_Init();

Compare_Init();

sei();//使能全局中断

while

(1)

{

if(ACSR&(1<

{

PORTB=0X01;//低于1.22V,D1点亮,

}

else

{

PORTB=0X02;//高于1.22V,D2点亮,

}

}

}

//端口状态初始化设置函数

voidPort_Init()

{

PORTB=0X00;//

DDRB|=(1<

}

//模拟比较器初始化函数

voidCompare_Init()

{

SFIOR|=(1<

//作为模拟比较器反向输入端的信号源。

//同时选择ADC的ADC0作为输入端,并且关闭AD转换的使能

ACSR|=(1<

}

6.2模数转换的ADC实验

6.2.1、实例功能

AVR的模数转换器ADC具有下列特点:

●10位精度;

●0.5LSB积分非线形误差

●±2LSB的绝对精度;

●13µs~260µs的转换时间;

●在最大精度下可达到每秒15kSPS的采样速率;

●8路可选的单端输入通道;

●7路差分输入通道;

●2路差分输入通道带有可选的10×和200×增益;

●ADC转换结果的读取可设置为左端对齐(LEFTADJUSTMENT);

●ADC的电压输入范围0~Vcc;

●可选择的内部2.56V的ADC参考电压源;

●自由连续转换模式和单次转换模式;

●ADC自动转换触发模式选择;

●ADC转换完成中断;

●休眠模式下的噪声抑制器(NOISECANCELER)。

在本实例中,我们将编写程序实现将模数转换后获得的电压值通过单片机的串口发送到计算机,然后通过计算机上的串口助手显示测量的电压值。

本实例共有3个功能模块,分别描述如下:

●单片机系统:

使用单片机的串口实现将模数转换后获得的电压值通过串口发送到计算机。

●外围电路:

RS232电平转换电路,DB9串行接口插座,模拟电压输入采集电路。

●软件程序:

进一步熟悉单片机的串行通信,并掌握单片机的模数转换的方法。

6.2.2、器件和原理

关于串行接口的原理已接单片机与计算机的串口的连接在上一实例中进行了描述,在本实例中不再重复。

本实例只介绍ATmega16单片机如何通过内置的模数转换模块采集外界输入的模拟电压。

1、ATmega16单片机的模数转换器ADC介绍

由于单片机只能处理数字信号,所以外部的模拟信号量需要转变成数字量才能进一步的由单片机进行处理。

ATmega16内部集成有一个10位逐次比较(successiveapproximation)ADC电路。

因此使用AVR可以非常方便的处理输入的模拟信号量。

ATmega16的ADC与一个8通道的模拟多路选择器连接,能够对以PORTA作为ADC输入引脚的8路单端模拟输入电压进行采样,单端电压输入以0V(GND)为参考。

另外还支持16种差分电压输入组合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有可编程增益放大器,能在A/D转换前对差分输入电压进行0dB(1×),20dB(10×)或46dB(200×)的放大。

还有七种差分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任意一个ADC引脚都可作为相应的正极。

若增益为1×或10×,则可获得8位的精度。

如果增益为200×,那么转换精度为7位。

AVR的ADC功能单元由独立的专用模拟电源引脚AVcc供电。

AVcc和Vcc的电压差别不能大于±0.3V。

ADC转换的参考电源可采用芯片内部的2.56V参考电源,或采用AVcc,也可使用外部参考电源。

使用外部参考电源时,外部参考电源由引脚ARFE接入。

使用内部电压参考源时,可以通过在AREF引脚外部并接一个电容来提高ADC的抗噪性能。

ADC功能单元包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。

ADC通过逐次比较(successiveapproximation)方式,将输入端的模拟电压转换成10位的数字量。

最小值代表地,最大值为AREF引脚上的电压值减1个LSB。

可以通过ADMUX寄存器中REFSn位的设置,选择将芯片内部参考电源(2.56V)或AVcc连接到AREF,作为A/D转换的参考电压。

这时,内部电压参考源可以通过外接于AREF引脚的电容来稳定,以改进抗噪特性。

模拟输入通道和差分增益的选择是通过ADMUX寄存器中的MUX位设定的。

任何一个ADC的输入引脚,包括地(GND)以及内部的恒定能隙(fixedbandgap)电压参考源,都可以被选择用来作为ADC的单端输入信号。

而ADC的某些输入引脚则可选择作为差分增益放大器的正、负极输入端。

当选定了差分输入通道后,差分增益放大器将两输入通道上的电压差按选定增益系数放大,然后输入到ADC中。

若选定使用单端输入通道,则增益放大器无效。

通过设置ADCSRA寄存器中的ADC使能位ADEN来使能ADC。

在ADEN没有置“1”前,参考电压源和输入通道的选定将不起作用。

当ADEN位清“0”后,ADC将不消耗能量,因此建议在进入节电休眠模式前将ADC关掉。

ADC将10位的转换结果放在ADC数据寄存器中(ADCH和ADCL)。

默认情况下,转换结果为右端对齐(RIGHTADJUSTED)的。

但可以通过设置ADMUX寄存器中ADLAR位,调整为左端对齐(LEFTADJUSTED)。

如果转换结果是左端对齐,并且只需要8位的精度,那么只需读取ADCH寄存器的数据作为转换结果就达到要求了。

否则,必须先读取ADCL寄存器,然后再读取ADCH寄存器,以保证数据寄存器中的内容是同一次转换的结果。

因为一旦ADCL寄存器被读取,就阻断了ADC对ADC数据寄存器的操作。

这就意味着,一旦指令读取了ADCL,那么必须紧接着读取一次ADCH;如果在读取ADCL和读取ADCH的过程中正好有一次ADC转换完成,ADC的2个数据寄存器的内容是不会被更新的,该次转换的结果将丢失。

只有当ADCH寄存器被读取后,ADC才可以继续对ADCL和ADCH寄存器操作更新。

ADC有自己的中断,当转换完成时中断将被触发。

尽管在顺序读取ADCL和ADCH寄存器过程中,ADC对ADC数据寄存器的更新被禁止,转换的结果丢失,但仍会触发ADC中断。

2、ATmwga16单片机的模数转换器ADC相关的I/O寄存器

1.ADC多路复用器选择寄存器—ADMUX

8.位7,6—REFS[1:

0]:

ADC参考电源选择

REFS1、REFS2用于选择ADC的参考电压源,见表6.2.1。

如果这些位在ADC转换过程中被改变,新的选择将在该次ADC转换完成后(ADCSRA中的ADIF被置位)才生效。

一旦选择内部参考源(AVcc、2.56V)为ADC的参考电压后,AREF引脚上不得施加外部的参考电源,只能与GND之间并接抗干扰电容。

表6.2.1ADC参考电源选择

REFS1

REFS0

ADC参考电源

0

0

外部引脚AREF,断开内部参考源连接

0

1

AVcc,AREF外部并接电容

1

0

保留

1

1

内部2.56V,AREF外部并接电容

9.位5—ADLAR:

ADC结果左对齐选择

ADLAR位决定转换结果在ADC数据寄存器中的存放形式。

写“1”到ADLAR位,将使转换结果左对齐(LEFTADJUST);否则,转换结果为右对齐(RIGHTADJUST)。

无论ADC是否正在进行转换,改变ADLAR位都将会立即影响ADC数据寄存器。

10.位4..0—MUX4:

0:

模拟通道和增益选择

这5个位用于对连接到ADC的输入通道和差分通道的增益进行选择设置,详见表6.2.2。

注意,只有转换结束后(ADCSRA的ADIF是“1”),改变这些位才会有效。

表6.2.2ADC输入通道和增益选择

MUX[4:

0]

单端输入

差分正极输入

差分负极输入

增益

00000

ADC0

N/A

00001

ADC1

00010

ADC2

00011

ADC3

00100

ADC4

00101

ADC5

00110

ADC6

00111

ADC7

01000

N/A

ADC0

ADC0

10×

01001

ADC1

ADC0

10×

01010

ADC0

ADC0

200×

01011

ADC1

ADC0

200×

01100

ADC2

ADC2

10×

01101

ADC3

ADC2

10×

01110

ADC2

ADC2

200×

01111

ADC3

ADC2

200×

10000

ADC0

ADC1

10001

ADC1

ADC1

10010

ADC2

ADC1

10011

ADC3

ADC1

10100

ADC4

ADC1

10101

ADC5

ADC1

10110

ADC6

ADC1

10111

ADC7

ADC1

11000

ADC0

ADC2

11001

ADC1

ADC2

11010

ADC2

ADC2

11011

ADC3

ADC2

11100

ADC4

ADC2

11101

ADC5

ADC2

11110

1.22V(VBG)

N/A

11111

0V(GND)

本实例中我们需要设置ADC的参考电压源为AVcc,即REFS0设置为1,ADC默认转换结果为右对齐,我们不需要改变,模拟通道选择ADC0通道单端输入,即MUX4:

0。

2.ADC控制和状态寄存器A—ADCSRA

11.位7—ADEN:

ADC使能

该位写入“1”时使能ADC,写入“0”关闭ADC。

如在ADC转换过程中将ADC关闭,该次转换随即停止。

12.位6—ADSC:

ADC转换开始

在单次转换模式下,置该位为“1”,将启动一次转换。

在自由连续转换模式下,该位写入“1”将启动第一次转换。

先置位ADEN位使能ADC,再置位ADSC;或置位ADSC的同时使能ADC,都会使能ADC开始进行第一次转换。

第一次ADC转换将需要25个ADC时钟周期,而不是常规转换的13个ADC时钟周期,这是因为第一次转换需要完成对ADC的初始化。

在ADC转换的过程中,ADSC将始终读出为“1”。

当转换完成时,它将转变为“0”。

强制写入“0”是无效的。

13.位5—ADATE:

ADC自动转换触发允许

当该位被置为“1”时,允许ADC工作在自动转换触发工作模式下。

在该模式下,在触发信号的上升沿时ADC将自动开始一次ADC转换过程。

ADC的自动转换触发信号源由SFIOR寄存器中的ADTS位选择确定。

14.位4—ADIF:

ADC中断标志位

当ADC转换完成并且ADC数据寄存器被更新后该位被置位。

如果ADIE位(ADC转换结束中断允许)和SREG寄存器中的I位被置“1”,ADC中断服务程序将被执行。

ADIF在执行相应的中断处理向量时被硬件自动清零。

此外,ADIF位可以通过写入逻辑“1”来清零。

15.位3—ADIE:

ADC中断允许

当该位和SREG寄存器中的I位同时被置位时,允许ADC转换完成中断。

16.位2,0—ADPS[2:

0]:

ADC预分频选择

这些位决定了XTAL时钟与输入到ADC的ADC时钟之间分频数,见表6.2.3。

表6.2.3ADC时钟分频

ADPS[2:

0]

分频系数

000

2

001

2

010

4

011

8

100

16

101

32

110

64

111

128

本实例中我们需要使能ADC,即ADEN设置为1,我们不用自动转换,也不需要中断,所以,ADTE、ADIE位不需要设置。

在通常情况下,ADC的逐次比较转换电路要达到最大精度时,需要50kHz~200kHz之间的采样时钟。

本例中使用的时钟是12M的,所以要将时钟64分频,分频后ADC频率为188KHz,即时钟分频选择ADPS[2:

0]=6。

3.ADC数据寄存器—ADCL和ADCH

●ADLAR=0,ADC转换结果右对齐时,ADC结果的保存方式

●ADLAR=1,ADC转换结果左对齐时,ADC结果的保存方式

当ADC转换完成后,可以读取ADC寄存器的ADC0-ADC9得到ADC的转换的结果。

如果是差分输入,转换值为二进制的补码形式。

一旦开始读取ADCL后,ADC数据寄存器就不能被ADC更新,直到ADCH寄存器被读取为止。

因此,如果结果是左对齐(ADLAR=1),且不需要大于8位的精度的话,仅仅读取ADCH寄存器就足够了。

否则,必须先读取ADCL寄存器,再读取ADCH寄存器。

ADMUX寄存器中的ADLAR位决定了从ADC数据寄存器中读取结果的格式。

如果ADLAR位为“1”,结果将是左对齐;如果ADLAR位为“0”(默认情况),结果将是右对齐。

4.特殊功能I/O寄存器—SFIOR

17.位7..5—ADTS[2:

0]:

ADC自动转换触发源选择

当ADCSRA寄存器中的ADATE为“1”,允许ADC工作在自动转换触发工作模式时,这3位的设置用于选择ADC的自动转换触发源。

如果禁止了ADC的自动转换触发(ADATE为“0”),这3个位的设置值将不起任何作用。

表10-6ADC自动转换触发源的选择

ADTS[2:

0]

触发源

000

连续自由转换

001

模拟比较器

010

外部中断0

011

T/C0比较匹配

100

T/C0溢出

101

T/C1比较匹配B

110

T/C1溢出

111

T/C1输入捕捉

本例中我们不使用自动转换功能,所以该寄存器可以不必设置。

6.2.3、电路

本实例的电路包括232电平转换电路和电阻分压电路,这两种电路在前面的实例中均做过介绍,这里不再重复。

1、电路原理

在本实例中利用MAX3232芯片使单片机输出的TTL电平转换为标准的RS232电平,从而使计算机能够识别。

同时将计算机输出的RS232电平转换为单片机可以识别的TTL电平。

利用电位器产生电阻分压电路,从而产生变化的模拟电压加到单片机的模拟信号采集端口,供单片机采集。

2、电路连接

电路中MAX3232芯片的9、10引脚

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2