打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于NTC热敏电阻和nRF24L01的无线温度计设计
本作品使用NTC热敏电阻和nRF24L01实现无线测温功能。使用前请仔细阅读说明文字。

【测量部分】
平台:STC15W408AS,频率:22.1184MHz

测量部分使用NTC-MF52-103/3435热敏电阻进行温度采集,通过读取单片机内部BandGap电压得到准确的电源电压和外部电压,进而使用查表方法得到对应的最靠近的温度值,处理并显示。无线部分采用2.4G载波的nRF24L01模块进行数据传输。

误差分析:
设此采集过程中,影响采集精度的唯一因素为ADC对电压的分辨率,若排除高精度分压电阻的误差,则在5V稳定电压供电条件下,可得到能识别的NTC电阻变化跨度为97.7517106549(十倍欧姆),由于NTC电阻阻值是随温度非线性变化的,则固定分辨率下,不同温度值附近精度不同,本次设计使用的单片机具有10位ADC,最小分辨率为4.8828mV,计算得到20℃定点温度下的理论跨度误差约为1.521190476%。

【接收显示部分】

平台:STM8S103F2P6,HSI:16MHz,CPUDIV:8
显示使用双数码管显示,分别使用一个595进行段选控制(别问我为什么用两个595,设计的时候没想太多...),位选使用一个138译码器解决。
可以显示正负温度,自动消零。


程序部分说明:
1.发送和接收部分的nRF24L01驱动函数均进行了精简,发送部分仅有发送相关函数,接收部分只有接收部分的函数,移植需要注意。

2.无线报文数据格式见数据采集的程序,一共有14个字节,都是数字的形式,接收到之后直接判断送显即可。


【实物图片】
数据采集部分


接收部分的实际效果1


接收部分的实际效果2


接收部分数码管段选电路连接

数据采集部分重点电路

接收显示部分单片机引脚定义(典型连接)


