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

 AM2302湿度测量单片机源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-6 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2018-11-7 10:09 编辑
2 R3 T5 O+ b9 C- p4 a) y
2 |% B, r0 y2 p! P6 j
AM2302湿度测量单片机源程序

. z9 b* Q! m5 n7 h1 g. `$ ~6 a- `
使用AM2302温湿度传感器模块,达到测量湿度和温度目的,并在1602上显示出来。
2 R: f$ t* |3 R% c2 t1 X, @' e3 L8 N7 e# f% p3 }
单片机源程序如下:

' `  A2 W8 x; r#include<reg52.h>
' m# n0 B1 Z& T#include <intrins.h>) c  [7 G9 m. f2 k; Q: ~& S0 c
#define uint unsigned int
1 [# ^) D% d! n3 Q#define uchar unsigned char
0 G( P1 J5 r8 f7 |2 D; w- Q$ Z$ x( ~; I* N, b8 l; P9 v
uchar code table[]="     WELCOME ";/ B2 \$ b# w2 W
uchar code table1[]="RH:      %";
5 A: `2 b& b* {; u4 Tuchar code table2[]="Sensor Not";
! U) P, c) c8 u  V- d, Ruchar code table3[]="Connected";! L, i' I5 g: Y8 ]+ J1 \' o
uchar code table4[]="Check wrong";
7 r+ \* i/ H6 N6 {
0 H, D9 l9 g, g* r% @: h; @sbit Sensor_SDA = P2^0;
& J$ R/ {  L5 s9 z% L! C3 e4 H% O4 r9 F3 P; g2 ~
sbit key_set=P2^1;
8 e  f, z8 d, o' ~7 S" J  |( esbit key_up=P2^2;* \: z* W4 P# N/ Y( j5 z4 K
sbit key_down=P2^3;
0 [9 Q% L* M1 q! [sbit key_ok=P2^4;$ B, S; K+ I; X2 j' b; |

/ }# ?. b+ _3 h$ |* b: Qsbit lcdrs=P2^6;
& E5 l4 ?: d! L2 G, J: Asbit lcdwr=P2^5;
% K, t; z+ N7 d# Fsbit lcden=P2^7;5 g$ r" @# r- Q* g' _
9 d: v5 T; c6 w9 V( v, ?9 d
uchar Sensor_Data[5]={0x00,0x00,0x00,0x00,0x00};+ B/ C, P& J8 _2 u
uchar Sensor_AnsweRFlag;  //收到起始标志位
5 H  P+ S9 S6 [0 |9 `2 Xuchar Sensor_ErrorFlag;   //读取传感器错误标志
" y/ s; j- t. n  h" h0 e  }: c7 v# Muchar Sensor_Check;                  //校验和
: B/ m- i) p' E) ]; e# Ruint Sys_CNT;' W) }! Y' I3 U# Y
uint Tmp;8 T- e8 [+ b7 Y  v$ c! ^  |
uint t0;
* b+ Y: I0 N2 F  X8 ?. cuchar num;
* h0 [. ?$ D& N0 p2 P4 l, auchar flag;9 ?# W7 D# h7 ^
6 V$ ]. h4 N! U- U4 _, R
void delay(uint z); b) O' x, L. L+ O6 k% _& e5 A
{" \. O& {3 V8 g/ u/ _& Z" O  m* ~
        uint x,y;
7 W" n- m) @7 {6 K# N- j        for(x=z;x>0;x--)* ]% ?2 m6 g0 {0 X$ ?
                for(y=123;y>0;y--);& K# `# @6 y$ Z8 p0 a9 R) R7 A
}  U' s+ f* A8 }% v, S; d( h2 e

