基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx

上传人:b****8 文档编号:13019351 上传时间:2023-06-10 格式:DOCX 页数:47 大小:465.76KB
下载 相关 举报
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第1页
第1页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第2页
第2页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第3页
第3页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第4页
第4页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第5页
第5页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第6页
第6页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第7页
第7页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第8页
第8页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第9页
第9页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第10页
第10页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第11页
第11页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第12页
第12页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第13页
第13页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第14页
第14页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第15页
第15页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第16页
第16页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第17页
第17页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第18页
第18页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第19页
第19页 / 共47页
基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx

《基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx》由会员分享,可在线阅读,更多相关《基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx(47页珍藏版)》请在冰点文库上搜索。

基于某52单片机电子时钟的设计论文设计纯总汇编语言编写.docx

基于某52单片机电子时钟的设计论文设计纯总汇编语言编写

编号

 

单片机课程设计

(2013级)

 

题目:

基于52单片机电子时钟的设计

学院:

物理与机电工程学院

专业:

电子信息科学与技术

作者姓名:

陈✘✘党✘✘杜✘✘

指导教师:

张✘✘职称:

教授

完成日期:

2016年7月2日

 

二〇一六年七月

 

基于52单片机电子时钟的设计

摘要

本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。

将软硬件有机地结合起来,使得系统能够实现液晶显示,显示有年、月、日、时、分、秒以及星期,还可以设置闹钟和整点报时。

其中软件系统采用单片机汇编语言编写程序,包括显示程序、闹钟程序、中断、延时程序,按键消抖程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

关键词 :

STC89C52芯片;时钟芯片DS1302;单片机汇编语言;液晶显示电路

 

1设计任务及要求分析

1.1设计任务:

基于单片机的电子时钟设计

1.2要求:

1.2.1用LCD液晶作为显示设备

1.2.2可以分别设定小时、分钟和秒,复位后时间为000000

1.2.3能实现日期的设置年、月、日

1.3扩展要求:

如闹钟功能、显示星期、整点音乐报时等

2系统方案

2.1系统整体方案的论证

电路原理设计是基于小系统板包括电源电路、复位电路、按键电路、DS1302时钟电路、液晶显示驱动电路、输出控制电路。

电源部分是用电池来提供的3v-5v,晶体振荡器采用的是12MHz的石英晶体振荡器。

整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。

时钟芯片产生时钟信号,利用单片机的I/O口传给单片机;并通过I/O口实现LCD的显示。

系统设有4个独立式按键可以对时间年、月、日和星期进行调整,还可以设置闹钟。

具体如图2.1所示:

 

STC89C52单片机芯片

电源

复位电路

按键电路

时钟振荡电路

液晶显示

DS1302时钟芯片电路

输出控制电路

图2.1系统整体框图

3硬件设计与实现

3.1单片机最小系统

STC89C52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

STC89C52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器。

一个6向量2级中断结构,全双工串行口及时钟电路。

另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

3.2振荡电路的工作原理

STC89C52单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟,外部还需附加电路。

XTAL1引脚为反相放大器和时钟发生电路的输入端,XTAL2引脚为反相放大器的输出端。

振荡电路如图3.1所示:

图3.1振荡电路图

3.2时钟电路的工作原理

片内时钟发生器实质是个2分频的触发其输入来自振荡器的fosc,输出为2相时钟信号,即节拍信号P1、P2,器频率为fosc\2。

2个节拍为1个状态时钟S。

状态时钟再3分频后为ALE信号,其频率为fosc\6,状态时钟6分频后为机器周期信号,器频率为fosc\12。

特殊功能寄存器PCON的PD位可以控制振荡器的工作,当PD=0时,振荡器停止工作,单片机进入低功耗工作状态,复位后,PD=0,振荡器正常工作。

时钟电路如图3.2所示:

图3.2时钟电路图

3.3单片机最小系统电路图

图3.3单片机最小系统电路图

3.4时钟芯片

(1)DS1302是一种可编程的实时时钟芯片,具有计算2100年前的时间的能力,包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信权通过一条串行输出口。

时钟/日历提供包括秒、分、时、日期、月份和年份信息。

闰年可自行调整,以串行方式向单片机传送单字节或多字节的秒、分、时、日、月、年等实时时间数据;只通过三根线进行数据的控制和传递:

