一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3858|回复: 6
收起左侧

[51单片机] 给串口VFD增加GPS模块数据解析,用stc15F104W软件模拟串口好用吗?

[复制链接]
发表于 2013-12-13 21:14 | 显示全部楼层 |阅读模式
想在考拉的串口VFD上直接增加一贴片51单片机用于GPS模块数据的解析,
由该单片机串口接收GPS模块的数据,解析出年月日时分秒,并添加VFD控制命令,
通过串口传给VFD模块。

初步定下来使用8只脚的stc15F104W,贴在PCB的大面积覆铜上,但是该型号没有串口。

请教大家用stc15F104W软件模拟串口好用吗?和带串口的型号相比有什么不同。谢谢大家!





官方例程如下:

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15Fxx 系列 读取程序区ID号并用软件模拟串口输出显示举例--------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/

//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz

#include "reg51.h"

//-----------------------------------------
//define baudrate const
//BAUD = 256 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
//NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)

//#define BAUD        0xF400                  // 1200bps @ 11.0592MHz
//#define BAUD        0xFA00                  // 2400bps @ 11.0592MHz
//#define BAUD        0xFD00                  // 4800bps @ 11.0592MHz
//#define BAUD        0xFE80                  // 9600bps @ 11.0592MHz
//#define BAUD        0xFF40                  //19200bps @ 11.0592MHz
//#define BAUD        0xFFA0                                        //38400bps @ 11.0592MHz

//#define BAUD        0xEC00                  // 1200bps @ 18.432MHz
//#define BAUD        0xF600                  // 2400bps @ 18.432MHz
//#define BAUD        0xFB00                  // 4800bps @ 18.432MHz
//#define BAUD        0xFD80                  // 9600bps @ 18.432MHz
//#define BAUD        0xFEC0                  //19200bps @ 18.432MHz
#define BAUD        0xFF60                  //38400bps @ 18.432MHz

//#define BAUD        0xE800                  // 1200bps @ 22.1184MHz
//#define BAUD        0xF400                  // 2400bps @ 22.1184MHz
//#define BAUD        0xFA00                  // 4800bps @ 22.1184MHz
//#define BAUD        0xFD00                  // 9600bps @ 22.1184MHz
//#define BAUD        0xFE80                  //19200bps @ 22.1184MHz
//#define BAUD        0xFF40                  //38400bps @ 22.1184MHz
//#define BAUD        0xFF80                  //57600bps @ 22.1184MHz

#define ID_ADDR_RAM 0x71                //STC104W系列ID号的存放在RAM区的地址
#define ID_ADDR_ROM 0x0ff9              //STC104W系列ID号的存放在ROM区的地址

sfr AUXR = 0x8E;
sbit RXB = P3^0;                        //define UART TX/RX port
sbit TXB = P3^1;

typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;

BYTE TBUF,RBUF;
BYTE TDAT,RDAT;
BYTE TCNT,RCNT;
BYTE TBIT,RBIT;
BOOL TING,RING;
BOOL TEND,REND;

void UART_INIT();
void UART_SEND(BYTE dat);

BYTE t, r;
BYTE buf[16];

void main()
{
//    BYTE idata *iptr;
    BYTE code *cptr;
    BYTE i;

    TMOD = 0x00;                        //timer0 in 16-bit auto reload mode
    AUXR = 0x80;                        //timer0 working at 1T mode
    TL0 = BAUD;
    TH0 = BAUD>>8;                      //initial timer0 and set reload value
    TR0 = 1;                            //tiemr0 start running
    ET0 = 1;                            //enable timer0 interrupt
    PT0 = 1;                            //improve timer0 interrupt priority
    EA = 1;                             //open global interrupt switch

    UART_INIT();
//    iptr = ID_ADDR_RAM;               //从RAM区读取ID号
//    for (i=0; i<7; i++)               //读7个字节
//    {
//        UART_SEND(*iptr++);           //发送ID到串口
//    }

    cptr = ID_ADDR_ROM;                 //从程序区读取ID号
    for (i=0; i<7; i++)                 //读7个字节
    {
        UART_SEND(*cptr++);             //发送ID到串口
    }

    while (1);
}

//-----------------------------------------
//Timer interrupt routine for UART

