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

基于DS18B20和LCD1602DE的灯光控制电路 含仿真图和源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于DS18B20和LCD1602DE的灯光控制电路 含仿真图和源码5 B& b; s! o" J. ~7 Z' Q

- S2 a: g9 s: B! W( E2 @6 v& W

0 D- R+ V! o1 q; R这是之前小弟自己做的温度控制电路,里面有DS18B20温度传感器和LCD1602液晶屏,还有继电器控制的灯泡和几个按钮,程序都有备注,发出来赚点论坛币
1 Q4 m8 \" A$ G! S$ Y

% K6 ^6 _0 j5 X% I( J
  [( h, F& }* p/ }% ~6 y) C3 |9 d

/ g( K2 O( e8 U# ?9 g#include<reg51.h>2 ?2 C0 {! ?$ V
#include<intrins.h>
5 ]$ A/ F# J) w. s#define uint unsigned int - i$ v9 b0 m+ w4 a2 h
#define uchar unsigned char
  \/ q* J1 q- q, j$ K#define delay4us() {_nop_();_nop_();_nop_();_nop_();} //12MHZ 系统频率下, 延时 4us
0 Z/ u7 H7 l1 e2 R6 G! a8 d6 T0 S7 I' b5 I) q+ _2 _
sbit DQ = P3^0; 8 f- n  _& F% ?+ z  _6 i7 ^$ ^8 a' E7 H  z
sbit LCD_RS = P2^4; ; V8 n) E% O" `& H5 I; }
sbit LCD_RW = P2^5;
& e5 l' s: S" V) _9 S- Vsbit LCD_EN = P2^6; 5 l6 i- u$ v/ C; F1 N
sbit key1=P3^4;; |: x% T6 y2 o! T- n& G  [1 @
sbit key2=P3^5;
. n5 ?1 o& V) @- e7 H0 a2 T  c7 T
  o7 P( v4 f5 r& e% k, euchar LCD_ID_1[16] = {" TEMP1          "};" ]) b3 {+ e7 m: u9 _
uchar LCD_ID_2[16] = {" TEMP2          "};
% ^% q. t7 g& n6 y3 A" X' c7 x5 b) g/ [, g
uchar code df_Table[]={ 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 }; //温度小数位对照表 " B9 Y+ h7 t; V  u1 x

  q* J$ G+ T7 [- n' F6 Muchar CurrentT = 0; //当前读取的温度整数部分
" f6 E  G( V3 P4 muchar wendu=23;//用户设定温度值 7 X1 q( M6 ?7 B" o
4 F# [- R1 T8 w3 k. l8 Q
uchar Temp_Value[]={0x00,0x00}; //从 DS18B20 读取的温度值
' @* f' b' W$ V/ E4 H* C: e. i! Euchar Display_Digit[]={0,0,0,0}; //待显示的各温度数位 7 j( x" X7 v3 z
uchar Display_Dight1[]={0,0,0,0};//待显示的标准温度各数位6 k0 t1 F8 Q1 f6 M" z9 [' ~0 {
bit DS18B20_IS_OK = 1; //DS18B20 正常标志
' K, p  Y2 h7 c" O" M. G* u2 B9 i$ A/ Y  M) R# X  W! d5 s
void DelayXus(uint x) //延时 1 ; y9 V; F' v* f. m
{
9 I8 m# a; O! I1 v& V3 K   uchar i; % f5 S1 i3 `- u2 |) P" n! r* z+ I" Z6 r
   while(x--) - S0 u5 u4 K; H& k
   { 1 ]" r* ?" H" c6 H5 M) v. @
       for(i=0;i<200;i++);
2 ?8 p5 x. R" s4 ?- I   }
" L. J8 h1 _1 {% R- n- U}
# y/ m6 @6 K! x: d
$ W/ _/ O" t; @3 U5 fbit LCD_Busy_Check() //LCD 忙标志, 返回值为 1602LCD 的忙标志位, 为 1 表示忙
7 v# H5 @# [; L; X/ }+ A/ }{ ; d; U0 _! y) T2 H; _; T" |  l
   bit result;
$ s& |/ G& R3 D' l' B* j8 N   LCD_RS = 0; & Z' w* v& }, l0 N$ w
   LCD_RW = 1; * C4 [4 K9 f' T
   LCD_EN = 1;
2 b) I# r2 `& e" K7 w, @$ b/ ]   delay4us(); 4 H: e# [! V3 ~5 Y. I& m* Q
   result = (bit)(P0&0x80);
9 R6 o% _3 `( G; F7 ^& k# t   LCD_EN=0;
4 S. _- p1 `2 u7 S( o" K   return result; & x1 @4 t0 b9 D+ G% F, \
} $ k, t! v' A. ?7 E5 O

+ q" M- a/ N- p0 b3 e9 I3 I+ Ovoid Write_LCD_Command(uchar cmd) //1602LCD 写指令函数
7 r1 h5 ]% G+ C2 G) R3 G3 q  R1 m{
* Z/ d1 J8 k* D* O' _; \   while(LCD_Busy_Check()); 7 R2 X# r! @4 Q/ T
   LCD_RS = 0; 0 r8 _* }- q+ n8 A8 D3 b& ]! L
   LCD_RW = 0;
8 y+ t0 J* _1 [   LCD_EN = 0; . c1 |3 T. R& m+ a+ ~
   _nop_();
+ ?- B( j! J( d8 @" G( O   _nop_();
8 t/ v# A9 Z2 x6 Z# \- w   P0 = cmd;
+ V! g" K/ @- [, w   delay4us(); 5 c  h& x$ A) d; y3 h
   LCD_EN = 1;
4 N" I) M0 h5 ]9 m# U( T* Q4 W9 q   delay4us(); - u, d# C5 D+ n: ~) O8 `  G
   LCD_EN = 0; ) u$ c4 @- X6 H6 x8 [" I# f
} 0 }3 u  F; X3 M" g6 I
+ d9 k/ _' X/ |+ k8 o: M
void Write_LCD_Data(uchar dat) //1602LCD 写数据函数 9 u% N2 W6 T$ g4 k2 m6 X+ N$ [
{ 1 c% f1 Y- ]$ f
   while(LCD_Busy_Check());
$ }  w5 L# B! [% Z   LCD_RS = 1;
& c% ~3 `7 Q/ N5 V0 l' |" T3 r   LCD_RW = 0; 0 a; u, Q. S8 K( I4 U& V
   LCD_EN = 0; " m( f' S7 p' z1 B4 k% x1 N( E$ N
   P0 = dat; ) q. _2 u3 Q* _7 z# z
   delay4us();   {2 `2 n+ X+ E1 J8 W
   LCD_EN = 1;
6 c* ?5 G& N2 T1 f" w7 A- p   delay4us(); 4 @) K; T' j( E+ r
   LCD_EN = 0;: t$ w  z' y) D0 t) `3 _
}
* y* A# O" v+ q0 D5 ~* d2 [void LCD_Initialise() //1602LCD 初始化
* E6 W, V, W; `  Y; ~{
$ u* P2 F5 d3 N+ E9 O; c   Write_LCD_Command(0x01);
8 Q; q# Y, H, y6 f9 u* H/ J$ {% K   DelayXus(5); ( I5 i9 c# J% {7 h
   Write_LCD_Command(0x38);
7 G+ g' t9 d6 c, r& R. H4 r( k" N   DelayXus(5);
+ K/ R+ W; a, h- M! C4 @6 y7 [3 |   Write_LCD_Command(0x0c);
/ }: f7 N3 P6 I, `4 D6 l   DelayXus(5);
) k+ C, j8 O$ A. `0 g   Write_LCD_Command(0x06); & ~/ \+ W; o9 r6 s# v. W
   DelayXus(5);
) x* a5 U6 h$ {5 y' @( ^}   @/ }. i  ~, Y9 f! P7 W2 j

7 q& E. L5 j3 g' P$ Wvoid Set_LCD_POS(uchar pos) //1602LCD 设置显示位置 7 [' B$ c" E* n+ @7 g6 i
{ " F+ q0 z( t% f" x: l$ e/ n- H" v# g
   Write_LCD_Command(pos|0x80); 9 M5 J3 D+ }: N" s; Z2 ~+ I
} $ L0 ?4 ?2 X. B

1 E- i+ E. }; svoid Delay(uint x) //延时 2 3 l0 o. R; X/ Y  I
{ ( b* B8 W8 Q4 |
   while(x--);0 q3 M$ }; p4 b- t" N6 T/ |
}
" [; H7 Z2 J; G8 E8 F$ ], }# v8 F) `3 U2 R3 S% |
uchar Init_DS18B20() //初始化(或者说复位)DS18B20
8 W: j/ w: j8 n' ?, v" J3 [6 `{
  e! O6 H$ e7 T$ N# U   uchar status; # _" ^  a4 t4 P
   DQ = 1;