RST、I/O、SCLK;其在电路的功能是还具有在出现主电源断电时备用电源可继续保持时钟的连续运行。

时钟引脚图如图3.4所示:

 

图3.4时钟引脚图

(2)DS1302芯片内部寄存器读写地址及位定义格式如表3-1:

寄存器名

读写地址

取值范围

位定义

写操作

读操作

D7

D6

D5

D4

D3

D2

D1

D0

秒寄存器

80H

81H

00-59

CH

秒十位

秒个位

分寄存器

82H

83H

00-59

0

分时位

分个位

时寄存器

84H

85H

01-12或00-23

12/24

0

AM/PM

十位

小时个位

日期寄存器

86H

87H

01-28-31

0

0

十位

日个位

星期寄存器

8AH

8BH

01-07

0

0

0

0

星期位

月寄存器

88H

89H

01-12

0

0

0

十位

月个位

年寄存器

8CH

8DH

00-99

年十位

年个位

控制寄存器

控制寄存器

8EH

8EH

8FH

8FH

WP

WP

0

0

0

0

0

0

0

0

表3-1DS1302芯片内部寄存器读写地址及位定义

如果单片机要对DS1302内部寄存器进行读写操作,必须先将与寄存器对应的位操作地址传送给DS1302,然后再进行读写数据的操作。

控制寄存器是用来决定能否对DS1302进行读写操作,当控制字的最高位WP=0时,允许进行读写操作;当WP=1时,禁止读写操作。

所以单片机对DS1302进行读写操作时,必须先将控制字00H写入到DS1302的控制寄存器中。

3.5液晶显示电路

LCD显示器能显示数码管不能显示的其他字符、文字和图形,是十分重要的显示终端,LCD1602是字符点阵液晶显示模块。

利用LCD1602,所用的时间年、月、日、星期可同时可见,一目了然,采用双行显示,让电子钟能够更直观的显示。

其实图如图3.5、显示电路图如图3.6、引脚功能如表3-2所示:

图3.5液晶显示器实图

图3.6液晶显示电路图

引脚号

引脚名称

引脚功能含义

1

Vss

地管脚(GND)

2

Vdd

+5V电源引脚(Vcc)

3

Vo

液晶显示驱动电源(0~5V),可接电位器

4

RS

数据和指令选择控制端,RS=0:

命令/状态RS=1:

数据

5

R/W

读写控制线,R/W=0:

写操作,R/W=1:

读操作

6

E

数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据转换

7~14

DB0~DB7

数据线,可以用8位连接,也可以用高四位连接,节约资源

15

A

背光控制正电源

16

K

背光控制地

表3-2LCD液晶显示器引脚功能

3.6输出控制电路

在P2.0端口接一个蜂鸣器,用于整点报时和响闹铃。

具体如图3.7所示:

图3.7输出控制电路图

3.7按键电路

本次设计采用按键电平复位,按键电平复位相当于按复位键后,复位端通过电阻与Vcc电源接通,按键电路图如图3.8所示:

图3.8按键电路图

4软件设计与实现

4.1软件总体设计方案

4.1.1软件设计目标

软件部分总体上是模块化的设计思想,通过子程序调用设计方式,将所有的模块综合到一起,使程序可读性较高。

4.1.2总体架构说明

该时钟程序设计思路如下:

(1)在程序头将设计中的一些固定空间进行分配并注释。

(2)初始化程序,如设定时钟初始显示“2016年6月30日,星期四,00:

00”以便一开始就能进入整点报时状态,显示该功能;设定使用定时器1;将一些未到时钟设计功能的功能端口关闭等。

(3)开始主程序进行程序扫描,先扫描拆字子程序,将分配好的时分秒等高地位的数字调入到显示子程序中。

→显示子程序通过分配的空间对应口将拆字子程序的内容在液晶显示器上显示相应的时分秒,再调用走时程序使时钟进行读秒等工作。

→进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。

如进入时间调整、闹钟设置、闹钟开启与否等。

→进入闹钟的判断,在时分上与设置的闹铃时间吻合的话就做相对应的判断,再依据是否有开启闹钟而进行响铃与否,如果有响铃则设置其一直响铃知道有人为按取消按键取消闹铃。

