找回密码
 注册
关于网站域名变更的通知
查看: 879|回复: 4
打印 上一主题 下一主题

音乐频谱(stc12系列)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-15 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
音乐频谱(stc12系列)
% ]$ Q& I( A& ]; Z4 E5 M9 x, s* v3 [( F/ u* k( ]8 k! r  A0 L8 W

* C" [2 T* Z" E1 _+ K原理图是用proteus画的,所以没有Vcc和Gnd标识
6 s3 K8 L' e' d; e信号输入端的电阻、电容是抗干扰用的,大小请根据电路的实际情况做改动
, K+ ]: W0 I8 i  f/ s" |
( M9 X2 V! ?3 J- K程序如下:

: Q2 h) d3 H' Z/ s
3 b8 g" q; o/ G, f" J6 B+ ?

+ {( j4 V, b# ]" L" F. D#include<stc12c5a.h>2 G2 B$ n- P( `' D* A
#include<intrins.h>
& q2 H9 D9 R: A//#include"basic.h"
4 R, ^3 a: J! Z9 vtypedef unsigned char uint8;* ]- O: R) p; t7 n! n+ V. D
typedef unsigned int uint16;( C2 f1 S7 t, u9 J- t/ W7 n" }7 v
#define ADC_FLAG    (1<<4)    /*ADC_中断标志*/
- D. [! p+ q( \5 I+ e* C/*放大128倍后的sin整数表(128)*/        
: F/ T1 b- b- o1 dcode char SIN_TAB[128]={0,6,12,18,24,30,36,42,48,54,59,65,70,75,80,85,89,94,98,102, % @1 Y8 v" C3 x1 k' `
                        105,108,112,114,117,119,121,123,124,125,126,126,126,126,126,
2 V  \! l0 i8 C                                                125,124,123,121,119,117,114,112,108,105,102,98,94,89,85,80,75,
1 P- T) R$ m% P- x5 E( B                                                70,65,59,54,48,42,36,30,24,18,12,6,0,-6,-12,-18,-24,-30,-36,-42,0 [+ z  V- q. O, |1 m1 d
                                                -48,-54,-59,-65,-70,-75,-80,-85,-89,-94,-98,-102,-105,-108,-112,& q! w% k5 u' [. V
                                                -114,-117,-119,-121,-123,-124,-125,-126,-126,-126,-126,-126,-125,
- C! Z$ p- D  I3 J+ A                                                -124,-123,-121,-119,-117,-114,-112,-108,-105,-102,-98,-94,-89,-85,7 j) ]4 `1 ^. ?" n, u0 d
                                                -80,-75,-70,-65,-59,-54,-48,-42,-36,-30,-24,-18,-12,-66 J! |. V% Y9 B7 N
                                           };
6 q- }( f! M' w
3 u& X* i+ q# f$ |' E! h9 H. G1 x
) O7 Z8 E) [  Q+ g- \  A2 t
/*放大128倍后的cos整数表(128)*/! N0 |/ i$ }! g5 @' u! }+ i
code char COS_TAB[128]={127,126,126,125,124,123,121,119,117,114,112,108,105,102,98,94, 6 N+ |+ N% c5 a7 @) f
                        89,85,80,75,70,65,59,54,48,42,36,30,24,18,12,6,0,-6,-12,-18,-24,
1 b9 w: S9 d+ D7 {" F: B                                                -30,-36,-42,-48,-54,-59,-65,-70,-75,-80,-85,-89,-94,-98,-102,: w1 o" O4 D  G# e# ^* z3 z8 Q7 A
                                                -105,-108,-112,-114,-117,-119,-121,-123,-124,-125,-126,-126,-126,  [0 ]" O) \0 M( j1 W
                                                -126,-126,-125,-124,-123,-121,-119,-117,-114,-112,-108,-105,-102,( m  k* K# m- M, ^
                                                -98,-94,-89,-85,-80,-75,-70,-65,-59,-54,-48,-42,-36,-30,-24,-18,. M5 E) d/ a4 q: b
                                                -12,-6,0,6,12,18,24,30,36,42,48,54,59,65,70,75,80,85,89,94,98,102,
$ m6 n  J8 Q- L/ |! @                                                105,108,112,114,117,119,121,123,124,125,126,126
% h( c! I* w, A" w  ~% [" c                                           };" Z# c0 {6 J6 A8 K& }! m
! B8 o4 K9 R6 y
4 Q1 y; F0 h1 U- h9 I
/*采样存储序列表*/
3 R) k' {& b# b' P, ^code char LIST_TAB[128] = {0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,# O& M8 n" J/ o) ]
                           12,76,44,108,28,92,60,124,2,66,34,98,18,82,50,114,10,74,42,106,26,90,58,
) f4 k3 u4 H, {; V6 e% \  f                                                   122,6,70,38,102,22,86,54,118,14,78,46,110,30,94,62,126,1,65,33,97,17,81,49,
/ n* Z2 H* K3 z& Z" t                                                   113,9,73,41,105,25,89,57,121,5,69,37,101,21,85,53,117,13,77,45,109,29,93,61,* {4 z- b, Z4 y& [! P' ?, q! R
                                                   125,3,67,35,99,19,83,51,115,11,75,43,107,27,91,59,123,7,71,39,103,23,87,55,( |! \7 C* \3 n5 k) r( r5 o
                                                   119,15,79,47,111,31,95,63,127
: j; p, O. b+ q$ a! g& J                                                  };' B5 i5 {3 K4 z, r* B$ w- \* G/ R1 W

/ x. l! C5 n" w0 T9 M" ~5 Q

* R0 ^) z: o" B. E' l! @6 ~$ M/*分级量化表*/7 E9 ?: }& R1 T% C7 W" a4 Z
uint8 QTY_TAB[] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
; H( I7 V1 Q: f8 X4 m/ b/ A4 wuint8 ADC_Count=0;2 _1 e! J7 C+ m4 A8 [6 G
uint8 i,j,k,b,p,anum;        
5 k; ~# k1 c. y3 Puint16 xdata Fft_Real[128]; ) A' K" q4 Y8 A
uint16 xdata Fft_Image[128];               // fft的虚部 % E' L, j( B  q
uint8 xdata LED_TAB[16];                                //记录红色柱状
2 u  t+ J* _! x( ]' k
8 H  N1 f" J1 t8 u8 }: N
# B2 j7 g4 u) f- S
/********************************************************************
3 @0 j, u" w1 w  v0 P. G* 名称 : FFT7 D0 w* c: {$ I) B) ?4 W
* 功能 : 碟型运算转换
" ^0 {  k& w: Q! Y0 u' x0 Q* 输入 : 无
. f! F$ t. N# W* 输出 : 读出的值: \/ g$ b/ J4 F  Y
***********************************************************************/; X( ~5 u6 @9 a
void FFT()//基2fft9 a/ B7 F7 M# e5 E+ k  V
{                 
2 h$ Q5 }, K# @  w7 g; _7 |        uint16 Temp_Real,Temp_Imag,temp;                // 中间临时变量
, u9 J3 Z, Z! \' _; j        uint16 TEMP1 = 0,max=0;! E+ ^8 i9 t5 a+ ^# h: j' s. A9 z
        for( i=1; i<=7; i++)                            /* for(1) */( G+ Q6 q  g7 m# ~
        { & K$ E7 J4 D- e  f/ f
                b=1;: D; Q! P9 O6 X: _) d9 |- [- h$ o
                b <<=(i-1);                                 //碟式运算,用于计算隔多少行计算例如 第一极 1和2行计算
) w6 q# L& f+ {& X4 d; r) Y                for( j=0; j<=b-1; j++)                      /* for (2) */
$ v8 V9 H) K0 q9 _1 q5 ], `                {
9 x7 Q( s8 K" q$ c                        p=1;0 j$ L2 H$ U' ^- y' U- N
                        p <<= (7-i);            0 a6 C" f3 `  ]  p1 F* {) ?) o
                        p = p*j;. }' |; Q1 e) H/ Z! {; A; q0 k/ a7 _
                        for( k=j; k<128; k=k+2*b)               /* for (3)  */& k  w1 ~- t. t5 d9 v
                        { " n& I( u4 D/ h8 Y
                                Temp_Real=Fft_Real[k];
) \1 f3 ~( x, f: N* B- h                                Temp_Imag=Fft_Image[k];6 f, I6 S. Q( X" n
                                temp=Fft_Real[k+b];% H2 \. |. E* \, j' N
                                Fft_Real[k]=Fft_Real[k]+((Fft_Real[k+b]*COS_TAB[p])>>7)+((Fft_Image[k+b]*SIN_TAB[p])>>7);6 m0 v5 k" @! B1 t: M
                                Fft_Image[k]=Fft_Image[k]-((Fft_Real[k+b]*SIN_TAB[p])>>7)+((Fft_Image[k+b]*COS_TAB[p])>>7);& j! V& u8 A8 A( l$ s5 T
                                Fft_Real[k+b]=Temp_Real-((Fft_Real[k+b]*COS_TAB[p])>>7)-((Fft_Image[k+b]*SIN_TAB[p])>>7);
  B- R$ [1 k. u& i) T                                Fft_Image[k+b]=Temp_Imag+((temp*SIN_TAB[p])>>7)-((Fft_Image[k+b]*COS_TAB[p])>>7);          // 移位.防止溢出. 结果已经是本值的 1/64               ! X6 P# D7 W9 F0 W
                                Fft_Real[k] >>= 1;            
" O2 j9 ?4 s8 |, r7 \2 t: A                                Fft_Image[k] >>= 1;   Z  ~8 l4 S* E( m, `8 f
                                Fft_Real[k+b] >>= 1;                 
5 [5 j- k8 j5 W! @$ {                                Fft_Image[k+b] >>= 1;                                                      " g9 \! O! O7 I3 I9 W% Y! v
                        }     6 P3 J6 F4 _9 a3 B. B. P
                } % g( n2 S5 A6 P& Z8 H7 @
        } 1 \& n/ B, B! R# U6 f
        
+ C) P& F8 k- p0 V/ g5 `4 O" X" k& z        for(j=0;j<16;j++)//16分频                                                                                         ! c! |3 l3 t! k2 i; Y4 W# R/ t  Q
        {                                                                                                                                                         
0 c5 F- t- }1 Y! I  x                TEMP1=((((Fft_Real[j+1]* Fft_Real[j+1]))+((Fft_Image[j+1]*Fft_Image[j+1])))>>1);//求各频段幅值9 q4 G4 p  T  a" V  P0 ]* {" @
                if(TEMP1<1)TEMP1=0;
$ l2 Z4 d$ A" A8 w0 G  @  {                LED_TAB[j]=TEMP1;        0 K1 p. ~9 f. Z9 ^. T# L
                if(LED_TAB[j]>max)max=LED_TAB[j];. F5 P8 ]% O% ~/ P) q+ x3 i1 o) ?
        }
/ H! @' v8 a8 A( ~- q        if(max > 16)//分级量化- K0 c, y; y( ^8 q# I
        {/ b; Z3 y& H& y4 L* P7 g$ J" a; f: x
                max/=16;
7 {& I8 n4 f+ }# z' |2 c                for(j=0;j<16;j++)LED_TAB[j]/=max;' W$ S, n" @& _
        }       $ _- C+ Q; X9 Q5 n1 d& s( K
}5 g9 D% Q- A+ c4 f' [( O
- p- {$ Y' V1 ~( M+ q

( \) U  f2 ~4 e7 S8 P  a/********************************************************************% g7 C  s) F0 p# p8 R* o, A5 x
* 名称 : GPIO_init3 y9 C/ {* s( }* [* i7 `. `
* 功能 : GPIO初始化
/ s& K+ ?7 H; N* 输入 : 无7 D& {8 t9 c6 Q3 O" v. j/ w
* 输出 : 读出的值/ h( c$ u$ G6 R2 r
***********************************************************************/4 W+ ]& C: u; ~& {% h! \3 f
void GPIO_init()
4 P- x# P2 h; ^4 [+ Q{+ V6 I6 m; X9 l7 }, E( ]& E! q
        P0M0 = 1; P0M1 = 0; P0 = 0XFF;    /*列*/7 ?. x( z4 Z* h6 S# R9 S# b( d
        P2M0 = 1; P2M1 = 0; P2 = 0XFF;
% d! U3 L0 J; q/ N# ?- q& X        P3M0 = 1; P3M1 = 0; P3 = 0XFF;          /*行*/6 {1 |5 \. \" z% S- y; A
}
, _! h! F6 {* Z$ M/********************************************************************
# [' p# B9 v3 w( m; s& l* 名称 : timer_Init1 ~  U/ Y2 @$ ~- N% {. w
* 功能 : 内部寄存器初始化2 b5 Z, t1 z! V
* 输入 : 无: z5 ]3 r. W1 k
* 输出 : 无3 g# k, K  T. R) m  g9 J
***********************************************************************/8 r8 d" G2 \: ]5 W1 y7 t- `
void timer_Init()& _( P' Z5 n5 e6 k7 T
{/ z- j* W" F  }" m2 y/ p
        TMOD = 0X12;- ?; _8 A4 R. H
        TH0 = 0xb0;                                                                  
  s9 _- b# ?9 O- O, H7 Z8 f  q        TL0 = 0xb0;
- b/ v" Z$ C( Y! H) g! n$ D9 c        ET0 = 1;                                               //定时器0 打开6 i8 w# b& P1 ?. U4 Q; _, {
        TR0 = 0;                                                      //关闭定时器7 P) S2 j0 c$ S# q6 m( {, [
        TH1 = 0xfd;                                                                                                 3 l- L1 x3 d% J2 g1 H* q
        TL1 = 0Xa8;
- i6 K/ D/ |3 ]8 V" y0 }- ?& h        ET1  = 1;
. X0 ?" g, D* U- k' x        TR1  = 1;        
+ ^" _2 w9 p: s4 s0 e        EA   = 1;        4 w$ v) n" d' }3 F$ l
}- {+ j4 K3 i0 K( V' ]8 A0 f: ?
/********************************************************************
) Q4 f% d, [" k; d: e: _/ y) |* 名称 : adc_Init
0 h  m7 m- U8 M5 w0 |* 功能 : 内部寄存器初始化( A# Y( R* Q5 J$ d3 k+ {
* 输入 : 无
* j7 Q, X* |* m/ s* 输出 : 无6 c$ J  B5 k8 D% N; |5 d
***********************************************************************/4 R$ T7 y( r- i" }" t: u
void adc_Init()
: s2 M2 T& N' z. t. `7 p. I  M. J{          4 f2 K1 P! {6 C- C. I- X
        ADC_CONTR = 0x80;             //ADC电源打开
4 I# ?* F) z+ O$ J- c        _nop_();_nop_();_nop_();_nop_();
8 d0 H) m* N2 p" t: @        P1ASF = 0x01;                 //0000,0001, 将 P1.0 置成模拟口
5 Q* V; w# U# w( f) `+ \2 h( ?        AUXR1 &=0xFB;                 //1111,1011, 令 ADRJ=0
' p# w  n. o' I3 G8 R        ADC_RES = 0x00;               //清零寄存器, V' d8 Y+ l$ j$ c4 O) {! u6 h
        ADC_RESL = 0x00;
! @5 H* z% f4 U        EADC  = 1;                                          //AD中断打开0 k1 u% [+ U2 r
        EA = 1;                                                  //总中断打开6 R, {4 f% W0 v2 D2 ]. }* M, L
}0 c7 @$ H( L. Q3 }+ x

& `: O6 j/ m4 J) X; \9 ^

* j1 F& V+ j0 ~3 ^. A/********************************************************************
3 r! {6 n( Z2 g* 名称 : main
9 k6 t) d3 x" Z" |* x, k% r* 功能 : 主程序! M' I7 c; I" [# V) J
* 输入 : 无" U8 p3 R  U9 m1 p7 z) Q2 r
* 输出 : 无
+ g7 A& F9 Q  Q; J***********************************************************************/4 m* ?: o# @$ s. `, \  p, t' o! }
void main()
( Y0 }& w; y1 N0 Q- Q{  H$ |( f3 O9 ^4 x8 p* p7 F7 O
        uint8 i = 0;) m" B' ]: n. X" {% v
        GPIO_init();
8 m( N; \4 W' o! m2 Z0 N        timer_Init();8 |' \! K7 w6 j" I
        adc_Init();4 p& N: T% V4 W$ A% Z
        while(1)
) V9 j9 @8 |4 h' I1 }( y        {
% B  G- h# L9 R                ADC_Count = 0;5 v3 R8 J/ t! O* S3 o5 f$ R4 ^
                EADC = 1;
5 \' t6 d6 N; f: Q                TR0  = 1;
( v: e0 d; E" d) p, x% W  {                while(ADC_Count < 128);       //满足128点6 c! i( M& R  K" V+ C+ j6 {
                for(i=0; i<128; i++)                  //清除虚部+ y' Y* P  t% `
                {! ^# K1 L0 l! `" g
                        Fft_Image = 0;
( t  h( E) Q3 R$ N; g                }4 n( T# F, |( o* N# M- i0 Y
                FFT();                        //FFT运算并转换为各频段幅值
% j: f- \8 K8 ~/ T1 T1 l5 k7 @- q" [

8 Y* y, l9 C, H2 ^6 F  @9 u        }5 @! [( ?/ t3 x7 D- ^
}
# N2 `2 a4 M$ i% X/********************************************************************
8 s' L, |: J* B1 C$ D8 G* 名称 : ADC_Finish# p/ S& c( t. w/ y: \4 ~) I, B' a
* 功能 : ADC转换完成中断服务
6 v- f: s& l6 _2 d* O* 输入 : 无
2 g5 ^. }( q( `: g$ t4 s7 y* 输出 : 无
8 f7 p; B) W4 w***********************************************************************/
! l) `5 t# t+ {7 H; r2 \- rvoid ADC_Finish() interrupt 5
( Q: x, C+ O1 f& A1 M/ ^8 d{: W) O; G, m6 R
        Fft_Real[LIST_TAB[ADC_Count]] = (int)(((ADC_RES)<<1)+(ADC_RESL>>1)*2)>>3;    /*按LIST_TAB表顺序,进行存储采样值*/
. d. K" k* g8 e+ }% @        if(ADC_Count <= 127)
  e# |1 q! m7 v4 k8 A# o        {
% F# e5 D3 N, E$ h" p                ADC_Count++;           /*自动增量控制*/
' o# W4 v- K9 e  C# ]' q7 P                ADC_CONTR &= !ADC_FLAG;
8 @# \& b# ]% y% }( d; t        }
6 v/ {& Z! u: h5 _3 }: i% r$ e  k* ]5 q$ K        else& `, n5 m0 @& g6 V2 O* |
        {
/ V" F5 M( s1 g  D3 {9 E                EADC = 0;9 G" P3 ?6 }/ C
                TR0  = 0;        * ]" |) j+ R" ~
        }                        
, f, Z+ K1 [% N/ Z' }( [}. V8 p0 @- J! ]
/********************************************************************
2 Z" r7 t2 k3 D' Q+ q" o  E* 名称 : interrupt_timer1
( Z" v3 I$ Y; P( H* 功能 : 显示屏幕刷新中断服务
7 L9 N# P/ {9 b, i5 S9 M* 输入 : 无
- t4 [4 i1 _6 o7 _7 b* 输出 : 无, A, }3 C8 ?7 ^4 g
***********************************************************************/
+ p% f+ P& f4 avoid interrupt_timer1() interrupt 3% p6 K) ]  ?0 h: X
{        
2 {$ o$ k; E  w" j        static uint8 rec = 0;0 U4 q5 g1 ?8 P$ H7 {; b0 x
        TH1 = 0xfd;                                                                                                 ' J! Q/ l. h- a0 Y) \! F# N
        TL1 = 0Xa8;
( A% H% K* t! b. b/ i! G3 h
1 C6 [( w/ o" b4 R" W
# u+ V6 O$ h4 C3 b. |
        switch(rec)                                                                     //往点阵屏填充一列的数据
% V& H! R5 k- f1 w        {
. f5 X: R$ T9 j5 a7 _                case 0: P0 = QTY_TAB[LED_TAB[0]]; P2 = 0;break;: G+ n9 h; f+ @# F# @9 Z7 H
                case 1: P0 = QTY_TAB[LED_TAB[1]]; P2 = 1;break;                 ' {, K9 W: M! N3 _% V: l  q$ N
                case 2: P0 = QTY_TAB[LED_TAB[2]]; P2 = 2;break;        
; i; ?( c8 _0 i9 J                case 3: P0 = QTY_TAB[LED_TAB[3]]; P2 = 3;break;        
# |$ a/ @/ L$ U+ m7 M5 D                case 4: P0 = QTY_TAB[LED_TAB[4]]; P2 = 4;break;        % J4 d+ n, E. _4 {. q" A' g* h& Z
                case 5: P0 = QTY_TAB[LED_TAB[5]]; P2 = 5;break;                % ?% u  G5 X: V7 D' d1 R+ z
                case 6: P0 = QTY_TAB[LED_TAB[6]]; P2 = 6;break;        ! y+ w8 T- W; b( Z% h
                case 7: P0 = QTY_TAB[LED_TAB[7]]; P2 = 7;break;: r" H- ?, @4 s7 b1 t
                case 8: P0 = QTY_TAB[LED_TAB[8]]; P2 = 8;break;6 }( |, F: t1 x# N8 }$ _
                case 9: P0 = QTY_TAB[LED_TAB[9]]; P2 = 9;break;                 
1 D1 z& ^7 u6 C% I+ z3 F                case 10: P0 = QTY_TAB[LED_TAB[10]]; P2 = 10;break;        ' }) g7 i, |* F% [7 u
                case 11: P0 = QTY_TAB[LED_TAB[11]]; P2 = 11;break;        + }% o- b9 I' y2 X% f# \% _& z# a+ D
                case 12: P0 = QTY_TAB[LED_TAB[12]]; P2 = 12;break;        7 Q8 w3 f/ q5 B+ G" L
                case 13: P0 = QTY_TAB[LED_TAB[13]]; P2 = 13;break;                , Y  j# G& n7 a9 M
                case 14: P0 = QTY_TAB[LED_TAB[14]]; P2 = 14;break;        
8 t5 `: F) P- C% B0 g9 o  c                case 15: P0 = QTY_TAB[LED_TAB[15]]; P2 = 15;break;               
* T1 U1 o! D1 N                default:break;
! w  l5 b& S' o5 m        }
+ p  o" c# ~/ \0 ^" c% O        rec++;! E9 R! U0 {! J/ Z1 ^4 J% w: a
        if(rec > 15)
& j! O( K2 g6 \5 v$ j        {- h  q5 U# o7 H+ k2 S' I
                rec = 0;( x' E8 l5 ]3 ?# v
        }8 r- r1 _5 c* R
}
- i/ Z, C1 b  h! ]. N/ V/********************************************************************& G$ B. |2 ^* m" F& b- v
* 名称 : Ad_Control7 ]% Z/ M8 e; H0 G% ?1 Y1 ?
* 功能 : 控制采样率6 \. f1 h& n# h
* 输入 : 无
  t+ j. H( C3 v* 输出 : 无8 {- J3 }5 G2 d" y1 Q
***********************************************************************/: p( _9 K9 n1 Q6 R
void Ad_Control() interrupt 19 j- X; R' ]  [" P9 ^" M6 l* a
{
: [2 M) d$ ^8 |( p9 X" \        ADC_CONTR = 0xe8;                     //开始AD采集+ B0 Q8 Y/ ~1 B( f* {" I) {
        _nop_();_nop_();_nop_();_nop_();         8 H3 `: ]. X1 W% o, T
} ) g7 \" r  i$ A" @
  B8 E) S4 E% A' n8 }+ D

8 i8 ^4 J, `" Y2 [% O下载:
7 p# j4 W1 N1 q* l8 D' Q
游客,如果您要查看本帖隐藏内容请回复
* E7 L) W: P. I( K% Q' b
% K# w, C! R4 C7 V4 c

该用户从未签到

3#
发表于 2020-5-26 13:35 | 只看该作者

该用户从未签到

4#
发表于 2020-8-10 23:57 | 只看该作者
多谢分享                 ; E: Z" C$ T4 V# R$ i/ X

该用户从未签到

5#
发表于 2022-3-7 18:22 | 只看该作者
谢谢分享,楼主辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-9 00:04 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表