' b- r' A! P( `* U/ _   Delay(8); : p6 R+ R' P' g: Y
   DQ = 0; ; ~) @+ j7 c! G" v
   Delay(90);  1 y& _# K' r  l1 {: x$ m$ h
   DQ = 1;   b) V8 s% h8 d" Y3 e  ~  B4 I# a7 D
   Delay(8);
' G% N( f6 g  K# Y5 w   status=DQ;Delay(100); 7 D& x" z1 Z/ x8 t
   DQ = 1; 0 `$ r. ^' S# C; N9 F6 G
   return status; / @/ h# u# w' h- j
}
# u$ I# [, S- E. L3 F* l
8 k2 E7 n- J6 ]) z9 o2 q# a7 Puchar ReadOneByte() //从 DS18B20 读一字节数据 1 a, h; i( x( S* N' {! L. y1 q
{
7 n, d8 G2 B$ Q2 a$ N- C   uchar i,dat=0;
. \3 t8 v2 A) b6 J   DQ = 1;
9 Y8 Q. P) X* s% s# Q   _nop_(); 3 g  k! \. \9 S) a' n, B! U6 B2 O& i
   for(i=0;i<8;i++)
  l7 ?5 |3 G- h" R   {
+ V# ?* r% P7 @      DQ = 0;! `% @0 }1 b3 X! n' G& G3 K
      dat >>= 1;