【程序概要】
测量部分
  1. #include"STC15.H"        //单片机寄存器定义

  2. #include"Binary.H"        //提供二进制输入

  3. #include<intrins.h>        //提供_nop_函数

  4. #include<math.h>        //提供fabs浮点数绝对值转换函数

  5. #include"NTC3435.c"        //提供NTC查询表

  6. #include"nRF24L01.C"//提供nRF24L01驱动

  7. //初始化变量

  8. unsigned int code Voltage_BandGap_ROM _at_ 0x1ff7;        //8K程序空间的MCU

  9. //unsigned int code Voltage_BandGap_ROM _at_ 0xe7f7;//58K程序空间的MCU

  10. //运行变量

  11. unsigned int ADC_DATA;                        //读取到的ADC转换值

  12. unsigned int ADC_BandGap;                //读取的BandGap转换值

  13. float VCC_Voltage;                                //计算得到的VCC电压值,单位mV

  14. float NTC_Voltage;                                //计算得到的NTC分压电压值,单位mV

  15. float NTC_Temperature;                        //查表计算得到的NTC对应温度值,单位℃

  16. unsigned long NTC_R_Comp=0;                //待对比的电阻值,单位十倍欧姆

  17. //运行计数

  18. unsigned int T0_Cnt=0;                        //定时器0周期计数

  19. //运行标志位

  20. bit En_ADC_Value=0;                                //ADC转换值标志 0:无效 1:有效

  21. bit Do_VCC_Voltage_Flash=0;                //电源电压值刷新动作标志位 1:执行一次更新

  22. /************************************************************

  23. 名称:基于NTC热敏电阻和nRF24L01的无线温度计(测量部分)

  24. 平台:STC15W408AS,频率:22.1184MHz

  25. 测试:IAP15W4K58S4,频率:22.1184MHz

  26. 简介:测量部分使用NTC-MF52-103/3435热敏电阻进行温度采集,

  27.         通过读取单片机内部BandGap电压得到准确的电源电压和外部电压,

  28.         使用查表方法得到对应的最靠近的温度值,处理并显示。

  29.         无线部分采用2.4G载波的nRF24L01模块进行数据传输。

  30. 精度说明:设此采集过程中,影响采集精度的唯一因素为ADC对电压的分辨率,

  31.         若排除高精度分压电阻的误差,则在5V稳定电压供电条件下,可得到

  32.         能识别的NTC电阻变化跨度为97.7517106549(十倍欧姆),由于NTC电阻

  33.         阻值是随温度非线性变化的,则固定分辨率下,不同温度值附近精度不同,

  34.         本次设计使用的单片机具有10位ADC,最小分辨率为4.8828mV,

  35.         计算得到20℃定点温度下的理论跨度误差约为1.521190476%。

  36. 注意:程序下载时请选中:在程序区的结束处添加重要测试参数

  37. 程序编写:凌净清河

  38. 硬件制作:凌净欣羽

  39. 文稿排版:凌净欣羽

  40. 日期:2019年2月18日

  41. 声明:相关程序参考宏晶科技例程

  42. 所属:新矿城学习基地#2019

  43. ************************************************************/

  44. void delay(unsigned long i)                                        //延时函数,调用此函数进行一段时间的非精准延时

  45. {

  46.         while(i--);

  47. }

  48. void VCC_Voltage_Read()                                                //调用此函数更新电源电压值,存储在VCC_Voltage变量中,该函数改变ADC的设置

  49. {

  50.         P1ASF=B00000000;                                                //不设置P1ASF,以便上电读取BandGap电压的ADC转换值

  51.         ADC_CONTR=B10000000;                                        //开启ADC电源,设置转换速度540时钟周期,清空转换标志位,停止转换,模拟通道选择P1^0

  52.         ADC_RES=0;                                                                //清除结果寄存器

  53.         ADC_RESL=0;                                                                //清除结果寄存器

  54.         CLK_DIV&=B11011111;                                                //ADC_RES[7:0]存放高8位ADC结果,ADC_RES[1:0]存放低2位ADC结果

  55.         //PADC=1;                                                                //设置A/D转换中断优先级为最高

  56.         ADC_CONTR|=0x08;                                                //开始转换

  57.         _nop_();

  58.         _nop_();

  59.         _nop_();

  60.         _nop_();                                                                //按照例程延时4个周期

  61.         while(!En_ADC_Value);                                        //等待转换结束

  62.         En_ADC_Value=0;                                                        //清除标志位

  63.         ADC_BandGap=ADC_DATA;                                        //保存BandGap的ADC转换值

  64.         VCC_Voltage=Voltage_BandGap_ROM*1023.0/(float)ADC_BandGap;//电源电压值计算

  65. }

  66. void NTC_Voltage_Read()                                                //调用此函数更新NTC电压值,存储在NTC_Voltage变量中,该函数改变ADC的设置

  67. {

  68.         P1ASF=B00100000;                                                //NTC接在P15

  69.         ADC_CONTR=B11100101;                                        //开启ADC电源,设置转换速度90时钟周期,清空转换标志位,停止转换,模拟通道选择P1^5

  70.         ADC_RES=0;                                                                //清除结果寄存器

  71.         ADC_RESL=0;                                                                //清除结果寄存器

  72.         CLK_DIV&=B11011111;                                                //ADC_RES[7:0]存放高8位ADC结果,ADC_RES[1:0]存放低2位ADC结果

  73.         //PADC=1;                                                                //设置A/D转换中断优先级为最高

  74.         ADC_CONTR|=0x08;                                                //开始转换

  75.         _nop_();

  76.         _nop_();

  77.         _nop_();

  78.         _nop_();                                                                //按照例程延时4个周期

  79.         while(!En_ADC_Value);                                        //等待转换结束

  80.         En_ADC_Value=0;                                                        //清除标志位

  81.         NTC_Voltage=Voltage_BandGap_ROM*(float)ADC_DATA/(float)ADC_BandGap;//NTC分压电压计算

  82. }

  83. void Timer0Init(void)                                                //2毫秒@22.1184MHz

  84. {

  85.         AUXR |= 0x80;                                                        //定时器时钟1T模式

  86.         TMOD &= 0xF0;                                                        //设置定时器模式

  87.         TL0 = 0x33;                                                                //设置定时初值

  88.         TH0 = 0x53;                                                                //设置定时初值

  89.         TF0 = 0;                                                                //清除TF0标志

  90.         TR0 = 1;                                                                //定时器0开始计时

  91. }

  92. void sys_init()                                                                //系统初始化函数

  93. {

  94.         P0M1=0x00;P0M0=0x00;

  95.         P1M1=0x00;P1M0=0x00;

  96.         P2M1=0x00;P2M0=0x00;

  97.         P3M1=0x00;P3M0=0x00;

  98.         P4M1=0x00;P4M0=0x00;

  99.         P5M0=0x00;P5M1=0x00;

  100.         Timer0Init();                                                        //定时器0初始化

  101.         nRF24L01_IO_init();                                                //nRF24L01通信线电平初始化

  102.         nRF24L01_SetMode_Tx();                                        //nRF24L01发送模式初始化

  103.         EA=1;                                                                        //开总中断

  104.         ET0=1;                                                                        //开定时器0中断

  105.         EADC=1;                                                                        //开ADC转换中断

  106.         VCC_Voltage_Read();                                                //读取电源电压

  107. }

  108. void main()                                                                        //主函数

  109. {

  110.         sys_init();                                                                //系统初始化

  111.         while(1)                                                                //主函数大循环

  112.         {

  113.                 NTC_Voltage_Read();                                        //读取NTC的分压值(P15上的模拟电压)

  114.                 NTC_R_Comp=100000*NTC_Voltage/(VCC_Voltage-NTC_Voltage);//计算待对比的NTC阻值,单位十倍欧姆

  115.                 NTC_Temperature=NTC_103_3435_Compare(NTC_R_Comp);//查表计算NTC对应的温度值

  116.                 //无线发送

  117.                 if(NTC_Temperature>0)

  118.                 {

  119.                         Transmit_Buff[0]=1;//数据为正标志

  120.                 }

  121.                 else

  122.                 {

  123.                         NTC_Temperature=(float)fabs((double)NTC_Temperature);                                        //取温度绝对值

  124.                         Transmit_Buff[0]=0;//数据为负标志

  125.                 }

  126.                         Transmit_Buff[1]=((unsigned int)NTC_Temperature)/100;                                        //温度值百位

  127.                         Transmit_Buff[2]=((unsigned int)(NTC_Temperature)%100)/10;                                //温度值十位

  128.                         Transmit_Buff[3]=((unsigned int)NTC_Temperature)%10;                                        //温度值个位

  129.                         Transmit_Buff[4]=((unsigned long)(NTC_Temperature*10000)%10000)/1000;        //温度值小数1位

  130.                         Transmit_Buff[5]=((unsigned long)(NTC_Temperature*10000)%1000)/100;                //温度值小数2位

  131.                         Transmit_Buff[6]=((unsigned long)(NTC_Temperature*10000)%100)/10;                //温度值小数3位

  132.                         Transmit_Buff[7]=((unsigned long)(NTC_Temperature*10000))%10;                        //温度值小数4位

  133.                         Transmit_Buff[8]=((unsigned int)VCC_Voltage)/1000;                                                //电压值千位

  134.                         Transmit_Buff[9]=((unsigned int)(VCC_Voltage)%1000)/100;                                //电压值百位

  135.                         Transmit_Buff[10]=((unsigned int)(VCC_Voltage)%100)/10;                                        //电压值十位

  136.                         Transmit_Buff[11]=((unsigned int)VCC_Voltage)%10;                                                //电压值个位

  137.                         Transmit_Buff[12]=((unsigned long)(VCC_Voltage*100)%100)/10;                        //电压值小数1位

  138.                         Transmit_Buff[13]=(unsigned long)(VCC_Voltage*100)%10;                                        //电压值小数2位

  139.                 nRF24L01_SendData(Transmit_Buff);        //使用nRF24L01发送温度数据

  140.                 if(Do_VCC_Voltage_Flash)

  141.                 {

  142.                         Do_VCC_Voltage_Flash=0;                        //条件动作清零

  143.                         VCC_Voltage_Read();                                //读取电源电压

  144.                 }

  145.                 delay(100000);                                                //周期循环延时

  146.         }

  147. }

  148. void T0() interrupt 1                                                //定时器0中断服务函数

  149. {

  150.         T0_Cnt++;                                                                //周期增加

  151.         if(T0_Cnt==1000)                                                //定时2秒

  152.         {

  153.                 T0_Cnt=0;                                                        //清空计数器

  154.                 Do_VCC_Voltage_Flash=1;                                //条件动作执行

  155.         }

  156. }

  157. void ADC() interrupt 5                                                //AD中断服务函数

  158. {

  159.         ADC_CONTR&=!0x10;                                                //清除ADC中断标志,例程

  160.         ADC_DATA=(ADC_RES<<2)|ADC_RESL;                        //10位ADC结果拼接

  161.         En_ADC_Value=1;                                                        //ADC转换值有效标志

  162. }