1 C! a# Q5 @! {! v) _/********************************************\* K4 i5 Q7 Y7 m( z' ?: a
|* 功能: 延时        晶振为12M时                                    *|
( s( }/ j2 r) J) t: {- i|*  t = 1 为 20us  然后成倍增加10us左右                *|  d& V) ]: J3 V! a& _5 O& V/ s
\********************************************/
, H8 ?4 P/ {0 i3 Vvoid Delay_N10us(unsigned char t)5 n3 H2 U7 m* A  Q
{
7 g( t6 d# w8 v! Q    while(t--)) n' q$ g  b( ~$ k( M
   {
! H* F4 T7 @0 I8 `: N3 M. x            _nop_();, x3 B: W2 [, o& {' a" V
   }
# L, m9 E" b/ F/ \# D% _/ W/ A/ g}, p# T8 j2 q8 d6 }
/********************************************\
( `0 ]+ m4 S; B# B4 _  L|* 功能: 延时        晶振为12M时                                        *|
+ R) G: {3 r" V" q  J|* 延时大约 1ms                                                            *|' E0 \0 W0 Z( i) N' D6 g
\********************************************/ ; E( r8 J3 n# L/ h* }
void Delay_N1ms(unsigned int t)
+ F0 d1 g9 Q, c7 i) F* \" @2 g6 G{/ r1 x/ n, e: o; N. T5 h8 H. ^
  unsigned int i;
" C9 T6 Q, c# E/ H$ Z1 ~  unsigned int j;
3 ~$ u; D5 ?$ K9 z4 y1 f6 I2 J  for(j=t;j>0;j--)
' C. u5 |0 S  X5 j. G, {     for(i=124;i>0;i--);  //延时大约 1ms7 W1 ]+ D* {4 ^  a  m, _
}6 e$ }3 |2 [2 x- n7 e: s) g
void write_com(uchar com)  `, B, h, f$ ~/ q  a/ q  p$ I
{
* d0 m; N' C- z) _) S        lcdrs=0;
) @* l, `& {2 P9 V8 q) m        P0=com;) Y' X% a0 W1 }. l2 d5 t
        lcden=1;9 H2 p6 V' @1 {+ R! g! t. V
        delay(5);" D2 o" x; ?, o9 B& s
        lcden=0;; `" V, D* ?, }
}
8 m* I4 `6 b2 xvoid write_date(uchar date)
& f- j4 |5 e" e7 `8 [. n{
! N7 K; h' y- O3 j" {$ q6 S# V        lcdrs=1;
. x0 J' t3 U( W& @        P0=date;
1 H/ g5 _# y) Y3 W9 m" X/ a. e" J        lcden=1;! b2 [/ e4 D$ Z' s9 h
        delay(5);
, e( o4 q* Q* A$ f        lcden=0;
9 ]# W( a. M' v}
6 O; L( W+ F% w1 `4 evoid diyihang(uint z)
1 f1 Z* n! D+ o7 ^9 [{
$ z; @8 [8 a: h7 R        z--;1 q* ?: I; _/ I4 \; A1 P! h5 Q
        write_com(0x80+z);
; |, {1 B. X' T9 k" W5 U) b}           
1 V0 V( N' Z9 l. }( i0 mvoid dierhang(uint z)5 V- T8 e; x5 ~% y" S
{
# z+ X% i* |6 j5 w        z--;
8 _8 {/ O7 J3 M" {5 I( ~* V        write_com(0x80+0x40+z);/ b5 m  b6 C1 p
}
2 o7 v- j1 ?+ h+ Q: s9 @void init_1602()
0 G* w& A5 Q9 W0 Q{
7 l# B9 R' U" J) o. t9 X2 b( s+ R, p        lcdwr=0;
$ p1 M0 Q' A1 B& T3 w' ]        lcden=0;
; s" \7 m1 f9 ?& ^! T- w# z        write_com(0x38);//模式" y8 s$ p$ E; G+ \! ]6 S0 \
        write_com(0x0c);//无光标不闪
  q3 p/ y1 W2 E7 E* h5 l* H/ P        write_com(0x01);//清屏
; g+ y$ h# b1 g7 r: e4 M2 s        diyihang(1);//显示位置. f' I( a. @4 v6 R
        for(num=0;num<11;num++)$ z/ j& _! z  J
        {
) J  d, f( `; y$ t# u. W) [" C1 D, F                write_date(table[num]);/ @, f9 T9 I+ H5 r0 D) q! i
                //delay(10);3 \4 p* L# w" D) R( [
        }
