键盘钢琴汇编语言程序设计—微机原理课程设计.doc

上传人:laozhun 文档编号:2386239 上传时间:2023-02-17 格式:DOC 页数:22 大小:286KB
返回 下载 相关 举报
键盘钢琴汇编语言程序设计—微机原理课程设计.doc_第1页
第1页 / 共22页
键盘钢琴汇编语言程序设计—微机原理课程设计.doc_第2页
第2页 / 共22页
键盘钢琴汇编语言程序设计—微机原理课程设计.doc_第3页
第3页 / 共22页
键盘钢琴汇编语言程序设计—微机原理课程设计.doc_第4页
第4页 / 共22页
键盘钢琴汇编语言程序设计—微机原理课程设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《键盘钢琴汇编语言程序设计—微机原理课程设计.doc》由会员分享,可在线阅读,更多相关《键盘钢琴汇编语言程序设计—微机原理课程设计.doc(22页珍藏版)》请在三一办公上搜索。

1、学 号:xxxxxxxxxxx课 程 设 计题 目键盘钢琴汇编语言程序设计学 院自动化学院专 业自动化专业班 级xxxxxxxx姓 名xxxxxx指导教师xxxxxx2012年01月12日课程设计任务书学生姓名: xxxx 专业班级: xxxxxxx 指导教师: xxxx 工作单位: xxxxxx 题 目: 键 盘 钢 琴 汇 编 语 言 程 序 设 计 初始条件: 采用16 位微处理器 8086 CPU 以及86 系列微型计算机的指令系统; 软件设计平台为多功能微型计算机实验软件MFS 中的微机原理实验集成环境MF2KP,仿真设计平台为Proteus 软件。 要求完成的主要任务: 设计汇编语

