




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子琴的微机原理设计方案第一章 方案论证1.1 设计规模和总体框架1.1.1系统的基本功能 弹奏:用键盘输入对应的七个音阶,用户每按一个键盘琴键就弹奏相应的音符,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能: 演奏:电子琴设有8个按键,其中7个作为音符输入,另外一个作为模式转换按键,实现用户存放的自动播放歌曲。按下键盘上某一个指定的建后自动弹奏预存琴谱功能;要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。前面的发音停止,转到后按的键的发音程序。发出后按的键的音调。1.1.2系统的主要功能模块 控制模块:选择AT89S52单片机来控制整个系统,其中P2口作为输入口,P1口为信号输出口,P1.0连接音响驱动电路。 用户编程模块:由键盘矩阵、LED显示管、扬声器这几个部分组成 存储器模块:8088有1MB存储空间,系统提供用户使用的空间为 00000H-0FFFFH, 用于存放、调试实验程序。 键盘输入模块:用来操作者对机器的控制操作,在P2口连接有8个按键开关加8个拉电阻,它们一端接5伏电源,一端接地。只要有一个按键被按下,并被单片机扫描到,则会播放发出音符。(LED显示管显示当前按键,扬声器发出对应音符。) 输出驱动模块:利用AT89S52单片机的P0端口的P0.0P0.7连接到一个七段数码管的ah的笔段上,数码管的公共端接电源;声音的播放模块,它接到P1.0口上,当有按键按下时,它通过AT89S52中心控制芯片的识别后发出相应的音符。1.1.3系统的组成框图 根据系统的功能要求,我们可以得到系统的组成框图:单片机矩阵键盘LED显示管扬声器功能选择 图1系统框图1.2操作流程1.2.1如何使用系统安装及配置说明系统运行环境 WINDOWS XP PROTEUS 7.1 SP2 Keil uv3 2.12系统安装及配置 安装Protues 和keil uVsision3。系统操作说明 (1)Keil下编译,产生目标HEX档,Proteus下Programme Files选择产生的HEX档,点击运行开始模拟。 (2)开启本系统,数码管显示“-”。 (3)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。1.2.2使用流程主程序 通电进入运行状态选择“编程/运行”按“启动/停止”键进入“编程”状态转换“编程/运行”启动运行按“确定”按1键按“暂停/恢复”键按“启动/停止”键相应的显示1进入下一步暂停运行停止运行发出do的音按“暂停/恢复”键按2键相应的显示2恢复运行发出le的音 图2 使用流程第二章 硬件系统的设计2.1控制模块的选择:本次设计中中心控制模块是选择AT89S52单片机来控制整个系统。2.2用户编程模块:本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。硬件总体设计图如下: 图32.3存储器模块:8088有1MB存储空间,系统提供用户使用的空间为00000H-0FFFFH, 用于存放、调试实验程序。具体分配如下:2.3.1 存贮器地址分配 表2-1 存贮器地址分配2.3.2 I/O地址分配 表2-2 I/O地址分配(一) 表2-3 I/O地址分配(二)监控占用00004H-0000FH作为单步(T)、断点(INT3)、无条件暂停(NMI)中断矢量区, 用户也可以更改这些矢量, 指向用户的处理, 但失去了相应的单步、断点、暂停等监控功能。F0000HFFFFFH监控程序区系统占用。2.4键盘输入模块: 在P.2口十连有8个按键并加有8个拉电阻.它们一端接5伏电源,一端接地.在仿真时,只要有一个键被按下,并被单片机扫描到,则会使播放器发出声音. 图 42.5输出驱动模块:2.5.1子系统(模块)一 LED显示模块如图2-2所示,利用AT89S51单片机的P0端口的P0.0P0.7连接到一个七段数码管的ah的笔段上,数码管的公共端接电源。矩阵扫描显示当前按键模块如下: 图 52.5.2子系统(模块)二矩阵扫描扬声器发出对应音符模块如下: 图 6第三章 应用软件的设计 应用系统中任务的实现,最终是靠程序的执行来完成的。应用软件设计的好坏,将决定系统的效率和它的优劣。 应用软件的设计依据是使用流程。根据使用流程可以确定系统的控制流程和软件模块。根据顺序控制器的操作流程可以确定,本系统软件主要由4个模块构成:主程序,编程控制模块,运行控制模块和定时器中断服务模块。3.1主程序 主程序的任务首先是进行初始化,然后根据“编程/运行”开关的状态判别,进入“编程状态”或“运行状态”。 根据主程序的操作流程,可以确定主程序的控制流程如图主程序流程图 开始 初始化是否自动播放是否手动弹奏NNY调用发音和延时程序Y 结束 图 7主要程序:MAIN: MOV SP,#60H ;初始化堆栈指针 MOV 30H,#00 ;定时器初值清零 MOV 31H,#00 MOV P1,#0FFH ;设置P1口为输入模式 MOV TOMD,#01H ;设置定时器0为工作模式1 SETB ET0 ;开定时器0中断 SETB EA ;开总中断 CLR TR0 ;关闭定时器03.2编程控制模块 根据编程状态的操作流程,可以确定编程操作的控制流程如图调显示子程序是数字键17?用键值查表得到音频相关数据按音频数据设置计数器初值启动定时器,开始发声延时关闭定时,停止发声是否开始 图8 电子琴程序流程图 OUTBIT equ 0FE02h IN equ 0FE00h Pulse equ 0 PulseCNT equ 50h ToneHigh equ 51h ToneLow equ 52h Speaker equ P1.0 0000 02008E ljmp Start org 000bh Timer0Int:000B C0D0 push PSW000D C28C clr TR0000F 85518C mov TH0, ToneHigh0012 85528A mov TL0, ToneLow0015 D28C setb TR00017 A200 mov c, Pulse0019 9290 mov Speaker, c001B B200 cpl Pulse001D 1550 dec PulseCNT001F D0D0 pop PSW0021 32 reti ToneTable:0022 FC42 0024 FCAE 0026 FD0A 0028 FD35 002A FD82 002C FDC8 002E FE05 dw 64578, 64686, 64778, 64821, 64898, 64968, 65029 TestKey:0030 90FE02 mov dptr, #OUTBIT0033 7400 mov a, #00035 F0 movx dptr, a0036 90FE00 mov dptr, #IN0039 E0 movx a, dptr003A F4 cpl a003B 540F anl a, #0fh 003D 22 ret KeyTable:003E 161514 0041 FF db 16h, 15h, 14h, 0ffh0042 131211 0045 10 db 13h, 12h, 11h, 10h0046 0D0C0B 0049 0A db 0dh, 0ch, 0bh, 0ah004A 0E0306 004D 09 db 0eh, 03h, 06h, 09h004E 0F0205 0051 08 db 0fh, 02h, 05h, 08h0052 000104 0055 07 db 00h, 01h, 04h, 07h GetKey:0056 90FE02 mov dptr, #OUTBIT0059 8583A0 mov P2, dph005C 7800 mov r0, #Low(IN)005E 7920 mov r1, #00100000b0060 7A06 mov r2, #6 KLoop:0062 E9 mov a, r10063 F4 cpl a0064 F0 movx dptr, a0065 F4 cpl a0066 03 rr a0067 F9 mov r1, a 0068 E2 movx a, r00069 F4 cpl a006A 540F anl a, #0fh006C 7006 jnz Goon1 006E DAF2 djnz r2, KLoop 0070 7AFF mov r2, #0ffh0072 800F sjmp Exit Goon1:0074 F9 mov r1, a 0075 EA mov a, r20076 14 dec a0077 23 rl a0078 23 rl a0079 FA mov r2, a ; r2 = (r2-1)*4 007A E9 mov a, r1007B 7904 mov r1, #4 LoopC:007D 13 rrc a007E 4003 jc Exit0080 0A inc r20081 D9FA djnz r1, LoopC Exit:0083 90FE02 mov dptr, #OUTBIT0086 E4 clr a0087 F0 movx dptr, a 0088 EA mov a, r20089 90003E mov dptr, #KeyTable008C 93 movc a, a+dptr008D 22 ret Start:008E 758170 mov sp, #70h0091 758901 mov TMOD, #01 ; Timer0094 75A882 mov IE, #82h ; EA=1, IT0 = 1 MLoop:0097 1130 call TestKey0099 60FC jz MLoop 009B 1156 call GetKey009D F5F0 mov b, a009F 60F6 jz MLoop ; = 0, 7 00A5 15F0 dec b00A7 E5F0 mov a, b00A9 23 rl a ; a = a*2 00AA F5F0 mov b, a00AC 900022 mov dptr, #ToneTable00AF 93 movc a, a+dptr00B0 F551 mov ToneHigh, a00B2 F58C mov TH0, a 00B4 E5F0 mov a, b00B6 04 inc a00B7 93 movc a, a+dptr00B8 F552 mov ToneLow, a00BA F58A mov TL0, a 00BC D28C setb TR000BE 755064 mov PulseCNT, #100 Wait:00C1 E550 mov a,PulseCNT00C3 70FC jnz Wait00C5 C28C clr TR000C7 020097 ljmp MLoop end3.3运行控制模块 根据运行状态的操作流程,可以确定运行操作的控制流程如图开始键盘读入一个字符Y是ESC键吗?NN是数字18键吗?返回DOSY点亮点阵Y点亮LED灯N是机内吗?60个正弦波完了吗?YN求出音阶值保存正弦波个数计数器赋值60每个正弦波数据个数计数器赋初值取正弦波数据送DAC0832求出音阶值保存Y赋相应频率值一个正弦波完了吗?N延时延时 图 9程序:data segmentioportequ 0c800h-0280hio8253aequ ioport+280h;8253通道0地址io8253bequ ioport+283h;8253控制字寄存器地址io8255aequ ioport+288h ;8255A口地址io8255bequ ioport+289h ;8255B口地址io8255dequ ioport+28bh;8255控制字寄存器地址io0832aequ ioport+290hproth equ ioport+2a8h ;点阵行选的地址protlr equ ioport+2b0h ;点阵列选的地址data1 db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据time db 120,106,94,89,79,70,63,59;发不同音时8253的计数器初值banquan db 0dh,0ahdb*,0dh,0ahdb* *,0dh,0ahdb* WELCOME TO USE dianziqin *,0dh,0ahdb* THIS PROGRAMME IS DESIGHED BY *,0DH,0AHdb* zhouqiuping 61007204 *,0DH,0AHdb* *,0dh,0ahdb*,0dh,0ah db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$num db ? ;num为8253计数器初值的序号freq dw 262,294,330,349,392,440,494,523 ;扬声器发声各频率值tim dw 400data endsstack segment stack dw 256 dup(?)stack endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset banquan ; 版权显示 mov ah,9 int 21h ;显示提示信息sss: mov ah,7 int 21h ;等待从键盘接收字符,不回显al=asc码 cmp al,1bh je exit ;若为ESC键,则转EXIT推出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之间转sss sub al,31h mov num,al ;num求出相应的时间常数的序号dianzhen: mov al,0ffh ;点阵板的列全部选通 mov dx,proth out dx,al mov al,00000001 :点阵的行赋初值 shl al,num ;根据输入的数字,左移相应位数,即点阵亮相应行 mov num,al ;如输入3,则num为2,左移两位,第三行亮 mov dx,prothl out dx,alled: mov dx,io8255d mov al,99h ;设置8255A口入B口出 mov dx,io8255b out dx,num ;根据移位后的num点亮相应led灯kaiguan: mov dx,io8255a ;判断机内机外 in al,dx ;从8255B口读一字节 test al,10b ;判断PA0口是否为10(二进制) jz jiwai ;是的话转实验仪 jmp nei ;否则转机内;-jiwaijiwai:mov cx,60 ;取60次32个正弦波数据ddd:mov si,0lll:mov al,data1si ;取正弦波数据mov dx,io0832aout dx,al ;放音call delay ;调延时子程序inc sicmp si,32 ;是否取完32个数据jl lll ;若没有,则继续loop ddd ;总循环次数60是否完,没有,则继续jmp sssexit: mov ah,4chint 21hdelay proc near ;延时子程序ccc: mov bx,offset timemov dx,io8253b ;置8253通道0为方式0工作mov al,10hout dx,almov al,num ;取相应的时间常数xlatmov dx,io8253aout dx,al ;向8253通道0输出kkk:mov dx,io8255ain al,dx ;从8255A口读一字节test al,01 ;判PA0口是否为1jz kkk ;若不为1,则转KKKret ;子程序返回delay endp;-机内部分jinei: mov al,num add al,al mov ah,00h mov si,axagain: mov di,freqsi mov bx,tim call gen jmp sss gen proc near mov al,0b6h ;设置8253通道2方式3二进制计数 out 43h,al mov dx,12h mov ax,12928 ; DX AX=896*533h=18*65536+12928=1.19M div di out 42h,al ;8253通道2口设置初值 mov al,ah out 42h,al in al,61h ;读8255PB口 mov ah,al or al,3 out 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延时子程序delay2: nop nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp code endsend start3.4定时器中断服务模块定时器子程序图如图2.7所示。 定时中断 保护现场 停止计时 输出音频脉冲电平(高或低)音频脉冲电平反转脉冲个数减1恢复现场中断返回 图 103.5硬件调试与软件调试3.5.1 硬件调试1)断电调试:为了安全,首先进行断电调试,用万用表检测系统是否有短路现象,再检查严接线是否正确。经检测,接线正确也没有短路现象。 2)通电调试:第一,检查系统是否正常。第二,检查数码显示是否乱码。在通电调试过程中,经检查系统正常;数码管显示乱码,查明原因为8255A芯片B输出端口与数码管输入端口接线时接反了,经改正后检查没有出现新的问题。3.5.2软件调试输入程序并检查无误,经汇编、连接后加载装入系统运行,观察现象。发现倒计时器只能运行一次而不能循环(即程序倒计时到0后无法继续循环倒计时),经检查发现程序结束前掉了一条跳转指令。经修改后,再进行编译并加载,运行程序,结果显示正常并实现了循环功能,经调试三个开关发现开关实现功能正常。3.5.3 调试过程 让8255的口工作在方式一输入状态下,B口接在试验箱上的八个拨码开关上,把拨码开关的电平信号传送到8255的输出口,CPU取走的8255输出口的信号送到8253,8253工作在工作方式3,方波放生气。这样通过送不同的数据时8253发出不同频率的方波信号,不同频率的方波信号就会驱动发生器发出不同频率的声响。3.6测试方案和测试结果 测试方案 测试结果启动程序,出现按键提示,按下18键机内/实验仪发出相应的音阶同时led和点阵板亮相应的灯和行改变开关状态(可随时任意改变),按18键对应发出相应的音阶“弹琴”发出优美旋律按下ESC键退出程序 表 3-1 小结 通过这次课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。原本微型计算机接口技术就是计算机科学与技术专业的一门核心课程,是突出计算机应用的一门课程。 根据自己所学的知识,来完成本次微型计算机课程设计的内容。本次课程设计主要是设计一个电子琴,要求用键盘输入1、2、3、4、5、6、7按键,产生不同频率的声音,来模拟电子琴发出音阶乐谱。要发出声音,要用芯片实现,首先想到的是课堂上学过的8253定时/计数器它可以发出一定频率的声音。有七音阶个频率,就对应有七个计数初值,通过调用不同的程序,来完成每一次按键所对应频率的计数初值,进而实现不同的声音。要产生频率,就用到脉冲发生器、分频器;产生音质好、播放出来声音,就用到音频功效模块。各个模块进行相应的连接,来实现电子琴的功能。 这次微机实验课程设计,使我对微机软硬件结合有了进一步的了解。原来并不太清楚是什么意思,一直都很模糊,听课本也是很迷茫;而之前的那些单元实验,也没有都做好。之前做的实验,由于大部分是验证性的,所以就很被动地去做,甚至并没有想为什么要那样连电路,内部的代码更没有认真看。这次课程设计,因为要自己去设计整个过程,所以就不得不去了解学习自己原来并没有真正弄懂的东西。比如一些程序的代码的意思,汇编语言的逻辑,比如一些芯片的用途。使我对前面所做的实验有了原理性的了解,回头看一些实验,也知其然其所以然了。同时对课本上讲的一些内容,不再像以前那样觉得抽象,通过这次设计,有了具体的理解。 经过我长时间的设计及调试,本系统基本能实现按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放对应的音符。但由于仿真系统原因,本设计音频效果不是很好。不足之处有:1.可弹奏的音符数较少,只能在一定范围内满足用户需要。可通过改进键盘识别模块和发生模块来增加其复杂度2.音量不可调。 在这为期一周的课程设计中,我深刻明白了理论知识与社会实践相结合的道理,从中得到了以前书本知识所不曾得到的知识,更加明白了如今信息时代电子技能知识的重要性。同时我对自己的动手能力有了信心,这次的课程设计我感觉很完美,我会利用这次机会再努力的提高自己。 编写程序的过程中,我遇到了很多的问题。在此我特别要感谢帮助我的老师们,特别是老师,没有他们,我就不能完成这个课程设计,是他们不厌其烦地帮我讲解。 经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试过,就肯定学到了不少东西。这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。 经过短短一周的课程设计,我认识到,课程设计能真正让人学到实际应用的东西的一门课程。收获比上几星期课还多。虽然这是我大学期间第一次以这种方式做设计,可以说是困难重重,但是这是一种全新的实验方法一种新的经历,使我对课程设计有了新的认识,同时增强了我对本课程各种标准的认识,强化了我独立处事的能力使我受益良多。 参考文献1 杨素行微型计算机系统原理及应用,北京,清华大学出版社,2004年2 刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现J.微计算机信息,20073 李广弟。单片机基础M。北京:北京航天航空大学出版社,20014 杨振江。智能仪器与数据采集系统的新器件及应用M。西安:西安电子科技大学出版社,20015 彭介华.电子技术课程设计指导J.北京:高等教育出版社,1997.6 张毅刚,彭喜元。单片机原理与应用M(十)北京:高等教育出版社,2007.107 李建忠单片机原理及应用西安:西安电子科技大学,2002年8谢永宁.微型计算机及接口技术试验指导书.安徽:安徽工程大学,2012附录主要代码程序: CODE SEGMENT ASSUME CS:CODE,DS:CODECONTROL EQU 43HCOUNT0 EQU 40HCOUNT1 EQU 41HCOUNT2 EQU 42HIOCONPT EQU 0FF2BHIOBPT EQU 0FF29HIOAPT EQU 0FF28HPA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口ORG 18F0HSTART2: JMP START1BUF DB ?,?,?,?,?,?KZ DB ?LTIME DB ?LKEY DB ?ZP DW ?DATA0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 80H,90H,88H,83H,0C6H,0A1HDB 86H,8EH,0FFH,0CH,89H,0DEH,0C7H,8CH,0F3H,0BFH,8FH,0F1HDATA2: DW 4545, 4050, 3607, 3405 DW 3034, 2703, 2408, 2273START1: MOV AX,CSMOV DS,AXCALL BUF1MOV AL,88HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTMOV AL,00OUT DX,ALMOV ZP,OFFSET BUFREDIKEY:CALL DISPKEYCMP KZ,09HJNC REDIKEYCMP KZ,01HJC REDIKEYMOV BX,ZPMOV AL,KZMOV BX,ALCMP BX,OFFSET BUF+5JZ ZP1INC BXMOV ZP,BXJMP OUTTONEZP1: MOV ZP,OFFSET BUFOUTTONE:MOV DX,IOBPTMOV AL,0FFHOUT DX,ALMOV AL,KZMOV AH,00HDEC AXSHL AX,1MOV BX,OFFSET DATA2ADD BX,AXMOV AX,BXCALL T8253MOV CX,20HCON1: PUSH CXCALL DISPPOP CXLOOP CON1MOV DX,IOBPTMOV AL,00OUT DX,ALJMP REDIKEYT8253: PUSH AXMOV AL, 36H ; 计数器0, 16位二进制,方式3。MOV DX, CONTROLOUT DX, ALPOP AXMOV DX, COUNT1OUT DX, ALMOV AL, AHOUT DX, ALRETDISPKEY:CALL DISPCALL KEYMOV AH,AL ;NEWKEYMOV BL,LTIME ;LTIMEMOV BH,LKEY ;LKEYMOV AL,01HMOV DX,PA ;0FF21HOUT DX,ALCMP AH,BHMOV BH,AH ;BH=NEW KE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老旧厂区项目实施进度与质量控制方案
- 海康监控考试试题及答案
- 技术转让合同认定条件与合同范本
- 学生通知书评语大全
- 加工型种薯购销合同
- 新能源汽车齿轴零件生产线项目环境影响报告书
- 双方协议离婚后独生子女抚养权及监护责任转移合同
- 离婚协议书:知识产权分割及商业秘密保护
- 商品混凝土供应与施工衔接技术方案
- 离婚补充协议孩子抚养费支付与子女医疗费用保障合同
- 广东省广州市越秀区2024-2025学年三年级上学期第一次月考语文试卷
- 预包装食品标签审核表
- 技能等级考试附有答案
- DL-T-710-2018水轮机运行规程
- (高清版)JTGT 3331-08-2022 盐渍土地区公路路基设计与施工技术细则
- 第5课《用发展的观点看问题》第1框《世界是永恒发展的》-【中职专用】《哲学与人生》同步课堂课件
- 垃圾渗滤液处理调试方案
- 加利福尼亚批判性思维技能测试后测试卷班附有答案
- (2024年)发生输液反应时应急预案及处理流程
- 水域救援知识课件
- GB 31604.60-2024食品安全国家标准食品接触材料及制品溶剂残留量的测定
评论
0/150
提交评论