void tm0() interrupt 1 using 1
{
    if (RING)
    {
        if (--RCNT == 0)
        {
            RCNT = 3;                   //reset send baudrate counter
            if (--RBIT == 0)
            {
                RBUF = RDAT;            //save the data to RBUF
                RING = 0;               //stop receive
                REND = 1;               //set receive completed flag
            }
            else
            {
                RDAT >>= 1;
                if (RXB) RDAT |= 0x80;        //shift RX data to RX buffer
            }
        }
    }
    else if (!RXB)
    {
        RING = 1;                       //set start receive flag
        RCNT = 4;                       //initial receive baudrate counter
        RBIT = 9;                       //initial receive bit number (8 data bits + 1 stop bit)
    }

    if (--TCNT == 0)
    {
        TCNT = 3;                       //reset send baudrate counter
        if (TING)                       //judge whether sending
        {
            if (TBIT == 0)
            {
                TXB = 0;                //send start bit
                TDAT = TBUF;            //load data from TBUF to TDAT
                TBIT = 9;               //initial send bit number (8 data bits + 1 stop bit)
            }
            else
            {
                TDAT >>= 1;             //shift data to CY
                if (--TBIT == 0)
                {
                    TXB = 1;
                    TING = 0;           //stop send
                    TEND = 1;           //set send completed flag
                }
                else
                {
                    TXB = CY;           //write CY to TX port
                }
            }
        }
    }
}

//-----------------------------------------
//initial UART module variable

void UART_INIT()
{
    TING = 0;
    RING = 0;
    TEND = 1;
    REND = 0;
    TCNT = 0;
    RCNT = 0;
}

//-----------------------------------------
//Send UART data

void UART_SEND(BYTE dat)
{
    while (!TEND);
    TEND = 0;
    TBUF = dat;
    TING = 1;
}