2、言程序,实现键盘钢琴功能,具体功能要求如下: (1)在键盘上自定义若干键对应钢琴键; (2)单击钢琴键,计算机发出相应音阶,发声时间自定义;(3)单击”ESC”键退出程序。 音阶与频率的对应关系如下表所示:音符45671234567频率/Hz175196220247262294330349392440494523587659 根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试: 撰写课程设计说明书。课程设计说明书的撰写格式如下: (1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3 5 篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。 (2)说明书正文

3、包含总体方案论证(功能分析、系统连接图设计或算法说明);程序流程图设计及其说明、软件设计关键问题说明;程序调试说明、结果记录及分析;课程设计收获及心得体会。(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。 时间安排: (本次课程设计时间:2012 年1 月4 日-13 日,历时一周半)周次具体时间设计内容第一周1月4日指导老师就课程设计内容、设计要求、设计进度安排、评分标准等作具体介绍。强调课程设计期间纪律要求。学生确定选题,明确设计内容及要求。1月5日根据选题查阅资料,完成方案的初步设计,包括系统原理及算法。1月6日绘制系统硬件接线图(接口应用设计题必须)以及程序流程图。第

4、二周1月9日学生根据程序流程图,编写程序代码。1月10日仿真调试、修改。1月11日学生结合程序流程图解释说明设计思路与算法;指导老师检查程序运行效果,并就结果进行评分。1月12日学生撰写课程设计说明书。1月13日上交课程设计说明书,以及答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录引 言11 设计意义及要求21.1 设计意义21.2 设计要求22 总体方案论证32.1按键与音调频率值的对应32.2 扬声器的驱动分析52.3 发声时间63 程序设计73.1 主程序设计及其流程图73.2 子程序设计及其流程图83.2.1 计算频率值的子程序FIFRE83.2.2 发声

5、子程序SOUND93.2.3 延时子程序DELAY104 结果分析114.1 程序调试与改进114.2 结果记录及分析12心得与体会13参考文献14附录 程序代码15引 言汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。而此次的微机原理与接口技术(基于16位机)的

6、课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。通过这个应用程序,按照音乐的谱子连续地按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。1 设计意义及要求1.1 设计意义键盘钢琴,电脑键盘代替钢琴键演奏钢琴乐曲。最原始、也是最流行的版本,音符以ABCDEGF

7、为编排。让不懂音乐的网友可以快速上手,其体积小,简单方便、易传播,因此在网上普及率最高。键盘钢琴让人可以在闲暇时刻,可以小小地娱乐一下,增加生活的乐趣。由于一架钢琴过于昂贵,对于一般的普通工薪阶层的人来说,还是很难接触到钢琴的,而键盘钢琴的出现正好让那些业余爱好者,既满足的对钢琴音乐艺术的追求,也更廉价和便捷。对于初学音乐的人来说,这样的键盘钢琴软件更是训练的好助手,可以帮助你迅速熟悉各音阶音调和旋律节奏。因此,这样的软件也很多版本,有专业版,也有简单的Flash版,当然也有此次课设要求设计的简陋版。专业版能提供多种乐器音色、录放功能、音符显示。不太好的地方是键盘要按下去才发音,没有延时,弹起

8、来不太就手。Flash版音色也比较好,提供了多键位,也可以自定义键位。1.2 设计要求设计汇编语言程序,实现键盘钢琴功能,具体要完成的设计任务如下:(1) 在键盘上自定义若干键对应着钢琴键;(2) 单击钢琴键,计算机发出相应的音阶,发声时间自定义;(3) 单击“ESC”键退出程序音阶与频率的对应关系如下所示:音符45671234567频率/Hz1751962202472622943303493924404945235876592 总体方案论证2.1按键与音调频率值的对应设计此汇编语言程序,要实现键盘钢琴,首先是按键的自定义设计,因为题中要求设计的按键音调音阶有十四个,但是从网上查资料得知,各音

9、阶与其相应频率有如表1-1所示的关系。表1-1 音阶与频率的对应关系 单位:HzA11022044088017603520B12324749498819753950C131262523104620934186D147294587117523494698E165330659131826375277F175349698139727945587G196392784156831366271从表中可知:高低音之间有着大约两倍的关系,这样就很方便数据的储存了,只需要将其中一个音度的频率值存储下了,再进行二倍关系的换算即可得到倍低音、低音、中音、高音、倍高音五种音度的音调频率值。因为题目中主要是对低、中、高

10、音的要求,在这里就以低音为基准存储数据值和换算其他音调频率值,由表1-1中得知低音音符1 2 3 4 5 6 7的音调频率分别为131、147、165、175、196、220、247。其中,中音各音调的频率是相应低音音调频率的两倍, 高音各音调频率是低音的四倍的。又因为低音的频率值最大为247,正好小于一个无符字节数值的最大值255,因此,只需要在程序的数据区内安排七个字节来存放频率数据,即:FREQ DB 131,147,165,175,196,220,247这样,不仅节省了存储空间,而且降低了存储数据的复杂程度。考虑到字母键盘一共也只用26个,就不对所有音调都进行字母键盘的按键定义了,只补

11、齐题目中所缺的高音和低音,共21个音阶。则可以按如下表1-2中的对应关系,设置21个按键分别对应着低、中、高三种音度的各音调的频率值。由于字母所对应的ASCII码并不是连续的,因此在这里就将其的ASCII码存储到数据区,然后根据变址寻址的方式音度音名1234567低音频率/Hz自定义按键131147165175196220247QWERTYU中音频率/Hz自定义按键131*2147*2165*2175*2196*2220*2247*2ASDFGHJ高音频率/Hz自定义按键131*4147*4165*4175*4196*4220*4247*4ZXCVBNM表1-2 音阶频率与自定义按键的对应表对

12、字母按键的ASCII码进行地址编码,可以将字母的ASCII码的按表1-2的顺序存放,即:KEYS DB QWERTYU , ASDFGHJ , ZXCVBNM这样看来,就是将这些ASCII码值分出三类,分别为低音类、中音类、高音类。根据输入KEY的ASCII码值利用一个21次的LOOP循环就可以找到对应的偏移地址,再将所得的偏移地址减去首地址的偏移地址得到该KEY的地址相对值,再把该相对值与6和13大小判断偏移地址的所属类别(小于等于6为低音类,大于6小于等于13为中音类,大于13为高音类)。知道KEY的所属类别,就知道基准频率值应该乘以多大的倍数才是该KEY的真正的频率值,低音类倍数为1,中

13、音类倍数为2,高音类倍数为4。接下来还要确定是哪个基准频率值,由于已经知道所属类别,如果是低音类则就是地址相对值,如果是中音类,则地址相对值要减去7,显然高音类则减去14,就得到了一个0至6的编码,再由换码指令XLAT对频率数据FREQ进行换码,可以很快得到该KEY的对应的基准频率值。最后是将得到的基准频率值乘以得到的类别倍数,就得到最后想要的输入KEY的音调频率值。举例如下:输入按键KEY的ASCII码值为“D”,其ASCII码是44H,在一个21次的LOOP循环下,可以得到数据位44H的偏移地址DI,在将该偏移地址DI-首地址的偏移地址KEYS=偏移地址的相对值9。因为6913属于中音类,

14、基准频率值的倍数为2。因为属于中音类KEY“D”编码为9-7=2,在换码可以知道,“D”对应的基准频率值为165,故最后得到“D”的频率值为165*2=330Hz。因此,用此算法得到各个按键的频率值是可行的。不仅节省了存储空间,而且降低了存储数据的复杂程度,在程序编写上可以将这一段写成子程序,更加使得程序简洁明了。2.2 扬声器的驱动分析该程序主要是驱动电脑主板上的扬声器,根据音阶音调不同的频率值,来是扬声器发出不同的声音,从而产生想弹钢琴一样的感觉,当然音质是不能相提并论的。(在这里需要说明的是,现在大多数笔记本主板上已没有这个扬声器,但是台式机大多还是有的,在台式机上的效果更好点。)在电路

15、上如下图2-1所示:8255(PB1)图2-1 8253的电路连接图在PC/XT/AT家族中,计时器芯片的3个通道都用其专门的功能,通道2是用来控制计算机的扬声器的声音频率的。通道2用于产生频率信号,故工作方式在方式3,计数值为6A4H=1190,方波输出频率为1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通道2的控制字则为0B6H,1.19M约等于十六进制12348CH。由图1-1可知8253的通道2计数由8255A的PB0控制,当PB0输出为高电平的时候,是门GATE2为高电平。此时,8253的通道2允许计数,故通道2的输出方波受PB0控制,从而控制扬声器的音调高低。通道

16、2的输出能否对扬声器产生持续控制还取决于8255A的PB1。当PB1为“0”时,OUT2不能通过“与门”;反之则可通过“与门”控制扬声器。所以,扬声器发音时间的长短取决于8255A的PB1信号。另外,CPU通过8255A的C口,得知5283通道2的状态和扬声器驱动器的状态。由上可知,需要扬声器正常发声,需要8253和8255A的协同工作,而8253的控制字在网上查的为43H,则同过下面的程序来初始化8253MOV AL,0B6HOUT 43H,AL 而通道2的端口地址为42H,由于N值一般计算得出都大于255,故需要一个字的写入,而又因为 8253只有八位数据线,故字的写入需要两次,一般将N值

17、直接给AX然后通过下面的程序即可完成。OUT 42H,ALMOV AL,AH OUT 42H,AL而8255A能控制8253和扬声器,但是只要PB0和PB1同时为高调平,扬声器就为开,则对8255A的控制就是在对扬声器的控制,在网上得知8255A的B口地址为61H,则可以通过下面的程序实现扬声器的开与关。IN AL,61HOR AL,3 ;可以保证PB0和PB1同时为高调平OUT 61H,AL ;打开扬声器 MOV AL,AHAND AL,0FCH ;可以保证PB0和PB1同时为低调平OUT 61H,AL ;关闭扬声器2.3 发声时间因为只要通过8255A将扬声器打开而不关闭,那么只要8253

18、正常工作,扬声器就会一直发声,需要发声时间多长,只需要写一个延时子程序即可,利用LOOP和跳转指令就可以得到一个双循环程序,在根据指令时间依次乘以LOOP循环的次和跳转指令的跳转次数就可以得到想要的延时时间。子程序循环完毕在将扬声器关闭即可。延时子程序时间的长短就是发声时间的长短。3 程序设计3.1 主程序设计及其流程图开始数据初始化(输入KEYS,音符频率FREQ等)显示提示信息输入按键KEY显示请输入正确key 发声子程序SOUND判断输入:KEY是否为ESC?否 结束提示语KEYS首地址给BX 返回DOS循环次数CX=21 结束 计算KEY所对应频率值的子程序FIFRE 判断KEY和BX

19、 是否相等 ? 否 BX=BX+1 否 LOOP判断CX 是否为零 ? 是 图3-1 主程序的流程图如图3-1,主程序的主要任务:1) 如果输入的KEY为“ESC”时,直接跳转至退出EXIT处;2) 找出输入按键KEY的偏移地址,若不是正确按键,则显示提醒语句并重新输入KEY;3) 将得到的KEY偏移地址送入子程序FIFRE计算得出频率值,接着再将频率值给子程序SOUND并发出音调,完成之后,跳转至输入口INPUT。3.2 子程序设计及其流程图3.2.1 计算频率值的子程序FIFRE 开始 设置倍数标志DL=1 计算DI相对于KEYS的值并给DI小于等于 将DI与6 相比 大于 DI=DI-7