2 v$ M9 w- o& {2 _      DQ = 1;
/ E  Y  ?; h; ]0 ~      _nop_();
8 f+ `% |& E0 M  B: j0 ~      _nop_();
: ^4 p: o  S8 ]8 v7 Y     if(DQ) + v1 X# f% S) _# k. c
     dat |= 0X80; 4 G# _2 T; ^9 ]. _  {6 c* x8 s, K% Y
     Delay(30); 4 ~+ Y1 c. F9 k+ h: c
     DQ = 1; 1 M: z+ K: |5 _$ z
   } 2 K1 V5 K# K  ]5 ~5 b
   return dat;
8 j! Y0 p9 R& b8 P% c2 ^}
( e5 a" [+ J; c' i5 Z/ w
# v. f  J5 s3 Svoid WriteOneByte(uchar dat) //从 DS18B20 写一字节数据 ; l# X3 e0 {& V5 |2 b* M6 F
{
/ k* n- B" A! H6 X0 R4 a) L   uchar i;
; p- U& j9 b8 A5 w; C  ]3 N   for(i=0;i<8;i++) . E: v9 H3 U1 h7 r9 \
   {
9 c, q8 v$ U' k5 k" K0 R3 |6 ~      DQ = 0;
7 k5 ], [+ N" `- @( @3 v  W      DQ = dat& 0x01; 4 |( [- W; R  {' j
      Delay(5); ! @' w! O4 R' @2 D# Z$ R
      DQ = 1; 7 Y! V: C0 R8 G6 {5 E
      dat >>= 1;
' ^# ~3 F* ?% h* c6 F  }- E    }
2 ^3 V  r2 K) q* T0 l3 g} ( z. p! J6 H: M$ x3 X
4 Z* l( m7 s  O
void Read_Temperature() //从 DS18B20 读取温度值
+ p2 y" A* Q9 u3 `{
- G6 `' ?# j  j; Z8 C   if(Init_DS18B20()==1) //DS18B20 故障 . z) I: Q' b6 A
      DS18B20_IS_OK=0;
" e6 ~. v9 S: @( w   else * m. @3 a% }2 J' n# B1 }
  { ) W1 w. D. N* T
      WriteOneByte(0xcc); //跳过序列号命令 : }' ]3 }. V! w$ M; t/ a6 x- P- `
      WriteOneByte(0x44); //启动温度转换命令 2 ~4 ^2 |5 i0 a9 Y# L
      Init_DS18B20(); //复位 DS18B20 (每一次读写之前都要对 DS18B20 进行复位操作)
% L+ L7 I: W4 d: K9 C4 O$ P      WriteOneByte(0xcc); //跳过序列号命令
3 z: ?3 N  T1 \6 L      WriteOneByte(0xbe); //读取温度寄存器 5 j8 `. D3 w" m9 x4 `8 n
      Temp_Value[0] = ReadOneByte(); //读取温度低 8 位(先读低字节, 再读高字节, ) . X, R, u/ L" l& Q" u1 ]" _* o2 m
      Temp_Value[1] = ReadOneByte();//读取温度高 8 位 (每次只能读一个字节) " G. N. B6 C1 T0 o9 F) ^
      DS18B20_IS_OK=1; //DS18B20 正常
. [9 C" X; H+ i  z) W" O# r6 i2 p* r   } 5 t( o7 s3 G5 v8 u# @
}
) q( ?" T1 z5 E; O3 @0 j
* J  l9 @8 o" V+ G; p* X! z. Fvoid Display_Temperature() //在 1602LCD 上显示当前温度 9 R7 H. }1 W3 q
{ ! Y! S, Q! }4 U. ^+ z
   uchar i; , p+ x( s. g  s; r: B7 a, c
   uchar t = 150, ng = 0; //延时值与负数标志 9 a7 u  a+ S9 j3 W
   if((Temp_Value[1]&0xf8)==0xf8) //高字节高 5 位如果全为 1, 则为负数, 为负数时取反 4 G7 q5 I9 ]/ @& x
   {                             //加 1, 并设置负数标志为 1
! B5 G$ |0 b2 O      Temp_Value[1] = ~Temp_Value[1]; & _# t7 i1 T$ I5 B$ I, _
      Temp_Value[0] = ~Temp_Value[0]+1; 5 I* t- ?& |8 c2 f$ u; Z
      if(Temp_Value[0]==0x00) //若低字节进位, 则高字节加 1
( \9 k( t- \7 a" m( H6 K* `! M         Temp_Value[1]++; : K' @* c: N1 m5 v+ H/ V! c
      ng = 1; //设置负数标志为 19 s/ F% u5 c( h# g& ]* N
   }
7 N. R7 f2 v" R8 [) L4 e
5 r$ A+ F  r( J7 ^   //获取温度整数部分(低字节低 4 位清零, 高 4 位右移 4 位) +(高字节高 5 位清零)
6 B5 ~' s3 o' B) x. ~' P1 {   //低三位左移 4 位) $ ?- K5 h* c) o7 q+ v# x; d
/ N( _/ x0 l( g) v
   LCD_ID_1[11] = wendu/100 + '0'; : T, C. x" n+ b- q1 t) E
   LCD_ID_1[10] = '.'; + a/ L" V: K# y4 a/ x- D0 q
   LCD_ID_1[9] = wendu%10 + '0';
' l8 d+ T0 Y& C9 t' P* ~" ^   LCD_ID_1[8] = wendu%100/10 + '0'; + F: S/ q% }2 v2 R4 |2 H
- Z" E: N* p1 J9 T8 [/ R
   CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
4 N& }6 j0 M$ \+ Y# a/ T% x, w  h% H: ^" Q5 N2 K4 `8 [: |
   //刷新 LCD 缓冲
/ L0 `; \  _, W2 R   //加字符 0 是为了将待数字转化为字符显示 7 E! {& n9 ~; w5 V
   LCD_ID_2[11] = df_Table[Temp_Value[0]&0x0f] + '0';
: g6 a2 w2 ^( v% ?   LCD_ID_2[10] = '.';
( \+ G/ b5 c0 a0 ?* e4 L5 j   LCD_ID_2[9] = CurrentT%10 + '0';
7 D, t5 ]: G  q9 y) M   LCD_ID_2[8] = CurrentT%100/10 + '0'; % v( N9 K) h) ^& R# S/ g8 Z0 W3 Y0 E
; V% y& A, {7 `3 q5 @! `

  }# b2 a2 u6 K' z1 m. h8 G& E: z7 N7 ?2 j, J6 `% T: M- z# X! k
* X# ?6 |1 \7 h* L. D
$ }! E* S9 x: B! \6 D) k

6 [& L+ s0 e8 C" ]! |8 n   Set_LCD_POS(0x00); //第一行显示标题 4 l% K5 V2 E1 h+ T# _4 }6 X
   for(i=0;i<16;i++) 5 C# R* ?, u) `- i. H
   {
( u" y" `( X* Z% Z5 O* c* a      Write_LCD_Data(LCD_ID_1); % R+ T, ]- }; N& P- h3 R" B) f
   }0 F5 }* S4 B8 s+ D. s/ B
   Set_LCD_POS(0x40); //第二行显示当前温度 , w, J0 Y! y4 u+ G3 j
   for(i=0;i<16;i++)! Z9 J4 H1 H4 J9 D( S* {
   {
! g7 |3 s$ t; T- }      Write_LCD_Data(LCD_ID_2);  C+ K1 L9 C' T
   }
0 V! {- H' b2 i% T' W+ v% r   //显示温度符号 ( I0 i/ j: {. S1 ]
   Set_LCD_POS(0x0e); 7 l5 |8 X) ]! T
   Write_LCD_Data('C');
& @6 y8 T# T3 i& \4 T/ i   Set_LCD_POS(0x4e); 0 ^% u& ~$ x' s- d% t; @! M
   Write_LCD_Data('C');
- O: Z# Z9 A; M4 i0 }1 }}
" Y, E9 {$ e$ Z. |' V8 T; V6 g1 O! L& o' h' I3 J
void lamp_control()                             //灯光控制函数+ R" q4 @" X3 E# _
{. {: e# ?% T! b$ W1 l% ?" k

0 }# h2 W9 q0 k0 T. e& e- N# o   if(wendu>=0&wendu<=12)
# O" F1 c( A' Z   {9 A$ {) t- |: L4 K4 b
       P1=0x00;
3 P+ l. M- `4 _( n/ t; z, O/ p   }3 y; w. }7 X& d1 E
   else if(wendu>12&wendu<=14)
5 `0 @2 w& ?/ x  F- ?* L        {
8 n) A  O5 F. A! `. i- q/ b4 M3 c                    P1=0x80;  
* e8 @7 [+ L# y& n# S5 B5 B. R0 Z8 V                }
+ ~8 Q% K& [: `: S0 [        else if(wendu>14&wendu<=16)( V0 n' ?2 B! K' t$ o
                     {* Y9 S3 W6 S. E" w/ v5 e3 B9 j
                             P1=0xc0;* b4 H2 G- ]; c2 d9 O$ N
                     }   9 Q  D+ c4 x/ x3 X  l: n; W" F' n
                   else if(wendu>16&wendu<=18)
8 u$ U, x+ B- |0 _. j3 E! x                                          {1 X! ~8 L) k5 a. B( S
                                                    P1=0xe0;$ P* h$ M  Z; d
                                          }
" o% w: S( g9 n% N$ q2 }                                else if(wendu>18&wendu<=20)
, D, j6 o# r! t* d) ]                     {
/ w  }  S6 S5 }" }& F                             P1=0xf0;$ y8 U# I1 A0 c  B2 o
                     }   ; l- T  S) \1 ^/ c. g4 x1 r
                                      else if(wendu>20&wendu<=22)" g; S. `$ Q0 M3 e8 ]7 E3 S- D) Z
                     {
  Y1 h6 Y" \5 n1 L: o: m5 l$ r" e                             P1=0xf8;. s9 U6 {  Q1 r# \- D
                     }   
* f# Y& d- ^* u+ K) v                                      else if(wendu>22&wendu<=24)
1 f- H( K+ R; s, c, Z                     {( w$ [3 c& l/ z7 V- V8 ]. x/ u
                             P1=0xfc;
% z' s2 ?. f1 K' t' D+ V                     }   ( Y9 G8 u; ?+ o& O0 Y
                                                 else if(wendu>24&wendu<=26)
( D% d7 A6 u# _: i2 V7 {                     {  b3 W6 W9 K5 ^2 o
                             P1=0xfe;% O3 j6 V# H8 ]( a, {* E
                     }   
( B+ C& [: e- }* `" l7 m                                        else if(wendu>26)
& u6 I1 D* {9 j1 y- W/ V                     {
1 Y  B8 K) h3 T+ ]8 F* I. X1 k                             P1=0xff;1 S( c; H- o$ T- ~7 \4 L4 b
                     }   
. J$ R- Y/ z: S: C: a2 |+ E}
) ~- V8 s+ N+ f  r. I; R8 r5 S. _+ o7 M. {+ Z% _0 j4 N8 k
void main() //主函数
4 x% s' x$ K3 N* |& y$ e{ & y  n# ^# Z7 S. V! x. H( ]! E& C
   LCD_Initialise(); - X% i/ H1 q1 y6 J- [+ Z: H3 t
   Read_Temperature();
! U; l$ B) X! b% ^, y, m! L: u6 s% R" @" F   Delay(50000);
# M  O5 {8 b1 j0 L4 Q9 S: H/ Y9 e   Delay(50000);
- d2 O& _: ~; @+ F( }! h# }   while(1)
- k7 s/ p, T" X1 ~7 }2 e  { $ u$ D( ^) v/ [) E: Z2 K
     Read_Temperature(); # I# D6 \( y2 P+ i
! r2 W/ s* H/ t
        Display_Temperature(); ) F8 J. q7 J1 }
     DelayXus(100);$ d/ K" f  @0 ^5 o& F
         if(key1==0)1 A4 _' J. f$ z8 S
        {! n, N# Q' ]0 Q0 X4 h- q7 U6 P
                DelayXus(100);
- z. v& P. P0 I# G                if(key1==0)
& G5 V% m1 x# ]1 `# ]                {' u. D* ^$ ]9 i
                        wendu++;
6 x* w$ t4 d# _& n8 ~2 F) h                        while(!key1);9 H- M! X" W+ k4 O8 e& S
                }        " G2 M2 x6 ?! H  S1 b+ G# i
        }
. y# A$ W9 g+ N- D6 j) u# O! w" Z6 u. r/ J' a& B
        if(key2==0)
  s/ N/ m/ W7 c; R5 \        {$ D7 k* Y; r5 `
                DelayXus(100);
; T& T/ G4 V' |- Q6 ?                if(key2==0)
& b/ m! k7 c" \+ n/ s* v4 z                {4 h" ]& O& Q( _! y  C, U: Z
                        wendu--;
( M; T$ f3 o/ O) \% G  ~                        while(!key2);* _- b( [: {2 K$ V
                }
6 ]$ \- ]8 e: f$ v        }
0 B" X- r: n6 L0 U         if(CurrentT>=wendu)" X! ~3 E9 {0 Y0 B" r. ~- q
         {5 `/ U' r) s2 P- x- X7 }7 ^
            lamp_control();
5 j$ q. E# K; Q# q2 H        DelayXus(100);
) I  E' F1 A" E- |- P         }
. T6 {/ j( O3 d5 E         else         P1=0xff;$ Z- r0 X7 w: O# ~

; M& f* R# m2 v3 c; O# S. ^   } : b) O3 J! d0 l) V
}
. ~9 E7 z1 H- X' o  R+ y! I  l- Y) l: a/ r4 ]6 ^. \
下载:. W- Z9 L" M- M& t9 j" u. r
游客,如果您要查看本帖隐藏内容请回复

1 b8 J" Y% I! _
1 i+ {3 k$ i9 \' Q  Z5 k

该用户从未签到

2#
发表于 2019-1-22 18:43 | 只看该作者
看看楼主的代码

该用户从未签到

4#
发表于 2021-12-12 09:15 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 10:13 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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