6 b$ U" M! S! m; P& ~5 w        dierhang(1);//换行显示* y* ~0 k/ M2 ]- N( j
        for(num=0;num<10;num++)
& e$ ^9 z% c* d2 G5 g        {: K( ^/ Q( w0 U1 U7 a  z( Z- a  w
                write_date(table1[num]);               
7 p9 g3 L! B$ ]# h                //delay(10);
3 d/ X# I/ n7 P. E% x3 }5 J        }
+ w9 e8 S' {3 W4 u5 C0 h}0 E7 _8 m$ |0 \' q+ P
void Clear_Data (void)' |! z3 u8 h# W  |" X  J5 w
{
' ?4 l& h& Q& @! f/ J        int i;" c  l3 M" K- K
        for(i=0;i<5;i++)* k4 ?6 h9 A& e9 f9 e
        {
# H9 T9 G. Y- p7 m           Sensor_Data = 0x00;
* E2 ]2 s: @+ ]& l4 F        }//接收数据清零
* K, Z# }$ n4 i}) I% w- H4 r, S6 `  @. R; W
2 V  y% Y" b; r6 Z7 U5 a
" u0 k4 i) e0 Y6 T+ ]3 J. t
/********************************************\
* x5 \* l, H! S( e0 Z|* 功能: 读传感器发送的单个字节                *|) J% x% L3 z9 Z) f: c/ d5 m6 L) @+ {
\********************************************/
$ W. `" `* P, ~. [unsigned char Read_SensorData(void)3 V' H% t4 H& g, h$ B
{
5 q7 ^1 m, z" V5 {        unsigned char i,cnt;
. r6 n7 ?) T2 g7 \/ A        unsigned char buffer,tmp;
( ]# ?# Y( d. F1 U        buffer = 0;4 @" a1 P5 @* f( X" o
        for(i=0;i<8;i++)" }  X3 f0 O9 p4 v0 D7 f# _
        {% h! i4 G! a: ]+ D' p
                cnt=0;" B( v- u- M/ G3 q1 n
                while(!Sensor_SDA)        //检测上次低电平是否结束
( b% Z6 K  D3 W7 x% }/ i                {
. S4 j, d# Q/ V: E; i                  if(++cnt >= 300)
! P0 ^* X. a' H3 U* |                   {
( d8 O1 b: _7 Q' _, y, ?  b                          break;$ b+ A. I& _: ?- C" _: b
                   }; Q, H3 H2 {% g$ H( |
                }: w2 z4 E4 @+ I. m" E& a  D. |
                //延时Min=26us Max50us 跳过数据"0" 的高电平
8 ^" A: `  v$ C" i& g, }                Delay_N10us(2);         //延时30us   
) V( ~; N' w  H" p& {+ O, e
: Y# o3 N7 B8 x9 ?$ K. Z                //判断传感器发送数据位3 G/ @  D+ K; Z' C- [# `& K
                tmp =0;
0 K2 O% N! O) I- S- l                if(Sensor_SDA)         
2 _; A0 a( s; }                {, D: q9 K- D. k
                  tmp = 1;3 G4 _1 t$ q3 |* L- ?
                }  
/ T6 S. w% d# O( {5 {7 U4 K7 ?                cnt =0;
" Q! k* R( _$ t                while(Sensor_SDA)                //等待高电平 结束
  x" I! L0 R; O. W6 V                {
$ F  O  O# b, h+ b2 ]                           if(++cnt >= 200)
, P# B1 H; I  T1 p6 ~                        {1 i( K( l. B3 r
                          break;2 l9 D  n3 k: E3 o
                        }) L* h0 V7 q3 c/ y4 S: G+ m+ p
                }0 E& @' Q5 j1 H% {% Z* E" V; s) p: G
                buffer <<=1;
5 c" d  s, m- f7 j4 X' X* Y                buffer |= tmp;        # x: V+ X: k: J! }3 n! w9 w
        }9 R: T2 o9 F, e/ U% t6 k
        return buffer;