20、且DL=DL+1 将DI与6 小于等于 相比DI=DI-7且DL=DL+2 将DI给AX后进行换码,相乘DL得到AX值给BX 图3-2 子程序FIFER流程图 结束计算输入值所对应频率值的子程序FIFRE的主要任务:将偏移地址DI减去首地址的偏移地址KEYS得到该KEY的地址相对值,再把该相对值与6和13大小判断偏移地址的所属类别,小于等于6为低音类,基准值倍数DL=1,大于6小于等于13为中音类,基准值倍数DL=2,大于13为高音类,基准值倍数DL为4。最后的DL为基准频率值赋给AL,与基准值倍数DL相乘,得到频率值AX,再将AX最后赋给BX。最后子程序FIFER结束时,BX即为输入KEY的

21、音调频率值。3.2.2 发声子程序SOUND 开始向8253的43H写入控制字0B6H给DX、AX分别赋值12H、348CHDIV BX得到计数初值AX=N分两次向通道2端口42H写入计数初值N 打开扬声器延时子程序DELAY关闭扬声器结束图3-3 子程序SOUND流程图子程序FIFER流程图如图3-3所示,其主要任务是完成发声,在该子程序中,分两次向通道2端口42H写入计数初值N的程序语句为:OUT 42H,ALMOV AL,AH OUT 42H,AL打开和关闭扬声器的程序为:IN AL,61HOR AL,3 ;可以保证PB0和PB1同时为高调平OUT 61H,AL ;打开扬声器 MOV A

