版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、硬件课程设计实验报告学院: 计算机学院 实验室: 计-38 机房题目:可存储式电子琴班级: 计科 13-1学号:08133205 姓名: 李亚斌指导老师: 王凯2016 年 1 月摘要此次硬件课程设计是利用微机原理与接口技术课程中所学的 8253,8255 芯片,设计可存储式电子琴。在汇编语言环境下, 利用上述两种芯片,编程让 8255 通过识别键盘产生键值,8253 识别发声从而实现计算机按照按键的不同而发出不同频率的声音。我们利用学习的微机原理与接口技术这门课程课上我们学 到的一些计算机硬件工作的基本原理,汇编语言程序设计方法, 微型计算机接口技术建立了微型计算机系统的整体概念,初步 形成
2、了微机系统软硬件开发的能力。可存储式电子琴能够实现 弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对 应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐, 按下指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。关键词:可存储电子琴;8255;8253;门控信号;c 语言目录1. 设计任务与要求41.1 选题报告41.2 提出问题41.3 需求分析41.4 设计思想42. 硬件方案42.1 设备器材42.2 硬件的选择以及芯片说明52.3 硬件电路92.4 实验连线图102.5 选用预存歌曲113. 软件方案123.1 功能模块123.2 系统各
3、模块程序流程图124. 源程序清单和注释155. 运行结果206. 问题分析与解决方案206.1 实验设计前的问题与解决方案206.2 实验过程中的问题与解决方案207. 结论与体会217.1结论217.2体会218. 参考文献221. 设计任务与要求1.1 选题报告本次硬件课程设计的任务和要求是通过基于 8255A 芯片和 8253 芯片上的电路设计和电路连接并通过对它们进行编程,实现一个具有可存储音乐等功能的电子琴。该器件不仅具有基本的弹奏功能(输入不同的键能发出不同频率的声音即音符),还具有播放预定音乐,高低音转换,同时录音并实现播放的功能。1.2 提出问题设计的电子琴有哪些功能?实现需
4、要使用哪几种硬件来完成? 电子琴的输入是什么,输出是什么?1.3 需求分析功能:弹奏基本音符,播放预定音乐,高低中音的转换,录音并播放;输入:1MHz 脉冲;输出:不同音符对应的频率;硬件:8255A 芯片,8253 芯片, 4*4 键盘。1.4 设计思想通过学习微机原理与接口技术这门课程课上我们学到了很多计算机硬件工作的基本原理,汇编语言程序设计方法,利用微型计算机接口技术建立了微型计算机系统的整体概念。可存储式电子琴能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择低音,中音或高音, 则
5、分别用低音,中音或高音进行弹奏或演奏。利用 8255 的 PC0 口来施加控制信号给与门,用来控制扬声器的开关状态。再利用设置不同的计数值,使 8253 产生不同频率的波形,使扬声器产生不同频率的音调,达到类似与音阶的高低音变换。对于音符,每个音符都有确 定的频率。2. 硬件方案2.1 设备器材实验箱(包括 1Mhz 发生器,8255 芯片,8253 芯片,4*4 键盘,连接线数根)。2.2 硬件的选择以及芯片说明8255 芯片,8253 芯片, 4*4 键盘1)8086CPU 说明:Intel 8086 拥有四个 16 位的通用寄存器,也能够当作八个 8 位寄存器来存取,以及四个 16 位索
6、引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供 64K 8 位元的输出输入(或 32K16位元),以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个寄存器。Intel 8086 有四个 内存区段(segment)寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取 1 MB 内存。8086 把段地址左移 4 位然后把它加上偏移地址。大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用
7、),可以完全地控制分段,使在编程中使用指针(如 C 编程语言) 变得困难。它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是,这种方式产生要让内存扩充到大于 1 MB的困难。而 8086 的寻址方式改变让内存扩充较有效率。8086 处理器的时钟频率介于 4.77MHz(在原先的 IBM PC 频率)和 10 MHz 之间。8086 没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。Intel 8087 是标准版本。2)8255 芯片:8255 是 Intel 公司生产的可编程并行 I/O 接口芯片,有 3 个 8 位并行
8、 I/O 口。具有 3 个通道 3 种工作方式的可编程并行接口芯片(40 引脚)。其各口功能可由软件选择,使用灵活,通用性强。8255 可作为单片机与多种外设连接时的中间接口电路8255 作为主机与外设的连接芯片,必须提供与主机相连的 3 个总线接口, 即数据线、地址线、控制线接口。同时必须具有与外设连接的接口 A、B、C 口。由于 8255 可编程,所以必须具有逻辑控制部分,因而 8255 内部结构分为 3 个部分:与 CPU 连接部分、与外设连接部分、控制部分与 CPU 连接部分:根据定义,8255 能并行传送 8 位数据,所以其数据线为8 根 D0D7。由于 8255 具有 3 个通道
9、A、B、C,所以只要两根地址线就能寻址A、B、C 口及控制寄存器,故地址线为两根 A0A1。此外 CPU 要对 8255 进行读、写与片选操作,所以控制线为片选、复位、读、写信号。各信号的引脚编号如下:(1)数据总线 DB:编号为 D0D7,用于 8255 与 CPU 传送 8 位数据。(2)地址总线 AB:编号为 A0A1,用于选择 A、B、C 口与控制寄存器。(3)控制总线 CB:片选信号、复位信号 RST、写信号、读信号。当 CPU 要对 8255 进行读、写操作时,必须先向 8255 发片选信号选中 8255芯片, 然后发读信号或写信号对 8255 进行读或写数据的操作。与外设接口部分
10、:根据定义,8255 有 3 个通道 A、B、C 与外设连接,每个通道又有 8 根线与外设连接,所以 8255 可以用 24 根线与外设连接,若进行开关量控制,则 8255 可同时控制 24 路开关。各通道的引脚编号如下:(1)A 口:编号为 PA0PA7,用于 8255 向外设输入输出 8 位并行数据。(2)B 口:编号为 PB0PB7,用于 8255 向外设输入输出 8 位并行数据。(3)C 口:编号为 PC0PC7,用于 8255 向外设输入输出 8 位并行数据, 当 8255 工作于应答 I/O 方式时,C 口用于应答信号的通信。控制器部分:8255 将 3 个通道分为两组,即 PA0
11、PA7 与 PC4PC7 组成 A 组,PB0PB7 与 PC0PC3 组成 B 组。如图 7.5 所示,相应的控制器也分为 A 组控制器与 B 组控制器,各组控制器的作用如下:(1)A 组控制器:控制 A 口与上 C 口的输入与输出。(2)B 组控制器:控制 B 口与下 C 口的输入与输出。本实验中,A 口作为 LCD 显示屏数据总线 D0D7,C 口低三位分别接 LCD 屏的D/I、RW、E 接口工作方式:3 种工作方式可用软件编程对控制口设置来指定。三种基本的工作方式为: 方式 0基本的输入输出,方式 1选通输入输出方式, 方式 2双向传送方式。1) 工作方式 0(基本输入输出方式)功能
12、:方式 0 不使用联络信号,也不使用中断,A 口和 B 口可定义为输入或输出口,C 口分成两个部分(高四位和低四位),C 口的两个部分也可分别定义为输入或输出。在方式 0,所有口输出均有锁存,输入只有缓冲,无锁存,C 口还具有按位将其各位清 0 或置 1 的功能。常用于与外设无条件的数据传送或接收外设的数据。2) 工作方式 1(选通输入输出方式)A 口借用 C 口的一些信号线用作控制和状态信号,组成 A 组,B 口借用 C 口的一些信号线用作控制和状态信号,组成 B 组。在方式 1 下,C 口的某些位被占用。方式 1 的输出:当 A 口工作于方式 1 且用作输出口时,C 口的 PC7线用作输出
13、缓冲器满 OBF 信号,PC6 用作外设收到数据后的响应信号ACK,PC3 用作中断请求输出信号线 INTR。当 B 口工作于方式 l 且用作输出口时,C 口的 PC1 线用作输出缓冲器满 OBF 信号,PC2 用作外设收到数据后的响应信号 ACK,PC0 用作中断请求输出信号线 INTR。3) 工作方式 2 (双向输入输出方式)功能:方式 2 是 A 组独有的工作方式。外设既能在 A 口的 8 条引线上发送数据,又能接收数据。此方式也是借用 C 口的 5 条信号线作控制和状态线,A 口的输入和输出均带有锁存。3)8253 芯片8253 是 NMOS 工艺制成的可编程计数器/定时器,有几种芯片
14、型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)。8253 内部有三个计数器,分别称为计数器 0、计数器 1 和计数器 2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端 CLK,一个为门控信号输入端 GATE,另一个为输出端 OUT。每个计数器内部有一个 8 位的控制寄存器,还有一个 16 位的计数初值寄存器 CR、一个计数执行部件 CE 和一个输出锁存器 OL。8253 内部结构:8253 芯片有 24 条引脚,封装在
15、双列直插式陶瓷管壳内。1.数据总线缓冲器数据总线缓冲器与系统总线连接,8 位双向,与 CPU 交换信息的通道。这是 8253 与 CPU 之间的数据接口,它由 8 位双向三态缓冲存储器构成,是 CPU 与 8253 之间交换信息的必经之路。2.读/写控制读/写控制分别连接系统的 IOR#和 IOW#, 由 CPU 控制着访问 8253 的内部通道。接收 CPU 送入的读/写控制信号, 并完成对芯片内部各功能部件的控制功能, 因此, 它实际上是 8253 芯片内部的控制器。A1A0:端口选择信号,由CPU 输入。8253 内部有 3 个独立的通道,加上控制字寄存器,构成 8253 芯片的4 个端
16、口,CPU 可对 3 个通道进行读/写操作 3 对控制字寄存器进行写操作。这 4 个端口地址由最低 2 位地址码 A1 和 A0 来选择。如表所示。3.通道选择(1) CS#片选信号,由 CPU 输入,低电平有效,通常由端口地址的高位地址译码形成。(2) RD#、WR#读/写控制命令,由 CPU 输入, 低电平有效。RD#效时,CPU 读取由 A1A0 所选定的通道内计数器的内容。WR#有效时,CPU 将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。CPU 对 8253 的读/写操作。4.计数通道 02每个计数通道内含 1 个 16 位的初值寄存器、减 1 计数器和 1
17、 个 16 位的(输出)锁存器。8253 内部包含 3 个功能完全相同的通道,每个通道内部设有一个 16 位计数器,可进行二进制或十进制(BCD 码)计数。采用二进制计数时, 写入的初值范围为 0000H0FFFFH,最大计数值是 0000H,代表 65536。 采用BCD 码计数时,写入的初值范围为 00009999,最大计数值是 0000,代表10000。与此计数器相对应,每个通道内设有一个 16 位计数值锁存器。必要时可用来锁存计数值。(特别说明:8253 计数器的值先减 1 再判断是否为 0,为0 就中断了,所以最大初始值为 0,这样减 1 以后,不为 0,所以为最大的,取决于 CF
18、标志位)当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从 CLK 端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。 OUT 端将有输出。表示计数次数到。当某个通道用作定时器时。 由 CLK 输入一定频率的时钟脉冲。根据要求定时的时间长短确定所需的计数值。并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。OUT 将有输出,表示定时时间到。允许从 CLK 输入的时钟频在 12MHz 范围内。因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。 而后者是内时
19、钟脉冲进行减“1”计数。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到:定时系数=需要定时的时间/时钟脉冲周期设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式;计数/定时:向通道写入计数值,启动计数操作;读取当前的计数值:向指定通道读取当前计数器值时,8253 将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。计数到:当计数器减 1 为 0 时,通过引脚 OUTi 向外输出“到”的脉冲信号。计数初值输入存放在初值寄存器中,计数开始
20、或重装入时被复制到计数器中。锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。5.方式选择控制字8253 的初始化编程就是对其工作方式的确定。具体实现就是在 8253 上电后,由 CPU 向 8253 的控制寄存器写入一个控制字,就可以规定 8253 的工作方式、计数值的长度以及计数所用的数制等,另外根据要求将计数值写入 8253 的相应通道。8253 的一个方式控制字只决定一个技术通道的工作模式。2.3 硬件电路图 2-1 音符频率表图 2-28255 引脚图图 2-3 8253 引脚图 2-4 4*4 键盘2.4 实验连线图图 2
21、-5 实验连线图图 2-6 实物连接图2.5 选用预存歌曲图 2-7 歌曲简谱3. 软件方案3.1 功能模块1)键盘模块检测是否有键按下,将按键编码输出。设置为按下 1-7 键对应播放 7 个音符;按下 A 键,进入高音弹奏;按下 B 键,进入中音弹奏;按下 C 键, 进入低音弹奏;按下 D 键,进入录音状态;按下 E 键,播放刚才的录音; 按下 9 键,播放事先储存好的音乐。2)播放歌曲模块利用 8255 的 PC0 口来施加控制信号给与门,用来控制扬声器的开关状态。再 利用设置不同的计数值,使 8253 产生不同频率的波形,使扬声器产生不同频率的音调从而发出声音。3)高中低音模块利用设置不
22、同的计数值,使 8253 产生不同频率的波形,使扬声器产生不同频率的音调,达到类似与音阶的高低音变换。3.2 系统各模块程序流程图1)键盘模块流程图图 3-1 键盘模块流程图2)播放歌曲模块流程图图 3-2 播放歌曲流程图3)高中低音模块流程图图 3-3 高中低音模块图4)主程序流程图图 3-4 主程序流程图4. 源程序清单和注释/*8255C 口接键盘(实际 8255 的 PC0PC3 接键盘的列 0列 3,PC4PC7 接键盘的行 0行3)8255CS 接地址译码输出的 288h28fh。8255PA1 接 8254GATE0PA0 接与门输入端 8254CLK0 接 1M 时钟 8254
23、 OUT0 接与门输入端与门输出端接喇叭*/#include#include#include ApiExusb.h#pragma comment(lib,ApiExusb.lib)/1234567unsigned short low = 0xe8,0x49,0x31,0x47,0xf7,0xe0,0xe8;/计数值的低位unsigned short low1 =0x0e,0x0d,0x0b,0x0b,0x09,0x08,0x07;/计数值的高位unsigned short mid = 0x78,0xa7,0xed,0x98,0xfb,0x70,0xf4;/ 中 音 pass unsigned
24、short mid1 =0x07,0x06,0x05,0x05,0x04,0x04,0x03;/unsigned short high= 0xbc,0x53,0xf6,0xcb,0x7d,0x38,0xfc;/高音 passunsigned short high1=0x03,0x03,0x02,0x02,0x02,0x02,0x01;unsigned short luyin =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/存放录音最多/6717137356561523341unsignedshortsong=0x70,0xf4,0xbc,0xf4,0xbc,
25、0xf6, 0xf4,0xed,0xfb,0x70,0xfb,0x70,0xbc,0xfb,0xa7,0xed,0x98,0xed;/671713356561523434Unsignedshortsong1=0x04,0x03, 0x03,0x03,0x03,0x02,0x03,0x05,0x04,0x04,0x04,0x04,0x03,0x04,0x06,0x05,0x05,0x05;/预置音乐void de_lay(unsigned short i,unsigned short j);/unsigned void sing_mode(int a, int k);void record_mo
26、de(int a,byte j,byte z); void replay_mode();void play_mode(); void main()byte data;byte x,i,j,m;/x 为录音功能标签 默认 x=0 即未开启录音m 为高中低音标签 默认 m=1 即高音x=0; m=2; j=0;byte z; z=0;printf(可存储式电子琴nn);getch();if(!Startup()/*打开设备*/printf(ERROR: Open Device Error!n); return;printf(press any key to exit); while(!kbhit(
27、)PortWriteByte(0x28b,0x81);/设置 8255 的 A 口 C 口均为输出PortWriteByte(0x28a,0x0f);/列置为高电平PortReadByte(0x28a,&data);i=data;if (i!=0x0f)i=data;Sleep(50); PortWriteByte(0x28b,0x88); PortWriteByte(0x28a,0xf0);PortReadByte(0x28a,&data);/行置为高电平i=i|data;/ 此时 i 为键盘编码/1-7 9 或 A-F if(i=0x7b) j=1; printf(1t); sing_mo
28、de(m,j); z+;record_mode(x,j,z);if(i=0x7d) j=2; printf(2t); sing_mode(m,j); z+;record_mode(x,j,z); if(i=0x7e) j=3; printf(3t); sing_mode(m,j); z+;record_mode(x,j,z); if(i=0xb7) j=4; printf(4t); sing_mode(m,j); z+; record_mode(x,j,z); if(i=0xbb) j=5; printf(5t); sing_mode(m,j); z+; record_mode(x,j,z);
29、 if(i=0xbd) j=6; printf(6t); sing_mode(m,j); z+;record_mode(x,j,z); if(i=0xbe) j=7; printf(7t); sing_mode(m,j); z+;record_mode(x,j,z); if(i=0xdb) j=9;printf(播放歌曲n);play_mode();if(i=0xdd) j=10;printf(进入高音n);sing_mode(m,j); if(m=2) m=m-1; else;if(m=3) m=m-2; else;/A 高音if(i=0xde) j=11;printf(进入中音n);sin
30、g_mode(m,j); if(m=1) m=m+1; else;if(m=3) m=m-1; else; /B 中音if(i=0xe7) j=12;printf(进入低音n);sing_mode(m,j); if(m=1) m=m+2; else;if(m=2) m=m+1; else;/C 低音if(i=0xeb) j=13;printf(开始录音n);x+=1;record_mode(x,j,z);/z=0;/D 录音if(i=0xed) j=14; printf(播放录音n);replay_mode();/E 高音播放录音if(i=0xee) j=15; break;/F 退 Clea
31、nup();/*关闭设备*/void de_lay(unsigned short i,unsigned short j) PortWriteByte(0x280,i);/*输出计数值低位*/Sleep(50);PortWriteByte(0x280,j);/*输出计数值高位*/ void sing_mode(int a,int k)switch(a)case 1:if(1=k=7) /break;PortWriteByte(0x283,0x36);/00010110,8254 控制字,分高低位传送Sleep(10);de_lay(highk-1,high1k-1);Sleep(10);Port
32、WriteByte(0x288,0x03);/设置 8255A 口,开扬声器Sleep(300);/*延时*/PortWriteByte(0x288,0x00);/设置 8255A 口,关扬声器else; break;case 2:/中音if(1=k=7) /break;PortWriteByte(0x283,0x36);/00010110,8254 控制字,分高低位传送Sleep(10);de_lay(midk-1,mid1k-1);Sleep(10);PortWriteByte(0x288,0x03);/设置 8255A 口,开扬声器Sleep(300);/* 延 时 */ PortWri
33、teByte(0x288,0x00);/设置 8255A 口,关扬声器else;break; case 3:/低音if(1=k0)luyinz-1=j;printf(录音为:);printf(%d,luyinz-1);printf(n);else; break;void replay_mode() printf(n); int x;for(int i=0;i20;i+)x=luyini;if(x!=0)PortWriteByte(0x283,0x36);/00010110,8254 控制字,分高低位送Sleep(10);de_lay(midx-1,mid1x-1);Sleep(10);Port
34、WriteByte(0x288,0x03);/设置 8255A 口,开扬声器Sleep(300);/*延时*/PortWriteByte(0x288,0x00);/设置 8255A 口,关扬声器printf(:%d,luyini);else;void play_mode()/ 播放预置音乐for(int i=0;i20;i+)printf(i=%d,i);PortWriteByte(0x283,0x36);/00010110,8254 控制字,分高低位传送Sleep(10);de_lay(songi,song1i);Sleep(10);if( i=6|i=13)PortWriteByte(0x
35、288,0x03);/设置 8255A 口,开扬声器Sleep(600);/*延时*/PortWriteByte(0x288,0x00);/设置 8255A 口,关扬声器printf(haha);else if( i=2|i=4|i=5|i=9)PortWriteByte(0x288,0x03);/设置 8255A 口,开扬声器Sleep(400);/*延时*/PortWriteByte(0x288,0x00);/设置 8255A 口,关扬声 else PortWriteByte(0x288,0x03);/设置 8255A 口,开扬声器Sleep(350);/*延时*/PortWriteByte(0x288,0x00);/设置 8255A 口,关扬声器 5. 运行结果图 5-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《无人驾驶汽车的工作过程-无人驾驶汽车的感知、决策与控制执行》教案-2025-2026学年清华版(贵州)小学信息技术六年级下册
- 2026年全国卷英语押题模拟卷压轴综合易错含解析
- 物美科技新零售门店运营
- 仪表设备点检员QC管理能力考核试卷含答案
- 催化重整装置操作工发展趋势能力考核试卷含答案
- 飞机仪表电气系统装调工创新思维考核试卷含答案
- 标本保管员操作知识能力考核试卷含答案
- 海底管道保温工安全培训效果测试考核试卷含答案
- 2026年高职(水利工程施工技术)水利工程监理基础综合测试题及答案
- 美甲师职业规划范文
- 对外投资合作国别(地区)指南-马来西亚(2025年版)
- 心血管植入型电子器械植入术护理专家共识总结2026
- 2025年大学生提干选拔考试历年真题试卷及答案
- 2025年中国邮政经济金融笔试及答案
- 2025年湖南省政府采购评审专家考试真题库及答案
- 钢结构劳务分包施工方案
- 2026年及未来5年市场数据中国饲料用蛋氨酸行业市场调查研究及投资战略咨询报告
- 支气管哮喘急性发作护理指南
- 《苏菲的世界》读书笔记及心得分享
- 2024年新高考全国卷英语试题及答案(完整版)
- 2025年冰雪运动行业全球发展趋势研究报告
评论
0/150
提交评论