8 m6 S1 z4 R" ]2 V* R# Z% p  }& h% R- x/ a0 t5 i( l
' Q- y1 H8 }, J/ l4 Q& p
/********************************************\/ H) K9 z, W0 J3 I% o* [; p
|* 功能: 读传感器                              *|: R4 z* d; l4 K  I& b
\********************************************/
% `8 ?+ y) O' W) T- Q2 vunsigned char Read_Sensor(void)
( H# M) Z" m5 T' Q! C{        
. t7 k1 j1 y* M% q4 `! ]        unsigned char i;
. U" G" Q- k  [& w* }# v) f. X- {& b. I        //主机拉低(Min=800US Max=20Ms) + G7 V0 \( C+ K! N) R  Q5 P# g/ H
    Sensor_SDA = 0;% I- d4 |: ^  B" a1 p0 |
        Delay_N1ms(2);  //延时2Ms+ R$ ?& ^. T& Y# n) V" D

( n3 Z8 w7 G0 L. Y        //释放总线 延时(Min=30us Max=50us)! D) I8 Q  U3 N9 O8 N' Z, c/ z& E
        Sensor_SDA = 1;         
! h: z* t+ ]% V! V        Delay_N10us(1);//延时30us8 I* b; V; B" [
        //主机设为输入 判断传感器响应信号
. G( x# W# T7 v# t. m& R1 `        Sensor_SDA = 1; ' Z, Y- E$ X% }- r7 F% Y3 B7 J2 e
8 ^% c2 v& D0 u! ?' W! u9 o9 \9 x
        Sensor_AnswerFlag = 0;  // 传感器响应标志         
. \0 a; |0 v; a6 g% J, L  e
+ V$ m. U- e, m, P( N3 \, B        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行          0 A, P- }5 u4 z. k4 N, P- o* z* }4 l
        if(Sensor_SDA == 0)+ x! {* X: L* ]6 N. F& c; |
        {
) k& A* b+ T9 y+ T           Sensor_AnswerFlag = 1;//收到起始信号2 h( ]! C4 S8 z3 {" v1 F% E
& I# t1 ]2 I/ D; d
           Sys_CNT = 0;