22、L,AHAND AL,0FCH ;可以保证PB0和PB1同时为低调平OUT 61H,AL ;关闭扬声器 开始入栈保护BX和CX3.2.3延时子程序DELAY BX=4000 CX=0FFFH 否 CX=0? 是 BX=BX-1 BX=0? 恢复BX和CX图3-4 延时子程序DELAY 结束4 结果分析4.1 程序调试与改进按上面的思路和流程图写好程序后,对程序进行调试:1) 一开始在输入显示这里,使用的是DOS的1号单字符输入,会产生“回显”,但对于键盘钢琴来说,这一点没有必要,于是改进后使用7号无“回显”的单字符输入。之前,一直想把音符也显示出来,按的什么显示相应的音符,成功实现之后,在进行

23、第一次答辩时,研究生学长认为此举没有很大的必要性,可以不显示相应的音符,经过思考之后也表示赞同,如图4-1和4-2是不同程序的界面显示,调试后看起来更简洁明了; 图4-1 改进之前的程序界面 图4-2 改进之后的程序界面 2)在第一次答辩时,由于对题目认识得不够深入,只对任务书中要求的音符进行了,编写,在答辩时,在学长的指导下,回来查资料后知道了音符与频率的一般规律,于是改进方案,将高、低音补齐,得到更多的音调选择;3)在算法上的改进,之前是算法是只根据数据区地址的关系进行推算所有频率值的地址,这样既浪费存储空间,又不能很好实现算法,没有可变性,在得知音符的2倍关系之后,再次思考得出上面的新算