→进入整点报时扫描,判断是否在时分上都进入了整点,如果是就报时,然后就退出整点报时,等到下一个整点的到来。

→最后返回主程序头重新依次扫描。

显示过程设有消隐,按键设有去抖。

(4)子程序部分。

在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。

这些子程序包括拆字子程序、延时子程序、走时间子程序、整点报时子程序、按键处理子程序、调时间子程序、闹钟设置子程序、闹钟子程序、闹钟开启子程序。

主流程图如图4.1所示:

 

开始

读时间

各模块初始化

是否处于设置

拆字

闹钟是否开启

比较时钟时间与当前时间

按键模块

按键功能是否开启

判断整时

是否执行报时

执行报时

结束

 

Y

 

N

 

N

Y

 

N

Y

 

N

 

Y

 

图4.1主程序流程图

 

子程序详解表如表4-1所示:

子程序名称

功能

改变

Sub1

闹钟

Pf

Sub2

报时一声

Pf、th1、jiepai

zhengshi

判断当前时间是否是整时

shengshu、cxbs

baoshi

执行报时功能

Shengshu、cxbs

bijiao

判断是否到闹钟时间

TR0

opr00

设置当前时间状态

IsSheZhi、r1、KeyCode

opr01

进入设置闹钟时间状态

IsSheZhi、r1、KeyCode

opr02

把所设置的时间作为当前时间

KeyCode、sec、min、hour、day、month、IsSheZhi

opr03

把所设置的时间作为闹钟时间

KeyCode、IsSheZhi

write

DS18b20写

DQ、r4、r7

read

DS18b20读

DQ、r0、r4、r5、r7

set1302

ds1302初始化

Rst、Sclk、r0、r1、r6

get1302

读出秒,分,时,日,月,星期,年读出秒,分,时,日,月,星期,年

Rst、Sclk、r0、r1、r6

clockrd

ds1302读子程序

Sclk、r7

Ds1302R

ds1302写数据子程序

Sclk、r7

chaizi

时钟拆字

DspBuf、b、r0

Initdisplay

初始状态显示

Dptr

dispGD

固定字符显示

word

字‘年’,‘月’,‘日’‘°c’

LcdDspBuf

写入显示数字

R0、R2

LcdWrDat

写入数据

LCDRS、LCDRW、LcdE

LcdWrCmd

写入命令

LCDRS、LCDRW、LcdE

lcd_init

LCD初始化

delay

延时

r6、r7

anjian1

执行按键1的功能

KeyCode、IsSheZhi

anjian2

执行按键2的功能

KeyCode、IsSheZhi

anjian3

执行按键3的功能

KeyCode、QH

anjian4

执行按键4的功能

KeyCode、bs

www

www

www

扫描当前时间编辑位

wwwa

扫描闹钟时间编辑位

yan500ms

延时500ms

hex2bcd

拆字子程序

display_nz

显示闹钟时间

表4-1子程序详解表

4.2按键模块设计

设计系统中的按键模块仅占用四个I/O口,从89s52芯片p1.0、p1.1、p1.2、p1.3四个引脚接入进行控制。

当没有按键按下时,均为高电平,有按键按下时相应I/O口为低电平,但并没有立即执行相应的程序,延时5ms后若再为低电平,等I/O口恢复高电平,即按键松开时,才执行相应的程序,此时按键才起作用。

这样该按键模块具有去抖动,且按键按下一次仅作用一次,起到精确判断的作用。

4.2.1按键1的说明

按键1有四种功能,分别为下面4个子程序:

(1)子程序0的功能为:

进入设置当前时间状态,且令keycode=2;

(2)子程序1的功能为:

进入设置闹钟时间状态,且令keycode=3;

(3)子程序2的功能为:

把所设置的时间作为当前时间,且令keycode=0;

(4)子程序3的功能为:

把所设置的时间作为闹钟时间,且令keycode=0;

每次按下按键1,按键1程序根据的KeyCode内容转入各对应的子程序中(因为当KeyCode值不同时,经过计算得到dptr的值不同,然后经过jmp@a+dptr指令就可跳转到不同的子程序中,具体程序说明),从而实现不同的功能。

从各按键的功能可知,每次按下按键1,都会改变KeyCode内容,使按键1的功能发生改变。

