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

 AM2302湿度测量单片机源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2018-11-7 10:09 编辑 / x6 x7 y8 _# g. q( h/ L8 l
; y8 @6 J" `8 Q1 M) J
AM2302湿度测量单片机源程序

3 p$ ~2 v  e7 p; F" |6 \
使用AM2302温湿度传感器模块,达到测量湿度和温度目的,并在1602上显示出来。+ p. j9 k+ r' R& T1 Y& b# u, d5 G
+ u& N- M# B6 x' e
单片机源程序如下:

9 b; W5 k+ [2 e" ?" D/ A1 N. j#include<reg52.h>2 ?( p+ F6 m+ J( p
#include <intrins.h>/ O$ \0 ]* m4 x
#define uint unsigned int
0 v4 {% d$ u, s. k5 i0 y  W#define uchar unsigned char
2 ^  c& |9 }2 v8 @  m- \1 M4 O# b% l* ]& L7 U/ Z
uchar code table[]="     WELCOME ";8 W' [6 q; _. S: o' h% |
uchar code table1[]="RH:      %";
1 N' s& h  A$ m, zuchar code table2[]="Sensor Not";/ T+ p) R0 H: _4 f/ `% u
uchar code table3[]="Connected";
* y0 C# M2 x9 V* `4 O+ Zuchar code table4[]="Check wrong";
9 i$ R4 ?4 C1 b: }9 L# ^$ `" D9 W7 R/ E. R" [) f/ d
sbit Sensor_SDA = P2^0;2 W* ~; L( y) ~0 }. o7 z5 O3 s
0 c7 w! w5 |4 `! E
sbit key_set=P2^1;: U7 n# K6 f" f! z; O
sbit key_up=P2^2;9 X: {" u) S/ Z4 K
sbit key_down=P2^3;
( x% [3 `0 t. z' M( O4 x% X& @sbit key_ok=P2^4;5 B9 v1 Q( a, i: u
( H; W, [/ p  h7 K! T. ?
sbit lcdrs=P2^6;. i# j& X& k4 j5 Z' P4 O& I  W$ u
sbit lcdwr=P2^5;
" z% C4 X: ^/ ]( A$ N. @3 zsbit lcden=P2^7;
* H8 p! s' [' V0 `8 q. O$ p# L! l! S7 ]
: m9 L8 V8 E, z7 z9 fuchar Sensor_Data[5]={0x00,0x00,0x00,0x00,0x00};
' q, a" A; F% {5 M$ k4 g5 juchar Sensor_AnsweRFlag;  //收到起始标志位
& s' C5 z) t( i& v) M% k4 puchar Sensor_ErrorFlag;   //读取传感器错误标志
9 p4 F% U+ s0 Wuchar Sensor_Check;                  //校验和1 |/ z3 v0 V: N
uint Sys_CNT;
) o# |5 W; Q+ I: F9 a; Cuint Tmp;
1 Y& U% `4 w8 |+ `; Muint t0;
- g" E1 ?2 A% b5 R" f. Quchar num;  q( w& b7 }# g0 Q" F% i( V
uchar flag;0 u  O$ p( h! _2 p
( Q$ Y# W' d& [7 _' {
void delay(uint z): Q3 {# ~8 |& g1 A
{: S. r. |- H) o/ ?
        uint x,y;
! T+ r! J( P! h- }        for(x=z;x>0;x--)5 |( ~' ?0 ]; a9 P
                for(y=123;y>0;y--);
- H! K/ z! U8 Q/ P& i% U}1 Q* E9 d6 ]! B- z6 `( D6 S& H

6 f+ M' M# m& W- w/********************************************\
! @8 l  J& a! }3 m) e. X' P' E. g5 z|* 功能: 延时        晶振为12M时                                    *|% g2 K" Y1 |, f
|*  t = 1 为 20us  然后成倍增加10us左右                *|' X% @1 w, T5 k7 @' P& H
\********************************************/% E. H2 |( x3 A; u
void Delay_N10us(unsigned char t). T* g, g1 ]4 I* k
{
5 D, W0 X0 s  N. c8 V9 C! X# }: T    while(t--)
8 [8 U8 k/ v" t* B# m3 b   {
3 i3 H8 V1 U# w: E  h, i# S/ T            _nop_();1 x" j0 R7 m' ?/ |4 M) L
   }
7 g+ w, N! G9 p- c% T( ^3 J}
, u5 y, ^" W( x. z( A+ a/********************************************\# U! L, k: {3 ^
|* 功能: 延时        晶振为12M时                                        *|
" N# k! r3 q0 C8 L4 q8 U0 S+ _|* 延时大约 1ms                                                            *|( n/ l( t& V4 Y; s' o
\********************************************/
3 \# C/ J2 m4 J  k' M& Bvoid Delay_N1ms(unsigned int t)
7 ]+ {- v2 v1 q" u{
) [% R; y0 l& n. D' T2 V& g/ B  unsigned int i;
8 G: u1 N: t3 T/ }3 i; N  unsigned int j;/ z( W# ?* {1 ?6 v* m! |7 A
  for(j=t;j>0;j--)
2 _% x! n2 H3 l  N     for(i=124;i>0;i--);  //延时大约 1ms
( G8 }" b- l, s" h6 \* O}
9 |+ u$ i# M/ Wvoid write_com(uchar com)
/ |- h% |4 X& h+ n; [/ @{# }  k  X% X+ k0 y
        lcdrs=0;
' n! r+ J. u/ {, s  ~: O8 C        P0=com;5 T  h7 I" s) ]# v  J5 L
        lcden=1;& I. O# J7 N9 I7 T. D* I1 B
        delay(5);$ K0 _/ u+ i. G7 E$ S& h* S' K( o" h
        lcden=0;
4 C% h( O4 k7 ?7 V3 r}0 P8 W) Z4 B( W3 y. u7 A/ H2 i* w- H
void write_date(uchar date)
. n8 O9 c8 {# {, c9 P% ?5 i* W{! \' v4 _1 I/ T' Y
        lcdrs=1;
7 H' s/ S$ \; E7 R' R% z4 v        P0=date;
, S; y. K+ O' u, W( f        lcden=1;
+ g( k- @$ T% Z2 e- X4 J( O) ?        delay(5);( |9 ?* H/ T* e: |$ H* t
        lcden=0;+ w1 u- _  R8 j5 k
}$ B8 n' H4 f+ D% D  {$ l, b
void diyihang(uint z)
5 W. x( Y& E1 E2 a- o8 g: L{/ z$ N, [5 ?( g  V7 F7 S$ Z$ n
        z--;
7 E1 s$ I. U  `' v' Q        write_com(0x80+z);
0 C2 g* c. S7 `1 r% B2 S6 x}           
8 c! @+ E! w6 \, g$ m4 l. s6 K/ Z0 {) cvoid dierhang(uint z), Q: r! r1 s6 X! Z( x+ Y: |5 F
{
# a7 B$ \, s+ h3 |$ N% W! m1 Q        z--;
2 u# p) ~7 H0 w4 f        write_com(0x80+0x40+z);/ R- o; }; W( e# Z
}: s# q0 u0 D8 |2 @& H
void init_1602()
# |0 N( n/ L# A# `8 i" I+ J" A{
; v6 m6 O4 J! v+ ?; D8 `        lcdwr=0;8 G! j3 p9 b/ [
        lcden=0;
: J+ j' w2 b0 x        write_com(0x38);//模式! `- F. j3 O1 J# Y" B! R- _# {- D
        write_com(0x0c);//无光标不闪8 q- \) q: U, V
        write_com(0x01);//清屏
% \* Y0 k! M, e5 s        diyihang(1);//显示位置6 R: G+ t& |' }0 e5 M% T
        for(num=0;num<11;num++)
5 D% E$ V7 x( r        {! C- U  G2 [! c& {, Z$ s6 Z. E
                write_date(table[num]);
- T( f6 X2 N: ]2 m# r& d$ _                //delay(10);
7 a2 _+ F) j1 T# W* C. B) g% q; G        }" r# i0 Z# e7 Y2 k* M
        dierhang(1);//换行显示
) t9 ^- R) q0 ?7 c        for(num=0;num<10;num++): m( Y$ p7 ^6 z, U$ w7 F; w, s
        {# ]4 z$ Z5 W. s$ o. i0 F! C3 L
                write_date(table1[num]);               
3 V/ R/ y3 s0 N# a  K. n, O- L                //delay(10);
* m% \* q( V7 t! w- x        }
! l, p: O0 G! x9 d2 ]8 p2 n; U5 L$ Q}7 d3 m+ W: B; I5 H( f) J6 e
void Clear_Data (void)
5 t$ E# I+ ~9 o1 B+ F{9 E: g5 [/ \( ]) x$ b* a8 _
        int i;
, f# T2 {4 B2 z, U        for(i=0;i<5;i++)8 P5 ^; O8 |3 K' y9 S; U
        {
  q. Q$ H& u  K- ~- R6 U/ F/ \" H           Sensor_Data = 0x00;
0 P7 ?5 F( o- A9 T$ f8 V9 I        }//接收数据清零
( E: f" X3 D# Q. J* }}
- B9 p8 o1 b7 b2 D1 G3 v* f. G& c) g1 w. f

9 }# y1 Z. E# z# A5 c/********************************************\
2 n. |# T  g' z/ T% |- F7 g# Z|* 功能: 读传感器发送的单个字节                *|
4 J/ u& }/ O: K1 H$ j6 D" a+ {\********************************************/
5 D7 ~& z3 `( B5 S8 F3 kunsigned char Read_SensorData(void): o: o$ _' L% C1 ~2 ~
{
$ e% ~8 @! @& Q5 A+ c4 |        unsigned char i,cnt;) Q* Y6 `# G3 e* l) ^+ D/ Y. R
        unsigned char buffer,tmp;8 }; X' K! q. L
        buffer = 0;) l# y* Z" T" R6 e$ _5 ~
        for(i=0;i<8;i++)
2 C! l3 B# I) n5 {7 Z4 W! U        {
  n0 ]; T* T" _* N- k( [( B7 N  K                cnt=0;
+ d- p/ o8 h6 i# q, @# M                while(!Sensor_SDA)        //检测上次低电平是否结束- Z! i! S% W8 P2 G
                {
* D# Z0 m4 I. U                  if(++cnt >= 300)6 I: _) M& l4 {# @' m5 f( q# Y
                   {6 d* i- T& v: b; u
                          break;
! O1 n$ x4 Z: ^; v- D7 `                   }
1 _$ J' Y7 H1 W* R                }0 `9 V* b. ]' s5 P" \0 K6 }( e7 _; F
                //延时Min=26us Max50us 跳过数据"0" 的高电平
  I8 i4 M( M) }4 _1 e; ?                Delay_N10us(2);         //延时30us   
/ Q1 E5 w" m! _( G. [; d" T: I. t: S
                //判断传感器发送数据位
3 X" l! J* h# f# z! w; O5 j4 Z                tmp =0;
7 T8 W0 ~; i) \' a                if(Sensor_SDA)         
0 }7 |/ C( U/ V$ Y( H                {
) x) R* v3 Z; c: A8 |! w                  tmp = 1;
, A+ r4 N- ^0 c) ?* P                }  
$ F& E6 [6 A! m5 R                cnt =0;
9 }, j% X, ^8 B/ i3 |                while(Sensor_SDA)                //等待高电平 结束
, |, q  |$ z3 P2 e  {4 ]1 l                {# J4 |- d3 |* S; m  Z% a* e% @
                           if(++cnt >= 200)4 \/ |- [% m. F# L8 c% ^' ^
                        {9 b1 f8 r* W2 ^8 r+ J
                          break;5 S2 ~% f; d- n  T
                        }3 U& D0 g' E0 P2 b" j! {1 [1 i
                }3 k+ p! M, B$ l6 e7 q: S' b
                buffer <<=1;
- R6 w7 R6 i9 T- E                buffer |= tmp;        * |( X1 e" X2 I/ h: c
        }( \6 t9 S. Q* F& y: Q
        return buffer;
& J) w/ r) x4 ~" _8 J5 C  }( Z' J, h) D' v* Z: I3 i
. J; k! G5 l* j7 k4 I; g" `8 V8 Y
/********************************************\3 L+ H! I" ^7 z) H3 z; H
|* 功能: 读传感器                              *|
: D9 b7 \& w7 ^/ T7 F\********************************************/$ g( P, j9 ?$ ?. C- x6 y! ?
unsigned char Read_Sensor(void); @, ^  z- K- B' d) D  }
{        % t* h; o- L" S( u( d4 |$ l4 ]
        unsigned char i;/ E7 L+ ]2 [- Y0 n* B
        //主机拉低(Min=800US Max=20Ms)
# I( h2 B* a; |% C# ~    Sensor_SDA = 0;! J# h# ?. N( h! f; f- z( E
        Delay_N1ms(2);  //延时2Ms
" b0 c. a2 m& u% f1 ^; _, ^3 n" w7 E6 H. K
        //释放总线 延时(Min=30us Max=50us)
( r) b# z/ G6 {7 H# N6 @. h        Sensor_SDA = 1;         4 t& N. j. U4 H3 D5 [* C
        Delay_N10us(1);//延时30us+ @! _0 `$ u4 e2 w
        //主机设为输入 判断传感器响应信号 % e. L; H; q- \* m$ x
        Sensor_SDA = 1;
. k; t4 l' [- B! ]5 F2 `+ w) b" C* b5 s: O5 M6 H3 m6 J
        Sensor_AnswerFlag = 0;  // 传感器响应标志         
7 M! B% U% d1 a. D
  D$ A- V8 j# m# c- P0 ~! u- ^& C        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行         
; I! S  J  K0 p( l& V        if(Sensor_SDA == 0)& n! {0 R+ c  `/ O9 b4 V+ a
        {7 w; b! X! y0 d$ a/ U8 V( |
           Sensor_AnswerFlag = 1;//收到起始信号
! X5 g% @  z/ N% _$ {- t, {
/ m7 M- N8 R+ g( |2 [           Sys_CNT = 0;: L% l8 r9 Y7 ]0 G( H1 J- E4 V
           //判断从机是否发出 80us 的低电平响应信号是否结束         
6 _' |" j& p& a' a& ^! D, G, x           while((!Sensor_SDA))
! ]+ l" \" ?" f' o, ?* q# E           {' |5 [; j6 b5 j
             if(++Sys_CNT>300) //防止进入死循环
+ r. A5 P8 z. f/ W* T8 W0 ^                 {7 k& Z+ i7 S1 B8 |
                   Sensor_ErrorFlag = 1;
6 f- Y( C; z4 N/ v9 J                   return 0;
% q" B, F( ~9 j2 k3 @                 } ; D+ _7 z) s" D3 ~+ H
           }
+ \/ ]$ Z' f# Z* g5 C/ u# c5 b: n+ P$ k# N# [' m
            Sys_CNT = 0;+ D! ^) a; J3 L& i/ n2 ]( o
            //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态5 U; x: p0 |! c, M/ Z; Y
            while((Sensor_SDA))
# |' R; m9 L/ Z" t3 n            {1 [- |- p0 M- n! r
               if(++Sys_CNT>300) //防止进入死循环% I" t; s: e  \* U  d3 M, S; c
                   {
/ C) h5 P1 U7 C4 }  D                     Sensor_ErrorFlag = 1;
& C- h) g4 {2 v( P1 a# u                     return 0;
2 F* P0 P1 J! [( x/ |5 c                   }
) w( W  ~9 O0 t# F            }                  : E$ b2 V. R% q* D8 _
            // 数据接收        传感器共发送40位数据
' U! N7 e$ L3 T" C( ]' [            // 即5个字节 高位先送  5个字节分别为湿度高位 湿度低位 温度高位 温度低位 校验和
  O3 m! l# y4 i8 l! _            // 校验和为:湿度高位+湿度低位+温度高位+温度低位
! Y+ R0 J$ h3 a& u& E5 D            for(i=0;i<5;i++)( ], x/ x- H1 U* ?9 R5 \1 U
            {3 L; \. e2 K' P
              Sensor_Data = Read_SensorData();
: D5 ^/ `* C' G            }, A1 m! O' Y6 O
        }
# K7 q3 D$ C9 i2 X& ^, ^        else! s/ O+ T$ Q7 K2 e# ~
        {
& j" k! {0 u$ A! [+ _+ S          Sensor_AnswerFlag = 0;          // 未收到传感器响应        
" b5 B6 g5 [) v" K. Q; g        }% f+ R/ g! U$ |9 }1 f& C6 {- R( X% [
        return 1;' d+ f% J7 i, t% K3 G! |6 C
}% n, A1 k# q; ]" ?2 o
void display()- l8 ^- r: X; p8 ?4 Y' ]0 E
{
/ M1 B5 q: y* X# r$ s$ q% F        Tmp = Sensor_Data[2]*256+Sensor_Data[3];: X  |& U4 E, o
        diyihang(6);
! M7 }% A' x: ?$ y' U( _* l        /*write_date(Tmp/100%10 + '0');0 o$ ?7 k$ ^9 |3 J4 s
        write_date(Tmp/10%10 + '0');( z7 k9 j0 C" \! s/ I* t
        write_date('.');
& M5 B& i) y4 c) J' g: t        write_date(Tmp%10 + '0'); */# R8 N0 Z3 A: Y1 [/ a! b# x- Y
( L; M- y$ G/ x7 V
        Tmp = Sensor_Data[0]*256+Sensor_Data[1];$ A+ ?3 ], O' T$ B2 \* b9 D+ F% u; e) g
        dierhang(6);
" Y* R% S/ X8 O- L0 g2 O( C        write_date(Tmp/100%10 + '0');
: a! i. J& ?- w4 ?, O$ z$ \        write_date(Tmp/10%10 + '0');+ L8 _8 U4 z  {6 L5 c2 Z1 I1 B6 E
        write_date('.');4 s9 n; A4 Q& z+ V) ^$ i7 o1 l. l
        write_date(Tmp%10 + '0');! y/ d9 b/ @" p# m9 Q
}0 y( Z2 T, L; y# I! B( Q! L
void check_and_display()
- w' @( W& b) e4 Q9 Z{
+ W' q9 U; F( U9 j. B9 t* ]        if(Sensor_AnswerFlag == 1)
, n$ h" y3 o' x# C" O) J, V/ x- T$ j# C        {
2 L# ]2 J! e+ a: o, _                Sensor_Check = Sensor_Data[0]+Sensor_Data[1]+Sensor_Data[2]+Sensor_Data[3];
: W+ n" Z# T. C3 Y, J2 {                //校验成功5 Q7 q( T2 Q$ A- a6 q* Z
                if(Sensor_Check ==Sensor_Data[4])        
7 G; o  e1 A% b: F6 |' w  b                {" C+ W% U5 P& J. o! w  }
                        if(flag == 1)
. }" o$ `+ l4 ^4 g/ ^                        {
9 A. x$ _2 q* y3 q/ p% }                                flag = 0;' \7 I8 i2 ]! I( ^6 i. F, ]/ R
                                write_com(0x01);//清屏1 ?* C$ G) L6 @' x
                                diyihang(1);//显示位置5 |' \+ r: q! |6 t
                                for(num=0;num<11;num++)
% x, E. w+ h% w9 g                                {
* N: N# l, o3 B9 H                                        write_date(table[num]);4 I. l7 b* ^  Z4 K# O
                                        //delay(10);
! Y' f7 s) l: K' g! F                                }
* H( \% W6 j* r* w: U/ Y                                dierhang(1);//换行显示! c' J+ Y0 \6 D5 k$ p: ~( P
                                for(num=0;num<10;num++)8 ]8 J% m9 d! ?, B9 _0 d
                                {+ B9 y% `: \" q8 k/ B7 N  O
                                        write_date(table1[num]);               
# m' Y$ L3 @: b, a; f                                        //delay(10);
; f% Y: u# ^" e6 c( M. A' U                                }# o: R: A: c; C4 `1 D
                        }2 t4 l0 d8 [/ H5 x
                        display();
- s2 \0 j9 @( F1 _                }
& X" K& n4 n8 n3 n5 J                else        //校验失败6 d! i% t& r  p9 [; I2 Z
                {2 M" Z9 X7 [: k0 S$ D
                         write_com(0x01);//清屏
# G) z  _0 E& y7 q                        diyihang(1);//显示位置
. f5 f2 c. e' F; P3 I; y                        for(num=0;num<11;num++)! w% h! s6 A/ F2 p
                        {
7 @& Z- U$ V0 L4 V8 M                                write_date(table4[num]);
  C# i* U- n% H8 O                                //delay(10);8 `+ a9 I5 {4 F
                        }' p! U$ h. \6 O; t2 L! ?, a9 P& l
                        flag=1;9 O6 t* y3 C! |0 B
                }1 u2 h! _' h, d3 J9 X
        }
/ d% P. L. Q9 F* r            else    //没有连接上% f/ S1 K) V* B% ?2 S: u( O
    {
& Y5 L# c# S# j& _    key_set=0;/ f; N$ ^/ P: r% y* s
        write_com(0x01);//清屏# J" D  ~. ?  S/ U1 L
        diyihang(1);//显示位置
. J7 |2 l/ ^. L- B        for(num=0;num<10;num++)- W& M, I" U* ^+ Q# w
        {
. @. P& U2 v: R- R            write_date(table2[num]);" f, ]3 ?( f% f, v. e
            //delay(10);
- W- C) {( q7 w9 D2 v) s& N$ `        }- _" ^& l+ J$ U9 u" P* Q
        dierhang(1);//换行显示' l* v$ Q% B3 T8 [( i
        for(num=0;num<9;num++)1 v8 ^% m. z9 _
        {, v  K& S1 [+ \/ ^
            write_date(table3[num]);        : ?1 `5 ?2 `1 l; O9 \/ K
            //delay(10);0 [( ^4 S- h; B) @5 q/ \
        }" W* F! e$ Y6 n0 }7 j3 v4 I8 E
        flag=1;
3 q. x1 {) x) ?7 \- U/ l+ U    }    * k: W# X+ b8 c) S0 b; _1 x+ _
}, k$ w9 R$ M  H7 O/ z0 G

1 ?5 A( d9 M# ~- Z: j4 C/*void init_t0()9 D* }4 G3 k1 J' B  V2 M2 W) Z
{
8 p4 s( g$ d1 {# b8 k' \    TMOD=0x01;
/ q7 y( m2 v9 C9 D    TH0=(65536-50000)/256;$ _  d! ]; r9 Y1 ~9 p* L
    TL0=(65536-50000)%256;, e" r& i' W. S! G9 P
    EA=1;
: {: c3 O; E: L+ z; w7 ^( n3 t    ET0=1;
2 R2 |7 y1 h& \0 ]    TR0=1;
9 S0 X* I  M# B}*/! W! L1 K  u. d

2 o4 d2 @/ _1 s8 G: w% B- V% U% mvoid main()
! B& c0 c) o+ Y' z/ G{5 L7 X! p. {5 N7 @( }& g4 U8 e! k7 a
    init_1602();
, g- f8 N' ], S3 ^: N    while(1)
- A3 D/ C( H& {. d, p    {9 t$ ], {* ^/ R% l, f$ \) A/ h
        Delay_N1ms(2000);      // 延时 2S(两次读取间隔至少2S); w8 Q) F# [/ q
        Clear_Data();         // 清除收到数据: ?0 [( L. r- H$ ?, B7 V4 {
        Read_Sensor();          // 读取传感器数据
. }7 u* U; N! R; b        check_and_display();  // 检测并显示数据   
' |9 Y8 W& i3 c! ]0 V  I0 }    }- D! f! |8 K8 G" h
}
9 ^. j4 G! Y8 M1 f…………3 U& j3 G" U; A! U( M
…………限于本文篇幅 余下代码请从
eda365.com下载附件…………
/ O% U8 E# Y. R" F: U" w1 T
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 09:33 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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