基于WIFI模块和单片机的无线数据传输附代码


    计算机科学技术学院

    Project3课程设计

    20142015学年第二学期

    班 级: 浦电子
    组员姓名:
    组员学号:
    指导老师:


    2015年X月X日

    目 录
    第章 阶段务
    第二章 基WIFI模块线数传输原理
    11 时钟模块
    12 单片机系统原理
    13 温度传感器DS18B20
    14 串口
    15 WIFI模块
    第三章 基WIFI模块线数传输实现
      21 WIFI模块设置
    22 串口部分设置
    23 调试运行程
    第四章 程序框图
    第五章 结






















    第章 阶段务:
    第阶段
    (1天)1解课程WIFI模块详细研读说明书
    2复单片机知识

    (2天)1解温湿度传感器模块设计硬件模块
    2解lcd1602显示模块设计硬件模块
    (2天)1设计整合电路:5v转33v电路
    2串口通讯电路

    第二阶段
    (4天) 1链接完成整体电路图设计检查
    2焊接电路调试
    第三阶段
    (3天)1根设计硬件模块设计程序
    (1):温湿度传感器模块
    (2):串口通讯模块
    (3):WIFI传输接收模块
    (4):显示电路模块

    (3天)2设计模块程序烧录单片机调试
    第四阶段:2天

    (2天)写报告

    第二章 基WIFI模块线数传输原理
    1.1时钟DS1302模块:
    电路原理图:DS1302单片机连接仅需3条线:CE引脚SCLK串行时钟引脚IO串行数引脚Vcc2备电源外接32768kHz晶振芯片提供计时脉



    读写时序说明:DS1302SPI总线驱动方式仅寄存器写入控制字需读取相应寄存器数控制字总低位开始输出控制字指令输入SCLK时钟升时数写入DS1302数输入低位(
    0位)开始样紧8位控制字指令SCLK脉降读出DS1302数读出数低位高位数读写时序图


























    1.2单片机系统原理:



    说明
    复位电路电容串联电阻构成图结合电容电压突变性质知道系统电RST脚会出现高电高电持续时间电路RC值决定典型51单片机RST脚高电持续两机器周期复位适组合RC取值保证复位

    晶振电路典型晶振取110592MHz(准确9600波特率19200波特率串口通讯场合)12MHz(产生精确uS级时歇方便定时操作)
    单片机片AT89S515251系列兼容单片机
    特注意31脚(EAVpp)接高电时单片机复位部ROM0000H开始执行接低电时复位直接外部ROM0000H开始执行

    1.3温度传感器DS18B20原理(连接单片机系统温度发送WIFI模块):
    311 DS18B20性特点
    (1) 独特单线接口方式需接口引脚通信
    (2) DS18B20唯64位ROM序列码
    (3) 中需外围元件
    (4) 数线供电电压范围+30V+55 V
    (5) 测温范围55℃ +125℃10℃+85℃范围精度+05℃分辨率00625℃
    (6) 通编程实现912位数字读数方式温度转换成12位数字信号需时间长750ms9位分辩模式工作时仅需9375ms
    (7) 户设定非易失性报警限值
    (8) 告警搜索命令识定位超报警限值DS18B20
    (9) DS18B20联惟三线实现点测温
    (10)电源极性接反时DS18B20会发热烧毁正常工作
    312 DS18B20部存储器温度数格式
    DS18B20部存储器结构(图31)包括暂存RAM非易失性电擦EERAM者存放报警限THTL改变THT L中值时数首先写进暂存器第二三字节中机读出中容进行验证果正确机发送复制暂存器命令暂存器第二三字节复制THTL中样处理利确保该数单总线传输完整性[7]
    暂存器结构 EERAM结构
    温度低字节 (BYTE0)
    温度高字节 (BYTE1)
    限报警温度TH(BYTE2)
    限报警温度TL(BYTE3)
    结构寄存器 (BYTE4)
    保留 (BYTE5)
    保留 (BYTE6)
    保留 (BYTE7)
    CRC ( BYTE8)
    TH

    TL

    结构寄存器




    图31 DS18B20结构框图
    暂存存储器作单线通信时确保数完整性8字节组成头两字节表示测温度读数12位转化例说明温度高低字节存放形式(温度存储形式表31)计算:12位转化12位数存储18B20两高低8位RAM中二进制中前面5位符号位果测温度05位0测数值00625实际温度果温度05位1测数值需取反加100625实际温度[8]
    表31 温度存储形式
    高8位
    S
    S
    S
    S
    S
    26
    25
    24
    低8位
    23
    22
    21
    20
    21
    22
    23
    24
    S1时表示温度负S0时表示温度正余低位二进制补码形式表示低位1时表示00625℃ 温度数字应关系表32示
    表32 DS18B20温度数字应关系表
    温度(℃)
    输出二进制码
    应十六进制码
    +125
    0000 0111 1101 0000
    07D0H
    +85
    0000 0101 0101 0000
    0550H
    +250625
    0000 0001 1001 0001
    0191H
    +10125
    0000 0000 1010 0010
    00A2H
    +05
    0000 0000 0000 1000
    0008H
    0
    0000 0000 0000 0000
    0000H
    05
    1111 1111 1111 1000
    FFF8H
    10125
    1111 1111 0110 1110
    FF5EH
    250625
    1111 1110 0110 1111
    FF6FH
    55
    1111 1100 1001 0000
    FC90H
    DS18B20六条控制命令表33示:
    表33 控制命令
    指    令
    约定代码
    操      作    说      明
    温度转换
    44H
    启动DS18B20进行温度转换
    读暂存器
    BEH
    读暂存器9字节容
    写暂存器
    4EH
    数写入暂存器THTL字节
    复制暂存器
    48H
    暂存器THTL字节写E2RAM中
    重新调E2RAM
    B8H
    E2RAM中THTL字节写暂存器THTL字节
    读电源供电方式
    B4H
    启动DS18B20发送电源供电方式信号CPU
    313 DS18B20操作命令时序特性
    DS18B20读写数位着严格时序求根IO线读写数时DS18B20保证位数传输正确性完整性着严格通信协议DS18B20步操作遵循严格工作时序通信协议机控制DS18B20完成温度转换程根DS18B20通讯协议须三步骤:次读写前DS18B20进行复位复位成功发送条ROM指令发送RAM指令样DS18B20进行预定操作 该协议定义种信号时序:初始化时序读时序写时序时序机作设备单总线器件作设备次命令数传输机动启动写时序开始果单总线器件送回数进行写命令机需启动读时序完成数接收外数命令传输低位先[9]
    (1)DS18B20复位时序
    机控制DS18B20完成操作前必须先初始化机发复位脉(短480µs低电)接着机释放总线进入接收状态DS18B20检测I0引脚升等15~60µs然发出存脉(60~240)µs低电图32示
    (2)DS18B20读时序
    DS18B20读时序分读0时序读1时序两程DS18B20读时序机单总线拉低15秒释放单总线DS18B20数传输单总线DS18B20完成读时序程少需60µs图33示

    图32 DS18B20复位时序

    图33 DS18B20读时序
    (3)DS18B20写时序
    DS18B20写时序读时序样然分写0时序写1时序两程
    DS18B20写0时序写1时序求写0时序时单总线拉低少60µs保证DS18B20够15µs45µs间正确采样IO总线0电写1时序时单总线拉低15µs释放单总线图34示

    图34 DS18B20写时序
    DS18B20通讯协议知机控制DS18B20完成温度转换程必须三步骤:次读写前DS18B20进行复位复位成功发送条ROM指令发送RAM指令DS18B20进行预定操作复位求CPU数线拉500µs然释放DS18B20收信号等16~60µs左右然发出60~240µs存低脉CPU收信号表示复位成功


















    1.4串口部分(WIFI电脑单片机进行通讯)

    串口原理图:

    80C51串行口结构图:


    80C51串行口工作方式 :
    方式1
    方式110位数异步通信口TXD数发送引脚RXD数接收引脚传送帧数格式图示中1位起始位8位数位1位停止位

    1 方式1输出
    方式1输入
    软件置REN1时接收器选择波特率16倍速率采样RXD引脚电检测RXD引脚输入电发生负跳变时说明起始位效移入输入移位寄存器开始接收帧信息余位接收程中数输入移位寄存器右边移入起始位移输入移位寄存器左边时控制电路进行次移位RI0SM20(接收停止位1)时接收9位数前8位数装入接收SBUF第9位(停止位)进入RB8置RI1CPU请求中断
    始位1位数9位(含1位附加第9位发送时SCON中TB8接收时RB8)停止位1位帧数11位方式2波特率固定晶振频率164132方式3波特率定时器T1溢出率决定
    1.5WIFI模块:


    接口:
    1 电源接口
    系统采标准电源插座外径55mm径21mm标准尺寸正外负输入电压范围5~48V电流350mA
    2 指示灯

    ID
    名称
    描述
    1
    Power
    设备供电亮
    2
    Ready
    部Linux系统启动完成亮
    3
    Link
    网络连接建立亮
    4
    RXD
    设备串口收数闪烁
    5
    TXD
    设备通串口外发送数时闪烁
    23 RS232接口
    设备串口公口(针)RS232 电(直接连电脑串口电)引脚序计算机COM 口保持致电脑连接时需交叉线(23 交叉78 交叉55 直连78 接定直连电脑否导致工作正常)6 根线定义余悬空
    序号
    名称
         描述 
    2
    RXD
      设备数接收引脚
    3
    TXD
      设备数发送引脚

    GND
      信号

     RTS
      请求发送

       CTS
      清发送

       VCC
    默认未PCB 焊盘跳线需时设备电源输入正极连接串口传感器供电者外部通串口线设备供电
    第三章 基WiFi模块线传输实现
    21 WIFI模块设置





    22串口部分设置










    23调试:



    运行程:
    单片机首先运行然DS18B20DS1302LCD1602进行初始化接着DS18B20DS1302进行写设置读取温度时间单片机处理数LCD1602显示单片机进行串口初始化通串口程序温度时间准备等串口接收相应信号发送数程序检测温度温度超设定值(值通终端修改)发出报警信号蜂鸣器报警温度降(通终端开降温系统)蜂鸣器关闭


    第五章 程序框图

    程序:
    #include
    #include
    #include

    #define uchar unsigned char
    #define uint unsigned int
    sbit DQP2^0
    sbit lcdenP3^4
    sbit lcdrsP3^5
    sbit dulaP2^6
    sbit welaP2^7
    sbit ledP1^0
    sbit sclkP1^4 时钟信号线
    sbit ioP1^5 信号线
    sbit ceP1^6 片选RST
    sbit buzzP2^3
    sbit ledleP2^5


    unsigned int temptemp1temp2temperxsflagascc
    unsigned char j
    uchar code day[]1234567
    uchar shifenmiaonianyueri
    uchar cdflag
    uchar code number[]0123456789
    sbit ACC0 ACC^0 定义寄存器ACC零位
    sbit ACC7 ACC^7


    void delay1(unsigned int m)
    {
    unsigned int ij
    for(imi>0i)
    for(j110j>0j)
    }

    void delay(unsigned int m)
    {
    while(m)
    }


    ************************DS18B20程序**********************************************
    void Init_DS18B20()
    {
    unsigned char x0
    DQ1
    delay(8)
    DQ0
    delay(80)
    DQ1
    delay(4)
    xDQ
    delay(20)
    }
    uchar ReadOneChar()
    {
    unsigned char i0
    unsigned char dat0
    for(i8i>0i)
    {
    DQ0
    dat>>1
    DQ1
    if(DQ)
    dat|0x80
    delay(4)
    }
    return(dat)
    }
    void WriteOneChar(unsigned char dat)
    {
    unsigned char i0
    for(i8i>0i)
    {
    DQ0
    DQdat&0x01
    delay(5)
    DQ1
    dat>>1
    }
    }
    void duwendu()
    {
    unsigned char a0
    unsigned char b0
    Init_DS18B20()
    WriteOneChar(0xcc)
    WriteOneChar(0x44)
    delay(5)
    Init_DS18B20()
    WriteOneChar(0xcc)
    WriteOneChar(0xbe)
    delay(5)
    aReadOneChar()
    bReadOneChar()
    temp1(b<<4)&0x7f 高四位正负位


    temp1+(a&0xf0)>>4 位
    temp2a&0x0f 数
    temp((b*256+a)>>4) 整数
    xstemp2*00625*10
    tempertemp+xs
    }


    ****************************************lcd程序******************************************************************
    void write_com(uchar com)
    {
    lcdrs0
    P0com
    delay(5)
    lcden1
    delay(5)
    lcden0
    }

    void write_data(uchar date)
    {
    lcdrs1
    P0date
    delay(5)
    lcden1
    delay(5)
    lcden0
    }

    ******************************************************************** 串口初始化 *********************************


    void ckinit()
    {
    TMOD0x20设置定时器1工作方式2
    TH10xfa
    TL10xfa
    TR11
    REN1 允许串行接收
    SM00
    SM11 工作方式1
    SCON0x50
    PCON0x80 波特率加倍
    EA1
    ES1

    }


    ******************************************************************************************************
    LCD1602初始化 *****************************************************************************
    void lcdinit()
    {
    dula0
    wela0
    ledle0
    lcden0
    write_com(0x38)
    write_com(0x0e)
    write_com(0x06)
    write_com(0x01)
    write_com(0x80+0x10)
    }

    ***************************************
    ************* 温度显示
    *********************************
    void display()
    {
    write_com(0x80+0x40)
    write_data(number[temper100])
    write_data(number[temp10])
    write_data(number[temp10])
    write_data('')
    write_data(number[xs10])
    write_data('C')

    }

    void fas(unsigned char dat)
    {
    ES0 串口中断允许位
    SBUFdat
    while(TI)
    TI0
    ES1
    }
    ********************************************************************
    发送字符串函数 *********************************
    void fss(unsigned char *str)
    {
    uchar bi
    bstrlen(str)
    for(i0i {
    fas(*str)
    str++
    }
    }

    ******************************************************************** DS1302写字节程序 *********************************
    void write_ds1302_byte(uchar add) DS1302写字节数
    {
    uchar i
    ACC add

    for(i8 i>0 i)
    {
    io ACC0 低位数传输IO
    sclk 1 时钟拉高读走数
    sclk 0 时钟拉低允许数变化
    ACC ACC >> 1 ACC右移位然低位传送
    }
    }


    ******************************************************************** DS1302读字节 *********************************
    uchar read_ds1302_byte() 读DS1302字节
    {
    uchar i

    for(i8 i>0 i)
    {
    ACC ACC >>1 特说明读回数低位高位
    ACC7 io 读回数存ACC寄存器高位然移低位
    sclk 1
    sclk 0
    }

    return ACC
    }



    ******************************************************************** DS1302写址数 *********************************
    void write_ds1302(uchar add uchar dat)写意址意数
    {
    ce0 根时序图编写
    sclk0
    ce1 片选开

    write_ds1302_byte(add)
    write_ds1302_byte(dat)

    io0 释放总线
    sclk0 时钟释放
    ce0 片选关闭
    }

    ******************************************************************** DS1302读址数 返回值:时间 *********************************

    uchar read_ds1302(uchar add) 读意址数
    {
    uchar temp

    ce0
    sclk0
    ce1 片选开

    write_ds1302_byte(add)
    tempread_ds1302_byte()

    sclk0 时钟释放
    io0 释放总线
    ce0 片选关闭

    return temp
    }


    ******************************************************************************************************
    ************* 时间显示函数 *********************************

    void dis_sj()
    {

    uchar thtl
    nianread_ds1302(0x8d) 年寄存器
    yueread_ds1302(0x89) 月寄存器
    riread_ds1302(0x87) 日寄存器


    write_com(0x80+0x08) 设置时位置
    thnian>>4
    write_data(number[th]) 刷新年高位
    tlnian&0x0f
    write_data(number[tl]) 刷新年低位

    write_data('')
    thyue>>4
    write_data(number[th])
    tlyue&0x0f
    write_data(number[tl])

    write_data('')
    thri>>4
    write_data(number[th])
    tlri&0x0f
    write_data(number[tl])


    shiread_ds1302(0x85) 时寄存器
    fenread_ds1302(0x83) 分寄存器
    miaoread_ds1302(0x81) 秒寄存器


    write_com(0x80+0x48)
    thshi>>4
    write_data(number[th]) 刷新时高位
    tlshi&0x0f
    write_data(number[tl]) 刷新时低位

    write_data('')
    thfen>>4
    write_data(number[th])
    tlfen&0x0f
    write_data(number[tl])

    write_data('')
    thmiao>>4
    write_data(number[th])
    tlmiao&0x0f
    write_data(number[tl])
    }

    void fssj()
    {
    uchar thtl
    thnian>>4
    fas(number[th])
    tlnian&0x0f
    fas(number[tl])
    fas('')
    thyue>>4
    fas(number[th])
    tlyue&0x0f
    fas(number[tl])
    fas('')
    thri>>4
    fas(number[th])
    tlri&0x0f
    fas(number[tl])

    fss( )
    thshi>>4
    fas(number[th])
    tlshi&0x0f
    fas(number[tl])
    fas('')
    thfen>>4
    fas(number[th])
    tlfen&0x0f
    fas(number[tl])
    fas('')
    thmiao>>4
    fas(number[th])
    tlmiao&0x0f
    fas(number[tl])
    fss( )
    fss(Temp )
    }




    void main()
    {
    ckinit()
    lcdinit()
    cc30

    duwendu()
    delay1(1000)

    while(1)
    {
    duwendu()

    dis_sj()

    duwendu()
    display()
    if(flag1)
    {

    if(a'1')
    {
    fssj()
    fas(number[temp10])
    fas(number[temp10])

    fas('')
    fas(number[xs10])
    fas(' ')
    fas('C')


    }
    if(a'2')
    {
    fas(number[cc10])
    fas(number[cc10])

    fas(' ')
    fas('C')

    }
    if(a'3')
    {
    cc++
    }
    if(a'4')
    {
    cc
    }
    if(a'5')
    {
    P10xff
    ledle1
    P10xfe
    delay1(5)
    ledle0
    }
    if(a'6')
    {
    P10xff
    ledle1
    delay1(5)
    ledle0
    }
    flag0

    }
    if(temp>cc)
    {
    buzz0
    fssj()
    fas(number[temp10])
    fas(number[temp10])

    fas('')
    fas(number[xs10])
    fas(' ')
    fas('C')
    fas(' ')
    fss(warnning)
    delay1(2000)
    if(a'3')
    {
    cc++
    }
    if(a'4')
    {
    cc
    }
    }
    else
    {
    buzz1
    }







    }
    }

    void ser() interrupt 4
    {
    RI0 接收标志位
    flag1
    aSBUF 接收数




    }

    框图:


    第四章 结
    次课程设计中部分功够利实现部分代码法实现功首先出现问题温度报警功DS18B20初始化结束默认温度85度单片机读取温度直接进入报警程序点合理避免初始温度影响初始化程序WHILE循环前加段代码首先读温度时温度85度然延时段时间进入循环紧接着读温度时温度正常温度单片机正常工作然问题通串口发送报警字符时需发送会程序繁琐减弱程序读性时需函数发送字符串然段函数需指针字符串中函数库介方面少没太方法半天学重温C语言基础运STRLEN()函数完成函数设计
    南京工业学课程设计


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 5 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    无线数据传输系统设计

    无线数据传输系统设计无线数据传输系统设计摘 要在信息时代,随着信息工业的飞速发展,无线化成为技术革新的新发展方向。人们交流越来越少,面对面和在线交流越来越多。所以,如人工智能,数据管理系统和各...

    3年前   
    457    0

    监控无线WIFI工程合同

    根据“中华人民共和国合同法”的有关规定,本着平等、互利的原则,甲、乙双方经友好协商,一致同意签订本合同,供双方信守合约。

    4年前   
    1184    0

    基于AT89S51单片机无线传输系统设计毕业设计

    毕业论文(设计) 题 目: 单片机无线传输系统设计 完 成 人: ...

    4年前   
    875    0

    基于单片机的无线点菜餐饮系

    本科生毕业论文(设计) 题 目: ______________ ...

    3周前   
    78    0

    Axelwave列车无线监控与数据传输系统-无线接入解决方案

    Axelwave列车无线监控与数据传输系统-无线接入解决方案  铁路是我国最主要也是最重要的交通手段,中国的铁路列车每年约发送旅客16亿人次。铁路旅客数量多、流动性大、人员情况复杂,如何能够以...

    9年前   
    639    0

    基于单片机的时钟设计

    随着时间的推移,事物的发展越来越趋向于高科技,单片机的出现,受到了社会各界的广泛关注,这是由于单片机具备丰富的功能。单片机的特点为:尺寸小,价格低,抗干扰强,开发容易等。运用的范围也很广,如检测...

    4年前   
    1035    0

    基于单片机的出租车计价器设计(附源程序)

    基于单片机的出租车计价器设计(附源程序)摘 要本设计的是一个基于单片机AT89S52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外...

    2年前   
    280    0

    基于51单片机的定时闹钟设计单片机课程设计

    单片机 课 程 设 计 报 告 院系: 信息工程学院 ...

    2年前   
    497    0

    单片机课程设计报告基于单片机的温控系统

    职业学院机械与电子工程学院基于单片机温控系统课程设计报告班 级 电信班 学生姓名 学 号 指导教...

    3年前   
    997    0

    基于单片机的电子琴设计

    综合课程设计题 目:可演奏的电子琴 学 院:管理科学与工程学院可演奏的电子琴摘要:随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们...

    3周前   
    73    0

    开题报告-基于单片机的交通灯设计

    开题报告电气工程及自动化基于单片机的交通灯设计一、综述本课题国内外研究动态,说明选题的依据和意义当今社会,随着日益增长的社会发展,人们对于社活的水平也日益提高,不仅在物质享受方面有所提高,在精...

    4年前   
    1254    0

    基于单片机的北斗定位系统

    现代社会空巢老人越来越多,老人因意外发生不能及时呼救给健康甚至生命安全带来威胁,因而,老人安全监护受到越来越多的关注。为了解决这一问题,本次设计使用了STC12C5A60S2单片机作为主处理器,...

    3年前   
    1103    0

    基于单片机的数控恒流源设计

    该数控直流恒流源采用模块化,主要由单片机控制模块、键盘输入模块、A/D转换模块、恒流源模块、D/A转换模块和显示模块六部分组成。通过开关和按钮的设置,配合AT89S52单片机的编程实现数字控制及...

    3年前   
    910    0

    基于凌阳单片机的红外通信接口设计

    科 研 训 练 报 告报告题目:基于凌阳单片机的红外通信接口设计姓 名 院(系) 电气与电子工程学院 ...

    2年前   
    394    0

    基于单片机的万年历设计

     基于单片机的万年历设计 二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。此外还可以通过按键...

    3年前   
    681    0

    基于单片机的数字电压表

     基于单片机的数字电压表 摘要:本文介绍一种基于89S52单片机的一种电压测量电路,该电路采用ICL7135高精度、双积分A/D转换电路,测量范围直流0-±2000伏,使用LCD液晶模...

    5年前   
    1053    0

    基于单片机的室内温湿度

    本文采用STC89C52单片机、DHT11传感器、1602LCD显示屏和继电器控制等模块,完成温湿度测试和控制任务,其关键部分为(1)温湿度传感器DHT11实时测试温度、湿度。(2)判断采集的数...

    3年前   
    690    0

    基于单片机的程控放大器设计

     毕业设计(论文) 基于单片机的程控放大器设计 专 业: 电子科学与技术 ...

    5年前   
    1664    0

    基于单片机的智能小车设计开题报告

    电气与信息学院毕业设计(论文)开题报告 基于单片机的智能小车设计 电子 ...

    5个月前   
    310    0

    基于单片机的果实品质分类装置设计

    机器视觉简而言之就是利用摄像头拍摄实际图像,通过摄像头模块自动将图像信息转化为对应的电信号,输送给单片机逻辑处理,以此来达到对图像的智能化识别。果实采摘系统中使用机器视觉较多。

    3年前   
    2074    0

    文档贡献者

    文***享

    贡献于2023-04-06

    下载需要 5 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档