4.2.2按键2的说明

按键2有两种不同的功能:

对应于设置状态为加1;对应于非设置状态为切换屏幕。

所以按键2程序开头就先判断闹钟是否处于设置状态。

当闹钟处于非设置状态时,keycode等于0或1;处于设置状态时,keycode等于2或3;所以可用如下语段判断闹钟是否处于设置状态:

当闹钟处于设置状态,keycode值大于2,c等于0

当闹钟处于非设置状态,keycode值小于2,c等于1

4.2.3其他按键的说明

剩下3、4按键都于按键2类似,先判断是否处于设置状态,然后转入不同的语句,不再说明。

4.2.4报时功能的说明:

当报时功能开启,即bs=0时,LCD上会出现相应的标示符号

,此时主程序将扫描zhengshi子程序。

zhengshi子程序能判断当前时间是否为整点,若为整点将使cxbs=0,且把hour由BCD码化为二进制存储在字节shengshu(为报时声数,将在baoshi子程序中使用)中,之后主程序将扫描baoshi子程序,即开始报时。

chuzhi=0,由baoshi子程序可知,闹钟从0秒开始报时,当报时完毕将自动令cxbs=1。

4.2.5闹钟功能的说明:

当闹钟功能开启,即bj=0时,LCD上会出现相应的标示符号

此时,主程序将扫描zhengshi子程序。

zhengshi子程序对当前时间和闹钟时间进行比较,当它们的分、时全相等时开启中断sub1,否则关闭中断sub1。

这样就可实现闹钟闹铃一分钟后自动停止鸣叫的要求。

4.2.6加1、移位功能的说明:

将年份前两位与年(year)、月(month)、星期(week)、日(day)、时(hour)、分(min)、秒(sec)拆字后分别存储在DspBuf-2、DspBuf-1、DspBuf+0、DspBuf+1、DspBuf+2、DspBuf+3等13个字节中。

而把它们的每一为在LCD上的显示位置地址放在如下表中:

tab4:

db80h,81h,82h,83h,85h,86h,88h,89h,8eh,0c2h,0c3h,0c5h,0c6h,0c8h,0c9h;

当前时间各编辑位在LCD上的位置表。

然后执行movr1,#DspBuf+12;inc@r1就可实现对秒个位加1。

执行:

decr1和子程序www就可实现移位功能.

4.3时钟模块设计

单片机要先从DS1302芯片中读取时钟数据,然后通过LCD显示出来。

在读取DS1302的时间和日期之前,先要对DS1302进行赋初始时间并开启时钟。

时钟被启动后若未接收到新的赋时间指令,其内部的时钟将一直不停的运行,以保证时间的实时性和准确性;期间单片机可随时读取DS1302内部时间和日期寄存器中的数值。

4.4液晶显示模块设计

本设计液晶时钟显示系统设计上由液晶显示器显示、时钟芯片DS1302提供时间,可为使用者提供完整的时间信息。

由于LED数码管只能显示数字而无法显示其他中英文字符,并对成本及功能考虑,因此从设计的成本及功能的角度考虑,采用LCD一1602显示模块,它可以显示年、月、日、星期等中文字目。

LCD一1602驱动电路简单,可以由单片机直接输出命令驱动。

5实物调试及测试

5.1实物图

图5.1实物图

5.2实物调试

(1)按下K1键进入调节功能选择状态

图5.2K1键功能图

(2)按下2键有加1和显示调节闹钟界面的功能

(3)按下K3键进入光标移动功能,选择调节年、月、日和时间等

(4)按下K4显示出整点报时图标

图5.3K4键功能图

5.3测试结果及分析

引脚

测试结果

结论

40(VCC)

电压值5.09V

良好

31(EA*)

电压值5.09V

良好

30(ALE)

波形为方波

良好

表5-1测试结果分析表

5.4仿真结果图如下所示

图5.4K4仿真结果图

6不足与展望

6.1设计不足之处

(1)没有停止闹钟的硬件功能

(2)没有实现按键减1,只能加1调节时钟

(3)没有实现音乐整点报时

(4)没有安装三极管,蜂鸣器声音很小

6.2设计的展望

(1)可以增加一个温度传感器以测量和显示温度