复制代码
接收部分主函数
  1. #include"iostm8s103f2.h"

  2. #include"Init.c"        //系统初始化函数

  3. #include"nRF24L01.C"//提供nRF24L01驱动

  4. //运行数组

  5. unsigned char Display[8]={10,10,10,10,10,10,10,10};//用于显示的每一位数值,对应段选数组中的相应位

  6. unsigned char duan[11]={0xeb,0x09,0xe5,0xad,0x0f,0xae,0xee,0x89,0xef,0xaf,0x04};//数码管段选数组 数字0~9和符号"-"

  7. /*

  8. 段码对应表,仅适用本电路

  9. 8        4        2        1        8        4        2        1

  10. 7        6        5        4        3        2        1        0

  11. A        E        D        H        C        G        F        B

  12. 1        1        1        0        1        0        1        1        0

  13. 0        0        0        0        1        0        0        1        1

  14. 1        1        1        0        0        1        0        1        2

  15. 1        0        1        0        1        1        0        1        3

  16. 0        0        0        0        1        1        1        1        4

  17. 1        0        1        0        1        1        1        0        5

  18. 1        1        1        0        1        1        1        0        6

  19. 1        0        0        0        1        0        0        1        7

  20. 1        1        1        0        1        1        1        1        8

  21. 1        0        1        0        1        1        1        1        9

  22. 0        0        0        0        0        1        0        0        -

  23. */

  24. //运行变量

  25. unsigned char pointpositionA=3;//温度显示的小数点位置,从0到3

  26. unsigned char pointpositionB=4;//电压显示的小数点位置,从4到7

  27. //运行计数

  28. unsigned int TIM4_cnt=0;//TIM4定时器周期计数

  29. /************************************************************

  30. 名称:基于NTC热敏电阻和nRF24L01的无线温度计(接收显示部分)

  31. 平台:STM8S103F2P6,HSI:16MHz,CPUDIV:8

  32. 资源:Flash:4K RAM:1K

  33. 简介:测量部分使用NTC-MF52-103/3435热敏电阻进行温度采集,

  34.         通过读取单片机内部BandGap电压得到准确的电源电压和外部电压,

  35.         使用查表方法得到对应的最靠近的温度值,处理并显示。

  36.         无线部分采用2.4G载波的nRF24L01模块进行数据传输。

  37. 程序编写:凌净清河

  38. 硬件制作:凌净欣羽

  39. 文稿排版:凌净欣羽

  40. 日期:2019年2月25日

  41. 声明:制作参考龙顺宇《深入浅出STM8单片机入门、进阶与应用实例》

  42. 所属:新矿城学习基地#2019

  43. 编写中临时记录:

  44.         本程序欠缺段选数组,数码管显示函数

  45.         数码管计划使用138和双595级联的方式驱动2个4位数码管

  46.         一个显示温度,一个显示采集部分的供电电压

  47.         还有配套的数据处理语句待编写。

  48. ************************************************************/

  49. void delay(unsigned char i)                                                //延时函数,调用此函数进行一段时间的非精准延时

  50. {

  51.         while(i--);

  52. }

  53. void SPIsendB(unsigned char dat)//给级联的第一个595写字节

  54. {

  55.         unsigned char a;

  56.         unsigned int tmp=0;

  57.         tmp=dat<<8;

  58.         SN74HC595_SRCLK=0;

  59.         SN74HC595_RCLK=0;

  60.         for(a=0;a<16;a++)

  61.         {

  62.                 if(tmp&0x8000)

  63.                 {

  64.                         SN74HC595_SER=1;

  65.                 }

  66.                 else

  67.                 {

  68.                         SN74HC595_SER=0;

  69.                 }

  70.                 tmp<<=1;

  71.                 SN74HC595_SRCLK=1;

  72.                 asm("nop");

  73.                 asm("nop");

  74.                 asm("nop");

  75.                 asm("nop");

  76.                 SN74HC595_SRCLK=0;

  77.         }

  78.         SN74HC595_RCLK=1;

  79.         asm("nop");

  80.         asm("nop");

  81.         SN74HC595_RCLK=0;

  82. }

  83. void SPIsendA(unsigned char dat)//给级联的第二个595写字节

  84. {

  85.         unsigned char a;

  86.         unsigned int tmp=0;

  87.         tmp=tmp|dat;

  88.         SN74HC595_SRCLK=0;

  89.         SN74HC595_RCLK=0;

  90.         for(a=0;a<16;a++)

  91.         {

  92.                 if(tmp&0x8000)

  93.                 {

  94.                         SN74HC595_SER=1;

  95.                 }

  96.                 else

  97.                 {

  98.                         SN74HC595_SER=0;

  99.                 }

  100.                 tmp<<=1;

  101.                 SN74HC595_SRCLK=1;

  102.                 asm("nop");

  103.                 asm("nop");

  104.                 asm("nop");

  105.                 asm("nop");

  106.                 SN74HC595_SRCLK=0;

  107.         }

  108.         SN74HC595_RCLK=1;

  109.         asm("nop");

  110.         asm("nop");

  111.         SN74HC595_RCLK=0;

  112. }

  113. void smgNum(unsigned char num)//位选函数,配合显示函数使用,选择138译码输出的位

  114. {

  115.         switch(num)

  116.         {

  117.                 case 0:SN74HC138_S3=1;SN74HC138_S2=1;SN74HC138_S1=1;break;

  118.                 case 1:SN74HC138_S3=1;SN74HC138_S2=1;SN74HC138_S1=0;break;

  119.                 case 2:SN74HC138_S3=1;SN74HC138_S2=0;SN74HC138_S1=1;break;

  120.                 case 3:SN74HC138_S3=1;SN74HC138_S2=0;SN74HC138_S1=0;break;

  121.                 case 4:SN74HC138_S3=0;SN74HC138_S2=1;SN74HC138_S1=1;break;

  122.                 case 5:SN74HC138_S3=0;SN74HC138_S2=1;SN74HC138_S1=0;break;

  123.                 case 6:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=1;break;

  124.                 case 7:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=0;break;

  125.                 default:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=0;break;

  126.         }

  127. }

  128. /*

  129. 编者按:

  130. 在设计连接时,用于显示温度的74HC595的SN74HC595_SER端

  131. 接在用于显示电压的595 Q7'端,两个74HC595级联,

  132. 我也不知道当时怎么想的,选择如此焊接,

  133. 但是既然电路这么做出来了,程序只好照着编了。

  134. */

  135. void smgdisplay()

  136. {

  137.         unsigned char i;

  138.         for(i=0;i<4;i++)//温度数据显示

  139.         {

  140.                 if(pointpositionA==i)

  141.                 {

  142.                         SPIsendA((duan[Display[i]])|0x10);

  143.                 }

  144.                 else

  145.                 {

  146.                         SPIsendA(duan[Display[i]]);

  147.                 }

  148.                 smgNum(i);//选择相应位

  149.                 delay(100);

  150.                 SPIsendA(0x00);//消隐

  151.                 delay(50);

  152.         }

  153.         for(i=4;i<8;i++)//电压数据显示

  154.         {

  155.                 if(pointpositionB==i)

  156.                 {

  157.                         SPIsendB((duan[Display[i]])|0x10);

  158.                 }

  159.                 else

  160.                 {

  161.                         SPIsendB(duan[Display[i]]);

  162.                 }

  163.                 smgNum(i);//选择相应位

  164.                 delay(100);

  165.                 SPIsendB(0x00);//消隐

  166.                 delay(50);

  167.         }

  168. }

  169. void sys_init()//系统初始化

  170. {

  171.         asm("sim");

  172.         CLK_init();                                                                //HSI初始化,更改分频系数为1

  173.         TIM4_init();                                                        //TIM4初始化,定时1ms

  174.         asm("rim");

  175.         SN74HC595_IO_Define();                                        //SN74HC595接线定义

  176.         SN74HC138_IO_Define();                                        //SN74HC138接线定义

  177.         nRF24L01_IO_Define();                                        //nRF24L01接线定义

  178.         nRF24L01_IO_init();                                                //nRF24L01通信线初始化

  179.         nRF24L01_SetMode_Rx();                                        //nRF24L01功能初始化:接收模式

  180. }

  181. void main(void)

  182. {

  183.         sys_init();                                                                //系统初始化

  184.         while(1)

  185.         {

  186.                 if(nRF24L01_ReceiveData())                        //如果接收到数据

  187.                 {

  188.                         TIM4_cnt=0;

  189.                         if(Received_Buff[0])//温度为正

  190.                         {

  191.                                 if(Received_Buff[1]==0)//如果百位为0

  192.                                 {

  193.                                         if(Received_Buff[2]==0)//如果十位为0

  194.                                         {

  195.                                                 Display[0]=Received_Buff[3];

  196.                                                 Display[1]=Received_Buff[4];

  197.                                                 Display[2]=Received_Buff[5];

  198.                                                 Display[3]=Received_Buff[6];

  199.                                                 pointpositionA=0;

  200.                                         }

  201.                                         else

  202.                                         {

  203.                                                 Display[0]=Received_Buff[2];

  204.                                                 Display[1]=Received_Buff[3];

  205.                                                 Display[2]=Received_Buff[4];

  206.                                                 Display[3]=Received_Buff[5];

  207.                                                 pointpositionA=1;

  208.                                         }

  209.                                 }

  210.                                 else

  211.                                 {

  212.                                         Display[0]=Received_Buff[1];

  213.                                         Display[1]=Received_Buff[2];

  214.                                         Display[2]=Received_Buff[3];

  215.                                         Display[3]=Received_Buff[4];

  216.                                         pointpositionA=2;

  217.                                 }

  218.                         }

  219.                         else

  220.                         {

  221.                                 Display[0]=11;//负号

  222.                                 if(Received_Buff[1]==0)//如果百位为0

  223.                                 {

  224.                                         if(Received_Buff[2]==0)//如果十位为0

  225.                                         {

  226.                                                 Display[1]=Received_Buff[3];

  227.                                                 Display[2]=Received_Buff[4];

  228.                                                 Display[3]=Received_Buff[5];

  229.                                                 pointpositionA=1;

  230.                                         }

  231.                                         else

  232.                                         {

  233.                                                 Display[1]=Received_Buff[2];

  234.                                                 Display[2]=Received_Buff[3];

  235.                                                 Display[3]=Received_Buff[4];

  236.                                                 pointpositionA=2;

  237.                                         }

  238.                                 }

  239.                                 else

  240.                                 {

  241.                                         Display[1]=Received_Buff[1];

  242.                                         Display[2]=Received_Buff[2];

  243.                                         Display[3]=Received_Buff[3];

  244.                                         pointpositionA=3;

  245.                                 }

  246.                         }

  247.                         Display[4]=Received_Buff[8];

  248.                         Display[5]=Received_Buff[9];

  249.                         Display[6]=Received_Buff[10];

  250.                         Display[7]=Received_Buff[11];

  251.                 }

  252.                 smgdisplay();

  253.         }

  254. }

  255. #pragma vector=0x19//定时器4中断服务函数

  256. __interrupt void TIM4_UPD_OVF_IRQHandler(void)

  257. {

  258.         TIM4_cnt++;

  259.         TIM4_SR=0;

  260.         if(TIM4_cnt==500)

  261.         {

  262.                 unsigned char i;

  263.                 TIM4_cnt=0;

  264.                 for(i=0;i<8;i++)

  265.                 {

  266.                         Display[i]=10;

  267.                 }

  268.         }

  269. }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
stm32通过NTC采集温度,二分法查表,精度0.1℃
零基础学单片机
基于8086使用Proteus设计汽车速度控制系统
74hc14
NTC
温度问题为您解决(一)温度传感基本原理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服