发表于 2013-12-13 22:02 | 显示全部楼层
应该可以的吧~
从GPS那里接受数据,然后发送到屏,一个串口就够啦~
发表于 2013-12-13 22:50 | 显示全部楼层
这个一定要保证时钟精度才行
 楼主| 发表于 2013-12-15 20:55 | 显示全部楼层
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------------------------------*/
/* --- STC15Fxx 系列 软件模拟串口举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序*/
/*----------------------------------------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
//-----------------------------------------
//define baudrate const
//BAUD = 256 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
//NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)
//#define  BAUD  0xF400            // 1200bps @ 11.0592MHz
//#define  BAUD  0xFA00            // 2400bps @ 11.0592MHz
//#define  BAUD  0xFD00            // 4800bps @ 11.0592MHz
//#define BAUD        0xFE80                  // 9600bps @ 11.0592MHz
//#define BAUD        0xFF40                  //19200bps @ 11.0592MHz
//#define  BAUD  0xFFA0  //38400bps @ 11.0592MHz
//#define  BAUD  0xEC00    // 1200bps @ 18.432MHz
//#define  BAUD  0xF600           // 2400bps @ 18.432MHz
//#define  BAUD  0xFB00           // 4800bps @ 18.432MHz
//#define  BAUD  0xFD80           // 9600bps @ 18.432MHz
//#define  BAUD  0xFEC0            //19200bps @ 18.432MHz
#define   BAUD        0xFF60                 //38400bps @ 18.432MHz
//#define  BAUD  0xE800           // 1200bps @ 22.1184MHz
//#define  BAUD  0xF400           // 2400bps @ 22.1184MHz
//#define  BAUD  0xFA00    // 4800bps @ 22.1184MHz
//#define  BAUD  0xFD00           // 9600bps @ 22.1184MHz
//#define  BAUD  0xFE80           //19200bps @ 22.1184MHz
//#define  BAUD  0xFF40           //38400bps @ 22.1184MHz
//#define  BAUD  0xFF80    //57600bps @ 22.1184MHz
sfr   AUXR         =         0x8E;
sbit   RXB         =         P3^0;                 //define UART TX/RX port
sbit   TXB         =         P3^1;
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE   TBUF,  RBUF;
BYTE   TDAT,  RDAT;
BYTE   TCNT,  RCNT;
BYTE   TBIT,  RBIT;
BOOL   TING,  RING;
BOOL   TEND,  REND;
void UART_INIT();
BYTE   t, r;
BYTE   buf[16];
void main()
{
    TMOD = 0x00;        //timer0 in 16-bit auto reload mode
    AUXR = 0x80;        //timer0 working at 1T mode
    TL0 = BAUD;
    TH0 = BAUD>>8;          //initial timer0 and set reload value
    TR0 = 1;        //tiemr0 start running
    ET0 = 1;        //enable timer0 interrupt
    PT0 = 1;        //improve timer0 interrupt priority
    EA = 1;    //open global interrupt switch
    UART_INIT();
    while (1)
    {   //user's function
        if (REND)
        {
            REND = 0;
            buf[r++ & 0x0f] = RBUF;
        }
        if (TEND)
        {
            if (t != r)
            {
                TEND = 0;
                TBUF = buf[t++ & 0x0f];
                TING = 1;
            }
        }
    }
}
//-----------------------------------------
//Timer interrupt routine for UART
void tm0() interrupt 1 using 1
{
    if (RING)
    {
        if (--RCNT == 0)
        {
            RCNT = 3;         //reset send baudrate counter
            if (--RBIT == 0)
            {
                RBUF = RDAT;        //save the data to RBUF
                RING = 0;         //stop receive
                REND = 1;         //set receive completed flag
            }
            else
            {
                RDAT >>= 1;
                if (RXB) RDAT |= 0x80;        //shift RX data to RX buffer
            }
        }
    }
    else if (!RXB)
    {
        RING = 1;         //set start receive flag
        RCNT = 4;         //initial receive baudrate counter
        RBIT = 9;         //initial receive bit number (8 data bits + 1 stop bit)
    }
    if (--TCNT == 0)
    {
        TCNT = 3;         //reset send baudrate counter
        if (TING)         //judge whether sending
        {
            if (TBIT == 0)
            {
                TXB = 0;        //send start bit
                TDAT = TBUF;        //load data from TBUF to TDAT
                TBIT = 9;        //initial send bit number (8 data bits + 1 stop bit)
            }
            else
            {
                TDAT >>= 1;    //shift data to CY
                if (--TBIT == 0)
                {
                    TXB = 1;
                    TING = 0;         //stop send
                    TEND = 1;         //set send completed flag
                }
                else
                {
                    TXB = CY;         //write CY to TX port
                }
            }
        }
    }
}
//-----------------------------------------//initial UART module variable
void UART_INIT()
{
    TING = 0;
    RING = 0;
    TEND = 1;
    REND = 0;
    TCNT = 0;
    RCNT = 0;
}




chuankou.zip (1.73 KB, 下载次数: 946)

发表于 2013-12-15 21:39 | 显示全部楼层
那LZ为什么不用带串口的型号呢
 楼主| 发表于 2013-12-17 19:59 | 显示全部楼层
[ 本帖最后由 灰太狼8888 于 2013-12-17 20:15 编辑 ]\n\n

#include<reg52.h>

sbit GPS_SPD=P1^1;                        //GPS模块接收速率设置
sbit KEY1=P1^0;                                //显示内容分屏切换

char code TIME_AREA= 8;                //时区

//GPS数据存储数组
unsigned char JD[10];                //经度
unsigned char JD_a;                //经度方向
unsigned char WD[9];                //纬度
unsigned char WD_a;                //纬度方向
unsigned char date[6];                //日期
unsigned char time[6];                //时间
unsigned char speed[5]= {'0','0','0','0','0'};                //速度
unsigned char high[6];                //高度
unsigned char angle[5];                //方位角
unsigned char use_sat[2];        //使用的卫星数
unsigned char total_sat[2];        //天空中总卫星数
unsigned char lock;                        //定位状态

//串口中断需要的变量
unsigned char seg_count;        //逗号计数器
unsigned char dot_count;        //小数点计数器
unsigned char byte_count;        //位数计数器
unsigned char cmd_number;        //命令类型
unsigned char mode;                        //0:结束模式,1:命令模式,2:数据模式
unsigned char buf_full;                //1:整句接收完成,相应数据有效。0:缓存数据无效。
unsigned char cmd[5];                //命令类型存储数组

//显示需要的变量
unsigned int dsp_count;                //刷新次数计数器
unsigned char time_count;
bit page;

void sys_init(void);
bit chk_key(void);

main()
{
    unsigned char i;
    char Bhour;
    sys_init();

    lock=1;
    use_sat[0]='0';
    use_sat[1]='0';
    total_sat[0]='0';
    total_sat[1]='0';

    while(1) {
        if(buf_full==0)                                //无GPS信号时
        {
            dsp_count++;
            if(dsp_count>=65000) {
                LCD_cls();                        //清屏
                LCD_write_string(0,0,"No GPS connect..");
                LCD_write_string(0,1,"Please Check..");
                while(buf_full==0);
                LCD_cls();
                dsp_count=0;
            }
        }
        else {                                                //有GPS信号时

            if(chk_key()) {                                //检测到按键切换显示
                page=!page;
                LCD_cls();
            }

            if(!page) {                                                //页面1
                if(buf_full|0x01) {                                //GGA语句
                    if(lock==0) {                                        //如果未定位
                        LCD_write_string(0,0,"*---.--.----  ");
                        LCD_write_string(0,1,"* --.--.----  ");
                    } else {                                                        //如果已定位
                        LCD_write_char(0,0,JD_a);                        //显示经度
                        for(i=0; i<10; i++) {
                            LCD_write_char(i+1,0,JD[i]);
                        }

                        LCD_write_char(0,1,WD_a);                        //显示纬度
                        LCD_write_char(1,1,' ');
                        for(i=0; i<9; i++) {
                            LCD_write_char(i+2,1,WD[i]);
                        }
                    }
                    LCD_write_char(14,1,use_sat[0]);                //显示接收卫星数
                    LCD_write_char(15,1,use_sat[1]);
                    buf_full&=~0x01;
                    dsp_count=0;
                }
                if(buf_full|0x02) {                                //GSV语句
                    LCD_write_char(14,1,total_sat[0]);
                    LCD_write_char(15,1,total_sat[1]);
                    buf_full&=~0x02;
                    dsp_count=0;
                }
                if(buf_full|0x04) {
                    if(lock==0) {                                        //如果未定位
                        LCD_write_string(0,0,"*---.--.----  ");
                        LCD_write_string(0,1,"* --.--.----  ");
                    } else {                                                        //如果已定位
                        LCD_write_char(0,0,JD_a);                        //显示经度
                        for(i=0; i<10; i++) {
                            LCD_write_char(i+1,0,JD[i]);
                        }
                        LCD_write_char(0,1,WD_a);                        //显示纬度
                        LCD_write_char(1,1,' ');
                        for(i=0; i<9; i++) {
                            LCD_write_char(i+2,1,WD[i]);
                        }
                    }
                    LCD_write_char(14,0,use_sat[0]);                //显示接收卫星数
                    LCD_write_char(15,0,use_sat[1]);
                    buf_full&=~0x04;
                    dsp_count=0;
                }
            }
            else {                                                        //页面2
                if(buf_full|0x01) {                                //GGA语句
                    buf_full&=~0x01;
                    dsp_count=0;
                }
                if(buf_full|0x02) {
                    buf_full&=~0x02;
                    dsp_count=0;
                }
                if(buf_full|0x04) {                                //RMC语句
                    Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
                    if(Bhour>=24) {
                        Bhour-=24;
                    } else if(Bhour<0) {
                        Bhour+=24;
                    }

                    LCD_write_char(0,1,date[4]);
                    LCD_write_char(1,1,date[5]);
                    LCD_write_char(2,1,date[2]);
                    LCD_write_char(3,1,date[3]);
                    LCD_write_char(4,1,date[0]);
                    LCD_write_char(5,1,date[1]);

                    LCD_write_char(8,1,Bhour/10+0x30);
                    LCD_write_char(9,1,Bhour%10+0x30);
                    LCD_write_char(10,1,':');
                    LCD_write_char(11,1,time[2]);
                    LCD_write_char(12,1,time[3]);
                    LCD_write_char(13,1,':');
                    LCD_write_char(14,1,time[4]);
                    LCD_write_char(15,1,time[5]);

                    LCD_write_string(5,0,"knot A");

                    if(lock=='0') {                                        //如果未定位
                        LCD_write_string(0,0,"---.-");
                        LCD_write_string(11,0,"---.-");
                    } else {                                                        //已经定位
                        for(i=0; i<5; i++) {                        //knot显示
                            LCD_write_char(i,0,speed[i]);
                        }
                        for(i=0; i<5; i++) {
                            LCD_write_char(11+i,0,angle[i]);
                        }
                    }
                    buf_full&=~0x04;
                    dsp_count=0;
                }
            }

        }
    }
}

bit chk_key(void)
{
    if(!KEY1) {
        delayms(10);
        if(!KEY1) {
            while(!KEY1);
            delayms(10);
            return(1);
        }
    }
    return(0);
}

//系统初始化
void sys_init() {
    unsigned char i;
    SCON = 0x50;         /* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD = 0x21;         /* TMOD: timer 1, mode 2, 8-bit reload */
    if(GPS_SPD)
    {
        TH1 = 0xfa;                 /* TH1: reload value for 4800 baud @ 11.059MHz */
    }
    else
    {
        TH1 = 0xfd;                        /* TH1: reload value for 9600 baud @ 11.059MHz */
    }
    TR1 = 1;                 /* TR1: timer 1 run */
    LCD_init(8);                //初始化LCD
    LCD_write_string(0,0," GPS SIRF II 2 ");
    LCD_write_string(0,1," 11-11-23 1342 ");


    for(i=1; i<4; i++) {
        delayms(250);
    }
    //LCD_cls();
    IE=0x90;                        //开总中断、串口中断
}