(2)实现阴历和阳历的转化

7设计心得

本文的电子钟系统是以单片机(STC89C52)为核心,时钟芯片DS1302、LED1602显示等部分组成。

具体应用Keil2软件调试程序以及Proteus软件进行基于单片机的电子钟设计与仿真。

实现了硬件软化的目的。

经过一段时间的课程设计,我们发现对于书上很多知识还不能灵活运用,有很多知识还要我们去学习。

此次电子时钟的设计给我们奠定了一个实践的基础,很是受益匪浅。

让我们认识到学习不但要立足于书本,而且要注重实践,要以解决理论和实际教学中的实际问题为目的。

通过自己的手来解决问题比用脑子解决问题更加深刻。

学习就应该采取理论与实践结合的方式,这种做法既有助于完成理论知识的巩固,而且可以加强我们的动手和解决实际问题的能力。

 

参考文献

[1]何立民,单片机初级教程—单片机基础[M],北京航空航天大学出版社,2015.9.

[2]何立民,单片机实验与实践教程2[M],北京航空航天大学出版社,2002.1.

[3]张永枫,单片机应用实用教程[M],西安电子科技大学出版社,2005.2.

[4]楼然苗,单片机课程设计指导[M],北京航空航天大学出版社,2014.1.

[5]丁向荣,单片微机原理与接口技术[M],电子工业出版社,2012.6.

[6]徐爱钧,KeilC51单片机高级语言应用编程技术[M],电子工业出版社,2015.9.

[7]杨欣,实例解读51单片机完全学习与应用[M],电子工业出版社,2011.4.

[8]王迎旭,单片机原理及及应用[M].机械工业出版社,2001.

[9]周航慈,单片机应用程序设计技术[M].北京航空航天大学出版社,2002.

[10]谢宜仁,单片机实用技术问答[M].人民邮电出版社,2002.

 

附录

源程序清单:

;初始化

P_LcdequP0;液晶lcd数据总线

pqequp1;按键接口

pfbitp2.0;蜂鸣器接口

ledbitp2.1;led灯指示接口

lcdrsbitp2.5;lcdrs=1选择数据寄存器,lcdrs=0选择指令寄

存器

lcdrwbitp2.6;lcdrw=1进行读操作,lcdrw=0进行写操作

lcdebitp2.7;lcdep由1-->0时,液晶模块执行命令

sclkbitp3.5;时钟芯片时钟线引脚

iobitp3.6;时钟芯片数据传输线引脚

rstbitp3.7;时钟芯片复位线引脚

IsSheZhibit30h;设置状态标示位

BJbit31h;比较标示位

QHbit32h;切换标示位

bsbit33h;报时功能标示位

cxbsbit34h;执行报时标志位

secequ50h

minequ51h

hourequ52h

dayequ53h

weekequ54h

monthequ55h

yearequ56h

KeyCodeequ57h;按键1功能子程序序号存储地址

jiepaiequ58h;存放报时声音的节拍常数

chuzhiequ59h;报时开始秒时间常数

shengshuequ5ah;存放报时声数

DspBufequ60h;当前时间拆字后存储首地址

dspbaequ70h;闹钟时间首地址

org0h

ljmpmain

org00bh

ljmpsub1

org01bh

ljmpsub2

org30h

;主程序

main:

clrIsSheZhi

clrQH

setbBJ

setbbs

setbcxbs

movKeyCode,#00h

movsp,#30h

movyear,#16h;为当前时间赋初值

movmonth,#06h

movweek,#4h

movday,#30h

movhour,#00h

movmin,#00h

movsec,#00h

movDspBuf-1,#0h

movDspBuf-2,#02h

movjiepai,#80h;设置节拍常数

movchuzhi,#00h;设置1秒时开始报时

movdspba+0,#00h;为闹钟时间赋初值

movdspba+1,#09h

movdspba+2,#0h

movdspba+3,#0h

movTH0,#0ffh

movTL0,#0ffh

movTH1,#0ffh

movTL1,#0ffh

movIE,#8aH

movTMOD,#11h

setbpf

acalllcd_init;调LCM的初始化程序

lcallword;把自创字符写入CGRAM的子程序

lcallset1302;DS1302初始化

mainloop:

jb

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

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

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

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