24、法,新算法较之前的,不但减少了存储空间,算法也变得简单易懂。4.2 结果记录及分析调试之后,运行结果和课题的设计要求完全相符合。1) 开始运行程序,能看到如下图4-3所示的“Welcome to Piano of Keyboard”程序运行开始提示语,紧接着出现的是如图4-4所示的操作提示语,图4-3 程序运行开始提示语图4-4 程序操作提示语2)分别按键盘上的按键Q、W、E、R、T、Y、U 得到低音声的各音调, 分别按键盘上的按键A 、S、D、F、G、H、J 得到中音声的各音调;分别按键盘上的按键Z、X、C、V、B、N、M 得到高音声的各音调。 3)单击“ESC”可以退出程序,并显示退出提示

25、语,如图4-5所示;图4-5 程序退出时显示提示语心得与体会Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&(&*&*(xxxxxxxxxxxxxx参考文献1周佩玲,彭虎,傅忠谦.微机原理与接口技术(基于16位机).电子工业出版社,2005.2周佩玲,吴耿峰,万炳奎编.十六位微型计算机原理接口及其应用.中国科学技术大 学出版社,1995.3周明德.微型计算机系统原理及应用(第四版)习题集与

26、实验指导书.清华大学出版社,2002.4戴梅萼.微型计算机技术及应用(第三版).清华大学出版社,2003.5孙德文.微型计算机技术.高等教育出版社,2001. 6 王爽.汇编语言.清华大学出版社(第二版),2008附录 程序代码DATA SEGMENT KEYS DB QWERTYU,ASDFGHJ,ZXCVBNM FREQ DB 131,147,165,175,196,220,247 WELC DB Welcome to Piano of Keyboard,0DH,0AH,0DH,0AH, EXPL DB Explanation:, 0DH,0AH,Key:QWERTYU-Low Notes

27、 1 2 3 4 5 6 7,0DH,0AH,Key:ASDFGHJ-Middle Notes 1 2 3 4 5 6 7,0DH,0AH,Key:ZXCVBNM-High Notes 1 2 3 4 5 6 7,0DH,0AH, Please Note Your Caps Lock Truned On, 0DH,0AH ESCQ DB 0DH,0AH,Please play:,0DH,0AH,(You can Type ESC to exit),0DH,0AH,0DH,0AH,$ LAST DB 0DH,0AH,Welcome again!,$ REMI DB Reminder:Please

28、 play the Key:QWERTYU-ASDFGHJ-ZXCVBNM,0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化数据区 LEA DX,WELC MOV AH,9 INT 21H ;显示提示语句 INPUT: MOV AH,7 INT 21H ;不回显输入键盘的KEY CMP AL,1BH ;判断输入KEY是否为“ESC” JZ EXIT ;若输入KEY为“ESC”则跳转到退出EXIT LEA DI,KEYS MOV CX,21 FIND: CMP AL,DI

29、JZ SING ;找到KEY相对应的偏移地址DI则跳转至SING INC DI LOOP FIND ;根据输入KEY的ASCII码找到相对应的偏移地址 LEA DX,REMI MOV AH,9 INT 21H ;输入的KEY不正确,显示提醒请输入正确的KEY JMP INPUT ;不是正确的输入KEY,则跳转至INPUT SING: CALL FIFRE ;进入计算KEY所对应频率值的子程序 CALL SOUND ;进入根据频率值发出音调的子程序 JMP I NPUT ;发声完毕后跳转至INPUT EXIT: LEA DX,LAST MOV AH,9 INT 21H ;显示退出时的字幕 MOV

30、 AX,4C00H INT 21H ;返回DOS FIFRE PROC ;计算KEY所对应频率值的子程序 MOV DL,1 ;标记频率基准值的倍数值 LEA BX,KEYS SUB DI,BX ;计算偏移地址相对与首地址的值 CMP DI,6 JNA SOU ;属于低音直接跳转至SOU SUB DI,7 ;属于中音,将偏移地址减7 ADD DL,1 ;标记倍数值加倍为2 CMP DI,6 JNA SOU ;属于中音,跳转至SOU SUB DI,7 ;属于高音,将偏移地址再减7 ADD DL,2 ;标记倍数值再加倍为4 SOU: MOV AX,DI ;将被换码给AL LEA BX,FREQ XL

31、AT MUL DL ;频率基准值乘以倍数得到KEY所对应的频率值 MOV BX,AX RETFIFRE ENDP SOUND PROC ;根据频率值发出音调的子程序 MOV AL,0B6H OUT 43H,AL ;向8253的43H写入控制字 MOV DX,12H MOV AX,348CH DIV BX ;计算计数初值N OUT 42H,AL MOV AL,AH OUT 42H,AL ;向通道2端口42H写入计数初值N IN AL,61H OR AL,3 OUT 61H,AL ;打开扬声器 CALL DELAY ;进入延时子程序 IN AL,61H AND AL,0FCH OUT 61H,AL

32、 ;关闭扬声器 RETSOUND ENDP DELAY PROC ;延时时间子程序 PUSH BX PUSH CX MOV BX,4000 DY1: MOV CX,0FFFH DY0: LOOP DY0 DEC BX JNZ DY1 ;利用LOOP循环和跳转指令进行双循环 POP CX POP BX RET DELAY ENDP CODE ENDS END START 成绩评分表项目评分标准得分课程设计说明书撰写60分方案论证15分能正确分析设计内容,系统连接图设计正确或算法选择合理,并有详细的说明、论证。15X11能分析设计内容,硬件选型及连接或算法选择满足设计要求,有简单说明10X6设计方

33、案不太满足设计内容及要求,无说明5X0程序设计15分流程图设计正确、绘制规范,并有详细的说明;程序设计关键问题或段落有详细说明,程序代码正确15X11流程图设计符合设计内容及要求、绘制正确,并有一定说明;程序设计关键问题或段落有说明,程序代码基本正确10X6流程图设计不太满足设计要求,绘制不规范,无必要说明,程序代码不完整或不太满足设计要求5X0结果分析10分能正确记录调试结果,并能分析结果,给出合理的建议10X8能记录调试结果,并加以分析7X4记录调试结果,但无分析3X0心得体会10分基本上真实、客观地反映了本人课程设计的收获、心得10X6无感而发,空洞,套话。5X0报告规范10分完全按照报

34、告格式要求,内容充实、详细,完全符合规范10X8基本按报告格式要求,内容完整,基本符合规范7X4未按报告格式要求,不太符合规范3X0程序调试10分程序上机调试运行结果完全正确 10X8程序上机调试运行结果基本满足设计要求7X4程序上机调试运行结果不太满足设计要求3X0设计答辩10分能详细完整地表述设计内容,并能正确回答问题10X8能完整地表述设计内容,并能回答相关问题7X4基本表述设计内容,但不能回答相关问题3X0难度分值10分14题:7分 57题:8分8、9、1416题:9分 1013、1718题:10分纪律及考勤10分按照课程设计进度安排完成课程设计任务,按时参加选题说明、程序演示及答辩环节。缺席一次扣5分。总评分数优秀(10090)良好(8980)中等(7970)及格(6960)不及格(60以下)

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号