//串口接收中断
void uart(void) interrupt 4
{
    unsigned char tmp;
    if(RI) {
        tmp=SBUF;
        //  SBUF=tmp;
        //  if(TI)TI=0;
        switch(tmp) {
        case '$':
            cmd_number=0;                //命令类型清空
            mode=1;                                //接收命令模式
            byte_count=0;                //接收位数清空
            break;
        case ',':
            seg_count++;                //逗号计数加1
            byte_count=0;
            break;
        case '*':
            switch(cmd_number) {
            case 1:
                buf_full|=0x01;
                break;
            case 2:
                buf_full|=0x02;
                break;
            case 3:
                buf_full|=0x04;
                break;
            }
            mode=0;
            break;
        default:
            if(mode==1) {
                //命令种类判断

                cmd[byte_count]=tmp;                        //接收字符放入类型缓存
                if(byte_count>=4) {                                //如果类型数据接收完毕,判断类型
                    if(cmd[0]=='G') {
                        if(cmd[1]=='P') {
                            if(cmd[2]=='G') {
                                if(cmd[3]=='G') {
                                    if(cmd[4]=='A') {
                                        cmd_number=1;
                                        mode=2;
                                        seg_count=0;
                                        byte_count=0;
                                    }
                                }
                                else if(cmd[3]=='S') {
                                    if(cmd[4]=='V') {
                                        cmd_number=2;
                                        mode=2;
                                        seg_count=0;
                                        byte_count=0;
                                    }
                                }
                            }
                            else if(cmd[2]=='R') {
                                if(cmd[3]=='M') {
                                    if(cmd[4]=='C') {
                                        cmd_number=3;
                                        mode=2;
                                        seg_count=0;
                                        byte_count=0;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else if(mode==2) {
                //接收数据处理
                switch (cmd_number) {
                case 1:                                //类型1数据接收。GPGGA
                    switch(seg_count) {
                    case 2:                //纬度处理
                        if(byte_count<9) {
                            WD[byte_count]=tmp;
                        }
                        break;
                    case 3:                //纬度方向处理
                        if(byte_count<1) {
                            WD_a=tmp;
                        }
                        break;
                    case 4:                //经度处理
                        if(byte_count<10) {
                            JD[byte_count]=tmp;
                        }
                        break;
                    case 5:                //经度方向处理
                        if(byte_count<1) {
                            JD_a=tmp;
                        }
                        break;
                    case 6:                //定位判断
                        if(byte_count<1) {
                            lock=tmp;
                        }
                        break;
                    case 7:                //定位使用的卫星数
                        if(byte_count<2) {
                            use_sat[byte_count]=tmp;
                        }
                        break;
                    case 9:                //高度处理
                        if(byte_count<6) {
                            high[byte_count]=tmp;
                        }
                        break;
                    }
                    break;
                case 2:                                //类型2数据接收。GPGSV
                    switch(seg_count) {
                    case 3:                //天空中的卫星总数
                        if(byte_count<2) {
                            total_sat[byte_count]=tmp;
                        }
                        break;
                    }
                    break;
                case 3:                                //类型3数据接收。GPRMC
                    switch(seg_count) {
                    case 1:                //时间处理
                        if(byte_count<6) {
                            time[byte_count]=tmp;
                        }
                        break;
                    case 2:                //定位判断
                        if(byte_count<1) {
                            if (tmp=='A') {
                                lock=1;
                            }
                            else {
                                lock=0;
                            }
                        }
                        break;
                    case 3:                //纬度处理
                        if(byte_count<9) {
                            WD[byte_count]=tmp;
                        }
                        break;
                    case 4:                //纬度方向处理
                        if(byte_count<1) {
                            WD_a=tmp;
                        }
                        break;
                    case 5:                //经度处理
                        if(byte_count<10) {
                            JD[byte_count]=tmp;
                        }
                        break;
                    case 6:                //经度方向处理
                        if(byte_count<1) {
                            JD_a=tmp;
                        }
                        break;
                    case 7:                //速度处理
                        if(byte_count<5) {
                            speed[byte_count]=tmp;
                        }
                        break;
                    case 8:                //方位角处理
                        if(byte_count<5) {
                            angle[byte_count]=tmp;
                        }
                        break;
                    case 9:                //方位角处理
                        if(byte_count<6) {
                            date[byte_count]=tmp;
                        }
                        break;

                    }
                    break;
                }
            }
            byte_count++;                //接收数位加1
            break;
        }
    }
    RI=0;
}



基于单片机的GPS串口中断接收程序.txt (8.92 KB, 下载次数: 351)
发表于 2013-12-23 15:42 | 显示全部楼层
没有实际试验过,应该可以用的。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-23 19:01 , Processed in 0.054184 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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