1 q9 Z) o$ @% t+ l+ }& |' j$ x           //判断从机是否发出 80us 的低电平响应信号是否结束         
% Y& G9 X$ O' @) s           while((!Sensor_SDA))4 B4 q: @5 n) M6 m( b4 F4 l
           {, L' ^% P/ _/ ^8 `0 f9 y
             if(++Sys_CNT>300) //防止进入死循环
- @1 ?9 ^/ O( ?                 {& W, u  v( b  B2 j( k& x
                   Sensor_ErrorFlag = 1;
. w7 Z) E. p6 ?: F9 L, M                   return 0;8 `3 S) H9 `; a! j; m# h# Y0 U
                 } # s, D7 F( t# K* ]
           }: p/ T3 p% A( h1 V

1 D6 g3 S* \+ S) W# i2 c7 [3 z            Sys_CNT = 0;) K" A0 ]- m  D  a  ~2 z' G
            //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
! M, B  s& s4 A/ M            while((Sensor_SDA))
( b1 J3 C* D" t  ~' J            {6 J; s' G3 u: N6 c% [
               if(++Sys_CNT>300) //防止进入死循环- v# w' e4 L. f* P
                   {4 r( S& p: b' N: Z8 x: I+ ]9 y
                     Sensor_ErrorFlag = 1;6 K( ^# o8 G* H( I
                     return 0;* G: z0 [! y! W+ B4 u( u
                   }
" Q% V; Z; k9 f) {0 [            }                  
+ \! B' E0 W2 d3 z5 _' R            // 数据接收        传感器共发送40位数据
$ l( n( t8 c- s* N            // 即5个字节 高位先送  5个字节分别为湿度高位 湿度低位 温度高位 温度低位 校验和9 `; \, x' [: S2 f. J% M! i
            // 校验和为:湿度高位+湿度低位+温度高位+温度低位
* W( e+ O- A! F. z# k* t  x% _            for(i=0;i<5;i++)- d# R# U3 {$ W4 Q4 C, W
            {. z( |% t8 s5 ~8 B# }. s  O7 {/ |
              Sensor_Data = Read_SensorData();7 k, j3 _( i8 f5 W( @
            }3 C/ o) S. O% q
        }
# V7 ?- L9 k/ u& c        else1 Y6 K3 D- ~, v" J! O6 V& a
        {; \" u9 F$ o. S( [  o; e
          Sensor_AnswerFlag = 0;          // 未收到传感器响应        3 x4 L* k1 i7 P% k  I( U. V' l
        }
0 P  k6 H( c0 ^        return 1;
; b8 `. C, F3 e% y}" U9 u8 U7 F- S: p
void display()
7 e, p' z* v. j9 O. e* y1 h{: |8 n8 {6 b4 k6 h1 H5 F& z% y
        Tmp = Sensor_Data[2]*256+Sensor_Data[3];
0 ]: E# E+ ^9 X* p' w; T        diyihang(6);0 \# o+ W# f" ^7 F
        /*write_date(Tmp/100%10 + '0');0 O& n8 N9 ]" l. `- w6 }/ N% O- w
        write_date(Tmp/10%10 + '0');
' P+ K$ l. q; Z5 ]        write_date('.');
% B$ l) b. ]. A; M' ?        write_date(Tmp%10 + '0'); */
& B% U4 w( v: t* z% \" B8 d# g% O8 J
        Tmp = Sensor_Data[0]*256+Sensor_Data[1];( O9 ^" N9 L6 O8 g% y$ b8 M
        dierhang(6);
; L( q# F# P" a3 [) E5 f        write_date(Tmp/100%10 + '0');; S2 w4 u( o: K5 c$ |3 y! D
        write_date(Tmp/10%10 + '0');8 q% l$ n( B+ ?" ?% u0 I
        write_date('.');
' z0 O% e$ N; X        write_date(Tmp%10 + '0');0 \$ ]& Q7 X- P. T
}
- X, t! C9 g& r" S! _5 avoid check_and_display()) M, n. C  r6 `* o. |7 C0 s5 j
{
( _' A# Y8 z$ }( X        if(Sensor_AnswerFlag == 1)! I  d5 R& R! C. d3 |3 ?
        {. O7 ]% m5 \+ u' H8 X5 Z
                Sensor_Check = Sensor_Data[0]+Sensor_Data[1]+Sensor_Data[2]+Sensor_Data[3];
% a7 d! G7 q1 e8 ~8 q                //校验成功1 g! c6 ]$ j/ a* k" {
                if(Sensor_Check ==Sensor_Data[4])        
$ S" s* H4 s# @! T# i) X% A                {0 y2 \+ b. T9 c1 V; i$ @* X2 F
                        if(flag == 1)& p! S' A+ B! Z5 t( D% j9 S" \
                        {
5 t6 O+ F. H2 f4 a                                flag = 0;
; U% |6 c- g) a                                write_com(0x01);//清屏2 W; y( X/ x0 F) m7 R0 |0 w
                                diyihang(1);//显示位置' h& L/ \- f; s3 a% V
                                for(num=0;num<11;num++)
, d' R* M* r; Q                                {0 n; ~0 ^2 Z$ o. R- c! y
                                        write_date(table[num]);9 T3 E5 C' A8 j" W
                                        //delay(10);) D. w$ v/ u( W! L" b+ }  f6 ]% O
                                }& g1 E, i5 ^  c* m) u, m9 V
                                dierhang(1);//换行显示
! i0 c; v5 N1 q% P% d$ C: T( i( Q                                for(num=0;num<10;num++)
- `5 P) f, n- _& P/ p                                {
6 y# G) R  P. I& P3 Z4 t( U                                        write_date(table1[num]);                ! d% R4 E! J9 N1 P+ a, @* N. t' d
                                        //delay(10);
% {- }* \9 @+ |2 ]( X1 r                                }
3 x& X, T5 m7 h, P1 X! ]                        }: n$ f$ t$ Y- y! M7 u
                        display();
" e/ j. z/ f8 A+ a5 l1 C5 W3 H                }: M, c8 x, A1 l# [( [9 T1 z
                else        //校验失败  X' ]+ o$ O2 J' }0 E: \
                {2 c3 @% a8 S% V3 \8 h9 K: a& `, q7 Z
                         write_com(0x01);//清屏
/ Y4 g6 z# D. }5 x7 C                        diyihang(1);//显示位置9 k" m  O) }% |( h/ d& e8 w5 ^, A
                        for(num=0;num<11;num++)
7 r, C4 {! J# D/ y# x                        {# ^- v/ g9 I0 {2 C) i
                                write_date(table4[num]);7 i1 V& Z# y# Q( [- v
                                //delay(10);( H' K  J6 {6 g0 v: |2 `
                        }
  P) Q  A3 D3 b% E% Y; @4 @- u                        flag=1;
9 @* y0 ^" U9 J/ P/ B: V2 w9 q                }
1 T+ M1 @& ?) O1 ^1 u6 W3 q( {        }5 O3 l) j; h7 p/ v4 X* L( y" n
            else    //没有连接上2 H, J) D. I+ ?" y; j9 Q9 Z# k+ f
    {
" Z- T  d) Z8 s; T5 y0 N9 `    key_set=0;
; k: a2 V* r" K+ |5 u$ N& B        write_com(0x01);//清屏7 R+ t1 n4 q2 q* _* D4 u; `
        diyihang(1);//显示位置
3 f$ W: B$ x1 X0 r3 X7 b9 g$ T& Y6 i        for(num=0;num<10;num++)
; z0 [2 p: \; G$ N- N( O% `        {
+ ]+ Q, e8 l( S2 T, U0 Z: ^            write_date(table2[num]);
: i; a2 Q4 k" ]+ A/ E            //delay(10);0 i. l# o% f2 I9 B% ^+ ~1 v% h
        }
/ B5 a4 ]. a7 ~  G& D        dierhang(1);//换行显示
; a# |7 K' h3 [) M        for(num=0;num<9;num++)
: G  e) h; X0 q# p4 m% X        {
& B4 P$ s' D) Z0 J" A+ v4 k. q+ u+ W            write_date(table3[num]);        5 }4 o& `0 K) O* i) D, M
            //delay(10);
/ G. Q& ?2 K. `& s6 P        }
9 M, `* l7 U/ V2 t        flag=1;, ?+ z5 P' c0 o. H$ c
    }    ) p" h6 W1 T! H0 I# o5 m0 l; \
}
" M  W% {+ C5 O! N/ v+ c- Q) x# Z3 W) e5 ?" ?
/*void init_t0()0 F* i( e$ o; }. ]
{! j! E; q8 e2 |: B4 F
    TMOD=0x01;0 D/ d8 i" X/ R: d) w
    TH0=(65536-50000)/256;
9 U9 P* v9 @' E    TL0=(65536-50000)%256;! x: n+ B6 g$ t2 f  ~2 B& q
    EA=1;0 T2 B& g6 p/ b  Y3 a6 x) F. [
    ET0=1;
+ g$ Y% h$ N+ O+ E, j  _) _    TR0=1;
9 ~, \" n% k- ?- y8 n" Y$ ?+ w# U}*/8 U( z4 z: p2 n: y7 s; v

6 B  ]8 }1 s4 u0 [$ q& H9 p; uvoid main(): n' A/ y6 Z8 d
{
1 {6 Q  l9 I# @& ~    init_1602();0 L8 P; k/ u) f
    while(1)
& M) j# v+ ^5 W0 n    {! o; L3 B! Y% X# y/ S2 s7 j2 b
        Delay_N1ms(2000);      // 延时 2S(两次读取间隔至少2S)
. p: {+ ]4 u: b3 l- s/ W        Clear_Data();         // 清除收到数据
- p! p3 ^4 a: s- A6 K9 y        Read_Sensor();          // 读取传感器数据
% N! p; k* }* J        check_and_display();  // 检测并显示数据    ( O7 c0 a& A& P
    }  c! m' V0 q- P, m
}1 J1 w4 |$ ?+ j) d3 R! F3 V1 l! t
…………
( M* ^8 Y& B7 J. `- U9 c( u…………限于本文篇幅 余下代码请从
eda365.com下载附件…………+ [  C- y0 A, F. T$ |
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

2#
发表于 2019-1-10 17:06 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 21:50 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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