欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    电子音乐播放器课程设计.doc

    • 资源ID:850792       资源大小:858.74KB        全文页数:28页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    电子音乐播放器课程设计.doc

    1、 一.电子音乐播放器 一、 设计的任务和目的题目目的:学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。设计要求:利用8253作为音阶频率发生器,应先对一段音乐进行编码后存入音符表,并建立好音阶表(只建立一个8度即可,音阶表见附录),音符长度不能少于60个,连续播放3遍后停止。二 8253芯片介绍 1 芯片介绍8253可编程定时/计数器是Intel公司生产的通用外围芯

    2、片之一,有3个独立的十六位计数器,技术频率范围为02MHZ,它所有的技术方式和操作方式都通过编程控制。8253的功能用途是:(1) 延时中断 8253引脚图(2) 可编程频率发生器(3) 事件计数器(4) 二进倍频器(5) 实时时钟(6) 数字单稳(7) 复杂的电机控制器8253有六种工作方式:(1) 方式0:计数结束中断(2) 方式1:可编程频率发生器(3) 方式2:频率发生器(4) 方式3:方波频率发生器(5) 方式4:软件触发的选通信号(6) 方式5:硬件触发的选通信号8253引脚图如图所示,各引脚功能如下。D7D0八条双向数据线;WR(低电平有效)写输入信号;RD(低电平有效)读输入信

    3、号;CS(低电平有效)片选输入信号;A0、A1片内寄存器地址输入信号;CLK计数输入,用于输入定时基准脉冲或计数脉冲;OUT输出信号,以相应的电平指示计数的完成,或输出脉冲波形;GATE选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。2 控制字三程序框图通过给8253定时器装入不同的计数值,可以使其输出不同频率的波形。当与门打开后,经过放大器放大的作用,便可驱动扬声器发出不同频率的音调,要使该音调的声音持续一段时间,只要插入一段延时程序,之后再将扬声器(关闭与门)即可。流程图四、电路连接五、 程序设计SSEG SEGMENT PARA STACK stack dw

    4、100h dup(0) ;Resize the stack by changing the number 100SSEG ENDSDSEG SEGMENTINFO1 DB 0DH,0AH,-,0DH,0AH,THERE ARE 3 SONGS:,0DH,0AH,0DH,0AH,$INFO2 DB 1.HAPPY BIRTHDAY,0DH,0AH,$INFO3 DB 2.SHEEP,0DH,0AH,$INFO4 DB 3.RIVER,0DH,0AH,$INFO5 DB 0.EXIT,0DH,0AH,$INFO6 DB YOU HAVE CHOSEN :$INFO7 DB THANK YOU FO

    5、R YOUR USE,0DH,0AH,$INFO8 DB -,0DH,0AH,PRESS THE KEY TO SELECT SONG!,0DH,0AH,$INFO9 DB 0DH,0AH,-,0DH,0AH,|INVALID SELECTION|,0DH,0AH,-,0DH,0AH,$FREG1 DW 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349 ;曲1的频率DW 330,294,466,266,440,349,392,349,-1TIME1 DW 1,1,2,2,2,4,1,1,2,2,2,4,1,1,

    6、2,2,2,2,4,1,1,2,2,2,4 ;曲1的时间FREG2 DW 330,294,262,294,3 DUP(330) ;曲2的频率DW 3 DUP(294),330,392,392DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262, -1TIME2 DW 6 DUP(1),2 ;曲2的时间DW 2 DUP(1,1,2)DW 12 DUP(1),4FREG3 DW 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294 ;曲3的频率DW 262,2

    7、62,220,196,220,262,294,332,262, -1TIME3 DW 3 DUP(2),1,1,2,1,1,4 ;曲3的时间DW 2 DUP(2,2,1,1),4DW 3 DUP(2,1,1,1),4DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG INIT PROC ;初始化程序 mov ax, dsegmov ds, axmov es, ax INIT ENDP MAIN PROC ;程序入口 call INIT RE: MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALM

    8、OV DX,28AHIN AL,DXMOV DX,288HOUT DX,AL LEA DX,INFO1 ;输出说明信息MOV AH,09HINT 21HLEA DX,INFO2INT 21HLEA DX,INFO3INT 21HLEA DX,INFO4INT 21HLEA DX,INFO5INT 21HLEA DX,INFO8INT 21HMOV AH,01H ;读取按键INT 21HCMP AL,1 ;根据不同的按键播放不同的曲子JE MUSIC1CMP AL,2JE MUSIC2CMP AL,3JE MUSIC3CMP AL,0JE EXITLEA DX,INFO9 ;无效选择,输出错误提

    9、示MOV AH,09HINT 21HJMP RE MUSIC1:MOV SI,OFFSET FREG1 ;指向曲1的表MOV BP,OFFSET TIME1CALL PLAYJMP REMUSIC2:MOV SI,OFFSET FREG2 ;指向曲2的表MOV BP,OFFSET TIME2CALL PLAYJMP REMUSIC3:MOV SI,OFFSET FREG3 ;指向曲3的表MOV BP,OFFSET TIME3CALL PLAYJMP REEXIT:MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288

    10、HOUT DX,ALLEA DX,INFO7 ;输出欢迎使用信息,增加界面友好度MOV AH,09HINT 21Hmov ax, 4c00h ;The end of the program, return to the system int 21h MAIN ENDP PLAY PROC ;PLAY子程序,功能上面介绍过 L1:MOV BX,DS:SI ;取频率 CMP BX,-1 ;看是否有效 JE L0 ;无效就退出 MOV CX,DS:BP ;读取时间 MOV DL,CL ;保存时间 ADD DL,30H MOV AH,02H INT 21H MOV DX,0FH ;计算计数初值,1M的

    11、十六进制为0F4240H MOV AX,4240H DIV BX MOV BX,AX MOV DX,283H ;设置计数器工作方式 MOV AL,36H OUT DX,AL MOV DX,280H ;输入计数初值 MOV AX,BX OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,28BH ;开扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXNOT ALMOV DX,288HOUT DX,AL ROD:CALL DELAY ;延时 LOOP ROD MOV DX,28BH ;关扬声器MOV AL,89HOUT DX,ALMOV DX,

    12、28AHIN AL,DXMOV DX,288HOUT DX,AL CALL DELAY_OFF ;音节间延时 ADD SI,2 ADD BP,2 JMP L1 L0:RET PLAY ENDP DELAY PROC ;延时子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,09FHLL1:MOV CX,0FFFFH ;循环这么多次LOP: LOOP LOPDEC BXJNZ LL1POP DX POP CX POP BX POP AX RET DELAY ENDP DELAY_OFF PROC PUSH AX PUSH BX PUSH CX PUSH DX M

    13、OV BX,0FHLL2:MOV CX,0CFFFHLOP2: LOOP LOP2DEC BXJNZ LL2POP DX POP CX POP BX POP AX RETDELAY_OFF ENDPCSEG ENDSEND MAIN五、试验结果截屏:初始界面:如果按错了键,会出现如下界面:如果选择正确,将出现如下界面:六,设计总结1. 实验过程中碰到了很多的难题和障碍,我认识到平时基础知识的重要性,只有能够熟练的掌握才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重要保障!2. 通过这次课程设计,我们对各个芯片有了进一步的了解,对各个芯片的功能有了更深刻

    14、的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。在课程设计过程中,同组人员之间相互合作,共同研究使我更加坚信了团体的力量。在团体的共同协作和努力下,任何的难题都可以被解决!3. 我们大家在实验的时候都团结合作,遇到问题时候一起探讨,增强了我们的合作精神。二电子时钟设计一设计的任务和目的:1.通过设计,培养和提高解决工程具体问题,动脑动手的技术工作能力,还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。具体要求任务如下:1、中断工作原理,定时计数原理

    15、,并行通信原理工作原理。2、掌握8259芯片,8254芯片,8255芯片功能,结构。3、掌握8259芯片,8254芯片,8255芯片的编程。4、能运用所提到的芯片,设计系统并进行程序开发,满足用户需求。2.设计要求1、总体内容:设计一电子时钟,能在数码管上显示时间并计时。2、 接口设计:根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过.3、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。4、前期完成的实验有:8259A中断控制器实验,8254定时计数器实验,8255并行接口实验。二 概要设计2.1电路原理与主要芯片功能 2.1.1

    16、 电路原理首先利用程序硬性规定分、秒的起始时间为零。然后通过8254计时器分频,并将以分得的频率接通8259中断控制器,进而通过CPU响应可屏蔽中断达到按秒计时的效果。具体做法是将四个七段管显示器接到两片可并行接口8255芯片上,以此来控制七段管显示器的位操作以及段操作。并为之在数据段开辟一处空间,专门存放将要显示的数位代码。8254计时器将由PC机给定的频率加以分频,得到的新频率加到8259中断控制器的中断请求输入端。主程序为此可屏蔽中断设置专门的中断向量码。CPU获取此中断向量码后转向待需解决的程序进行操作。而这个程序便是整个主程序的心脏。通过它将使电子钟的显示时以秒为进位,达到秒、分的增

    17、加。2.2.1 8255主要功能8255 可编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间 的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。用+5V 单电源供电,能在以下三种方式下工作:方式0-基本输入/出方式、方式1-选通输入/出方式、方式2-双向选通工作方式。8255的内部结构及引脚如图2.1所示:图2.1 内部结构及引脚8255 工作方式控制字和C口按位置位/复位控制字格式如图2.2所示:图2.2 置位/复位控制字格式2.2.2 8

    18、259主要功能中断控制器8259是Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级 排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编 程来设定。同时,在不需增加其他电路的情况下,通过多片8259A 的级连,能构成多达64 级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应 和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。8259A 的内部结构和引脚如图2.3所示:图2.3 内部结构和引脚8259的命令

    19、共有7 个,一类是初始化命令字,另一类是操作命令。8259A 的编程就是根据 应用需要将初始化命令字ICW1-ICW4 和操作命令字OCW1- OCW3 分别写入初始化命令寄存器 组和操作命令寄存器组。OCW1-OCW3 各命令字格 式如图2.4所示,其中OCW1 用于设置中断屏蔽操作字,OCW2 用于设置优先级循环方式和 中断结束方式的操作命令字,OCW3 用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设 置对8259 内部寄存器的读出命令。图2.4 OCW1-OCW3 各命令字格2.2.3 8254主要功能8254 是Intel 公司生产的可编程间隔定时器。是8253 的改进型,比825

    20、3 具有更优良的性能。8254 具有以下基本功能: 有3 个独立的16 位计数器; 每个计数器可按二进制或十进制(BCD)计数; 每个计数器可编程工作于6 种不同工作方式;每个计数器允许的最高计数频率为10MHz; 8254 有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。 计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi fOUTi,其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。 图2.5 内部结构框图和引脚图上图是8254 的内部结构框图和引脚图,它是由与CPU 的接口、内部控制电路和三个计数器组成。8254 的工作

    21、方式如下述: (1) 方式0 :计数到0 结束输出正跃变信号方式。 (2) 方式1:硬件可重触发单稳方式。 (3) 方式2 :频率发生器方式。 (4) 方式3 :方波发生器。 (5) 方式4 :软件触发选通方式。 (6) 方式5 :硬件触发选通方式。8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设 置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。当读回控制字的D4 位为0 时,由该读回控制字D1D2 位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。状态字格式如图2.6所示:图2.6 8254状态字格式三 程序接线图及流程图3.1

    22、实验接线图 系统的连线图主要由五个部分构成。8259中断控制器、8255并口控制器、8254定时计数器、键盘及数码管显示单元、开关及LED显示单元构成。如下图所示:芯片8254 系统总线 芯片8255 LED数码管 D0 PB0D1 PB1D2 PB2D3 PB3D4 PB4D5 PB5D6 PB6D7 PB7WR RD PA0CS PA1A0 PA2A1 PA3XD0XD1XD2XD3XD4XD5XD6XD7IOW#IOR#IOY3 IOY0XA1XA2ClkMir7+5VABCDEFGHX1X2X3X4D0D1D2D3D4D5D6D7WRRDCSA0A1CLK0OUT0GATE0 图3.4

    23、 实验接线图3.2 主程序流程图主程序的流程图是对整个程序的逻辑的图象表示。首先是设置8254、8255、8259的各个端口地址。接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。在整个过程中都在检测是否有铵键响应。有则停止,没有则返回继续执行。 图3.3系统实现流程图四 电子钟设计源程序;*用两个74LS373进行数码管的动态显示;一个做段(要显示的笔画)选,一个做位选PORTS EQU 211H ;数码管显示地址(选管)PORTB EQU 210H ;数码管显示内容控制;*在8253的定时中断中,通过8255的8个PA口,3个PB口进行扫描PA EQU 220H ;825

    24、5 CS 选择信号端TC0 EQU 230H;8253 CS 选择信号端 ;*数据段DATA SEGMENT COUNT1 DB 12 ;扫描键盘中断口标志CM读数码管COUNT2 DB 13 ;延世13次中断标志KREP DB 0;防止连击标志, krep=0:无键按下KSHAKE DB 0 ;键盘防抖KFLAG DB 0 ;功能键标志位kflag=1,2,3-key(ABC)pressed,4-key(F)pressedSYMBL DB 0;显示标志位0-display bufer,1-display tempFIRST DB 0 ;修改标志位check 2 digit 0-hight,1

    25、-lowENTER DB 0 ;在缓冲区里有新的数字?有则为1TABL DW 57FH,5BFH,5DFH,5EFH,5FEH,5FDH,5FBH,5F7H DW 67FH,6BFH,6DFH,6EFH,6FEH,6FDH,6FBH,6F7H DW 37FH,3BFH,3DFH,3EFH,3FEH,3FDH,3FBH,3F7H ;键盘扫描码ASCI DB0123456789ABCDEFGMPRWXYS;键盘顺序码MASEG DBTHE KEY_PREESED IS ERROR!,13,10,$ ;按键出错提示字符串 NUMERR DB 13,10,THE ENTERED DIGIT IS ER

    26、ROR,INPUT AGAIN!,13,10,$ ;无效时间提示字符串LED8 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H DB 77H,7CH,39H,5EH,79H,71H,80H,76H,38H,05CH ;显示编码表POINT DW ?ORDER DW 0BUFER DB 11H,0EH,12H,12H,0H,13H;hh:mm:ss;HELLOo-at start s;LED初始显示状态TEMP DB6 DUP(0);时间缓存区SELECT DB 1,2,4,8,10H,20HOLDSEG DW 0;保持初始中断向量段地址OLDOFF DW0

    27、;保存偏移地址DATA ENDS;* *代码段*CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAIN: MOV AX,DATA MOVDS,AX MOV DX,PORTBMOVAL,00 OUT DX,AL ;熄灭所有数码管 MOV AH,35H ;保存原来的中断向量 MOV AL,11 INT 21H MOV OLDSEG,ES MOV OLDOFF,BX MOVAX,SEG KEYLED ;写入新的中断向量 MOV DS,AX LEA DX,KEYLED ;取偏移地址 MOV AL,11 ;IRQ3中断向量类型号 MOV AH,25H INT 21H

    28、 ;写入IRQ3中断向量 STI MOV AX,DATA ;CSH 数据段 MOV DS,AX MOV ES,AX ;CSH 堆栈段(in HDY movsb 要重新设定堆栈段) MOV DX,PA+3 ;8255 控制字 MOV AL,10010000B ;PA口 输入,PB 口输出 OUT DX,AL MOV POINT,OFFSET TEMP ;输入 HCQ IN AL,21H ;读8259中断寄存器 AND AL,0F7H ;1111 1011b OUT 21H,AL ;开IRQ3 MOV DX,TC0+3 ;8253定时寄存器初始化 MOV AL,01010110B ;xuan TD

    29、 1,xie yige di ZJ,gongzuo fangshi 3 OUT DX,AL MOV DX,TC0+1 ;TD1,wei ding shi qi fu chu zhi MOV AL,5 ;LS393 OUT 8M/8K,T1 OUT 200HZ OUT DX,AL ;tc1low8=10 STEP:MOV AH,1 ;按任意键退出 INT 16H JZ STEP MOV DX,OLDOFF ;恢复IRQ3中断向量 MOV AX,OLDSEG MOV DS,AX MOV AL,11 MOV AH,25H INT 21H ;重新写入原来的IRQ3的中断向量地址 MOV AH,4CH

    30、INT 21H;*中断子程序,进行键盘扫描及显示*KEYLED PROC FAR ;每72ms进入一次键盘扫描程序 PUSH AX ;寄存器A压栈 STI ;开中断 DEC COUNT1 ;-1 ,到72ms的话要扫描键盘 JZ SCANK ;到72ms的话进行键盘扫描 JMP DISP;否则进行显示SCANK:MOV COUNT1,12 ;72ms初始化数字,为下次扫描键盘准备 DEC COUNT2 ;72*13ms=1s?N 扫描 JNZ KSCAN ;去扫描键盘 MOV COUNT2,13 ;恢复count2,为下次读实时时间准备;*通过BIOS功能调用读系统时间,并处理后的ASCII数

    31、值放入BUFER缓冲区CX 16位 从高到低 没四位分别存放 时的 高低位 分的高低位 READT: MOV AH,2 ;读BIOS中系统的时间 INT 1AH ;(CH:CL)=时:分,(DH:DL)=秒:1/100秒 MOV AX,CX ;放到AX中, MOV DI,OFFSET BUFER ;DI指向时间缓冲区 MOV CL,4 每次都低四位的值 ROL AX,CL ;循环左移,使得小时高位现在为最低位 MOVBL,AL ;保存到BL中 AND BL,0FH ;处理,得到小时的高位 MOVDI,BL ;将小时的高位放入缓冲区中 INC DI ROL AX,CL ;小时的低位处理,放入缓冲

    32、 MOV BL,AL AND BL,0FH MOV DI,BL INC DI ROL AX,CL ;分钟的高位处理,放入缓冲区 MOV BL,AL AND BL,0FH MOV DI,BL INC DI ROL AX,CL ;分钟的低位处理,放入缓冲区 MOV BL,AL AND BL,0FH MOV DI,BL INC DI MOV AX,DX ;秒的高位处理,放入缓冲区 ROL AX,CL; DX 存放 秒的 数值 MOV BL,AL AND BL,0FH MOV DI,BL INC DI ROL AX,CL ;秒的低位处理,放入缓冲区 MOV BL,AL AND BL,0FH MOV D

    33、I,BL;* *键盘扫描KSCAN: MOV COUNT1,12 ;SMJP CX duan MOV DX,PA+1 ;利用线路翻转法扫描键盘 MOV AL,0 ;PB口输出低电平 OUTDX,AL MOV DX,PA ;读PA口 IN AL,DX CMP AL,0FFH ;AL=0FFH?是的话没有按键,否则有键按下 JNE PRE ;不相等,说明有键按下 MOV KREP,0 ;按键被释放,置KREP=0 JMP DISP ;无键按下,停止扫描,继续显示;*判断是否进行过防抖处理,如果KREP为0且有键按下,则下次中断扫描键盘要防抖动PRE: CMP KSHAKE,1 JE SCAN;已经进行过防抖处理? MOV KSHAKE,1 JMP DISP;没有进行过防抖处理,则设立防抖处理标志,并跳出进行显示;*判断是否是重复按键,防止误操作SCAN: CMP KREP,1;是否有键按下? JNE SCAN1; 有键按下转移到SCAN1 JMP DISP;没有,上次按键已被释放SCAN1: MOV KRE


    注意事项

    本文(电子音乐播放器课程设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922