智能车制作

标题: 那些年坑死的24L01+,终于搞好了~~ [打印本页]

作者: jamesdeep    时间: 2013-4-21 11:23
标题: 那些年坑死的24L01+,终于搞好了~~
折腾了一个星期,终于搞好了,接收端用stm32,发送端用XS128,现在能够同时双向发送数据。有搞24L01+无线有问题可以留言~

作者: 卡通童话008    时间: 2013-4-21 11:38
太麻烦了,直接用蓝牙
作者: jamesdeep    时间: 2013-4-21 11:41
卡通童话008 发表于 2013-4-21 11:38
太麻烦了,直接用蓝牙

蓝牙怎么搞呀?得写windows上位机吧

作者: 卡通童话008    时间: 2013-4-21 12:01
jamesdeep 发表于 2013-4-21 11:41
蓝牙怎么搞呀?得写windows上位机吧

就和你用两根线连两个单片机串口通信一样····

作者: mxj1005071012    时间: 2013-4-21 12:37
我正在搞2401  请问需要设置串口吗 就是波特率 在帮别人做无线收发 却发现很多人的程序 用了串口初始化 很不解 觉得应该不需要啊
作者: lvlonghang    时间: 2013-4-21 12:52
我最近在搞24L01+的项目,简单的传输挺简单,想用好还得下点儿功夫
作者: jamesdeep    时间: 2013-4-21 13:27
mxj1005071012 发表于 2013-4-21 12:37
我正在搞2401  请问需要设置串口吗 就是波特率 在帮别人做无线收发 却发现很多人的程序 用了串口初始化 很不 ...

24L01用的是SPI接口,直接跟单片机相连,当然也可以直接用IO口模拟硬件SPI接口,XS128我就是用的IO口模拟的,硬件调不出来,估计是XS128的硬件SPI接口太垃圾了,不灵活,stm32的硬件SPI就完全没问题,单片机和24l01之间的通讯波特率在0-10Mbps之间任意值都可以,而串口指的是RS-232接口,是单片机跟电脑通讯的时候才用到的,跟24L01关系不大。

你说很多人的程序用了串口初始化,我看的例程里面也有,这个一般是用于跟电脑通讯用的,你调试的时候可以直接忽略。

作者: jamesdeep    时间: 2013-4-21 13:28
lvlonghang 发表于 2013-4-21 12:52
我最近在搞24L01+的项目,简单的传输挺简单,想用好还得下点儿功夫

嗯啊,无线收发跟时序有关,所以要考虑很多种特殊情况下出现的情况,调试起来很麻烦

作者: mxj1005071012    时间: 2013-4-21 16:24
jamesdeep 发表于 2013-4-21 13:27
24L01用的是SPI接口,直接跟单片机相连,当然也可以直接用IO口模拟硬件SPI接口,XS128我就是用的IO口模拟 ...

我的已经写出来了 调试发现 不能传输  能把自己的程序注释一下 发给我吗  基本的我都理解 我看了2天资料 觉得我的也对啊 就是不能显示 想和你的对比一下 如果你能加上详细注释就很好了 谢了

作者: mxj1005071012    时间: 2013-4-21 16:28
我还有个问题 就是2401与单片机的端口连接 有特殊要求吗 是不是定义任意端口都行
作者: 恋May    时间: 2013-4-21 17:00
无线蓝牙串口
作者: exiao    时间: 2013-4-21 17:10
楼主厉害啊
作者: 奋斗小青年、    时间: 2013-4-21 23:12
做的第一个实验就是24l01
作者: jamesdeep    时间: 2013-4-22 00:49
mxj1005071012 发表于 2013-4-21 16:28
我还有个问题 就是2401与单片机的端口连接 有特殊要求吗 是不是定义任意端口都行

如果你用IO口模拟SPI的话,那么就任意端口都能用了~下面是XS128的初始化和发送代码:

  1. #include "24L01.h"
  2. #include "N5110.h"

  3. //unsigned char nr24l01_data[34]=0;//用于向24L01寄存器发送的命令或者数据
  4. unsigned char nr24L01_data[33]=0;//用于向24L01寄存器发送的内容
  5. unsigned char nr24L01_input[8]; //status状态寄存器专用数组
  6. unsigned char nr24L01_data_receive[33];//用于保存从24L01+接收到的数据
  7. unsigned char nr24l01_register_data_send[6]=0;//仅用于向24L01寄存器发送的内容(不用于发送数据)
  8. unsigned char nr24l01_status = 0;//用于24L01状态寄存器
  9. unsigned char send_status = 0;//发送状态;0代表发送成功,1代表失败
  10. unsigned char receive_status = 0;//接收状态;0代表发送成功,1代表失败
  11. unsigned char send_data_number = 0;//准备向TX_FIFO寄存器写入的数据的数目
  12. unsigned char receive_data_number = 0;//接收到的数据的数目
  13. unsigned int volatile nrf24l01_k = 0;//用于延时

  14. //向24L01写单字节命令,返回状态寄存器值,不带有CS功能
  15. unsigned char nr24L01_write_singlecom(unsigned char com)
  16. {
  17.     unsigned char i = 0;
  18.     unsigned char j = 128;
  19.     unsigned char status = 0;
  20.     for(i=8;i!=0;i--)
  21.     {
  22.       
  23.       if((com&0x80)==0x80) MOSI = 1;
  24.       else MOSI = 0;//准备好向24L01发送的比特位
  25.       com = com << 1;
  26.       nr24l01_CLK = 1;//CLK上升沿
  27.       if(MISO == 1)
  28.       {
  29.         nr24L01_input[i-1] = 1;
  30.         status = status + j;
  31.       }
  32.       else nr24L01_input[i-1] = 0;//读取24l01p传来的状态寄存器
  33.       nr24l01_CLK = 0;//CLK下降沿
  34.       j = j/2;
  35.     }
  36.     return status;     
  37. }
  38. //向24L01写单字节命令,返回状态寄存器值,带有CS功能
  39. unsigned char nr24L01_write_singlecom_withCS(unsigned char com)
  40. {
  41.     unsigned char i = 0;
  42.     unsigned char j = 128;
  43.     unsigned char status = 0;
  44.     nr24l01_CS = 0;
  45.     for(i=8;i!=0;i--)
  46.     {
  47.       
  48.       if((com&0x80)==0x80) MOSI = 1;
  49.       else MOSI = 0;//准备好向24L01发送的比特位
  50.       com = com << 1;
  51.       nr24l01_CLK = 1;//CLK上升沿
  52.       if(MISO == 1)
  53.       {
  54.         nr24L01_input[i-1] = 1;
  55.         status = status + j;
  56.       }
  57.       else nr24L01_input[i-1] = 0;//读取24l01p传来的状态寄存器
  58.       nr24l01_CLK = 0;//CLK下降沿
  59.       j = j/2;
  60.     }
  61.     nr24l01_CS = 1;
  62.     return status;     
  63. }
  64. //向24L01读、写单字节数据
  65. unsigned char nr24L01_write_singledata(unsigned char data_transmit)
  66. {
  67.     unsigned char o = 0;
  68.     unsigned char p = 128;
  69.     unsigned char data_receive = 0;
  70.     for(o=8;o!=0;o--)
  71.     {
  72.       
  73.       if((data_transmit&0x80)==0x80) MOSI = 1;
  74.       else MOSI = 0;//准备好向24L01发送的比特位
  75.       data_transmit = data_transmit << 1;
  76.       nr24l01_CLK = 1;//CLK上升沿
  77.       if(MISO == 1)
  78.       {
  79.         data_receive = data_receive + p;
  80.       }
  81.       nr24l01_CLK = 0;//CLK下降沿
  82.       p = p/2;
  83.     }
  84.     return data_receive;
  85. }
  86. //向24L01寄存器写数据,变量为:寄存器命令,数据指针,要写入的数据字节数(不包括命令字节)
  87. unsigned char nr24L01_write_register(unsigned char com,unsigned char *data,unsigned char data_byte_number)
  88. {
  89.     unsigned status = 0;
  90.     nr24l01_CS = 0;
  91.     status = nr24L01_write_singlecom(com);//发送命令字
  92.     while(data_byte_number--)
  93.     {     
  94.       nr24L01_write_singledata(*data);//发送数据;
  95.       data++;
  96.     }
  97.     nr24l01_CS = 1;
  98.     return status;
  99. }
  100. //向24L01寄存器读取数据,变量为:寄存器命令,要读取的数据字节数(不包括命令字节)
  101. unsigned char nr24L01_read_register(unsigned char com,unsigned char data_byte_number)
  102. {
  103.     unsigned char status = 0;
  104.     unsigned char r = 0;
  105.     nr24l01_CS = 0;
  106.     status = nr24L01_write_singlecom(com);//发送命令字
  107.     for(r=0;r<data_byte_number;r++)
  108.     {     
  109.       nr24L01_data_receive[r] = nr24L01_write_singledata(0xFF);//发送空数据,用于读取数据;
  110.     }
  111.     nr24l01_CS = 1;
  112.     return status;
  113. }
  114. //24L01初始化函数
  115. void nr24L01_init(void)
  116. {
  117.     unsigned int z = 0;
  118.    
  119.     //初始化24L01p的6个引脚
  120.     DDRS = 0b11100100;//PortS2567设定为输出
  121.     nr24l01_CS = 1;//CS=1
  122.     nr24l01_CE = 0;//CE=0
  123.     nr24l01_CLK = 0;//CLK=0
  124.     MISO = 0;//MISO=0
  125.     MOSI = 0;//MOSI=0
  126.     PIEJ_PIEJ6 = 1;//使能PortJ6中断,用于IRQ中断申请
  127.    
  128.    
  129.     nr24L01_write_register(0xE1,nr24l01_register_data_send,0);//清空TX FIFO
  130.     nr24L01_write_register(0xE2,nr24l01_register_data_send,0);//清空RX FIFO
  131.     nr24l01_register_data_send[0]=0x70;
  132.     nr24L01_write_register(0x27,nr24l01_register_data_send,1);//清除MAX_RT、TX_IRQ、RX_IRQ标志位
  133.     nr24l01_register_data_send[0]=0x13;
  134.     nr24L01_write_register(0x24,nr24l01_register_data_send,1);//初始化4号寄存器,//自动重发延迟设为500us,重发次数设为3
  135.     nr24l01_register_data_send[0]=0x55;
  136.     nr24L01_write_register(0x25,nr24l01_register_data_send,1);//初始化5号寄存器,设置通信频率
  137.     nr24l01_register_data_send[0]=0x08;
  138.     nr24L01_write_register(0x26,nr24l01_register_data_send,1);//初始化6号寄存器,设置传送比特率为2Mbps
  139.     nr24l01_register_data_send[0]=0x34;nr24l01_register_data_send[1]=0x43;nr24l01_register_data_send[2]=0x10;nr24l01_register_data_send[3]=0x10;nr24l01_register_data_send[4]=0x01;      
  140.     nr24L01_write_register(0x2A,nr24l01_register_data_send,5);//初始化A号寄存器,设置0号管道接收地址
  141.     nr24l01_register_data_send[0]=0x34;nr24l01_register_data_send[1]=0x43;nr24l01_register_data_send[2]=0x10;nr24l01_register_data_send[3]=0x10;nr24l01_register_data_send[4]=0x01;        
  142.     nr24L01_write_register(0x30,nr24l01_register_data_send,5);//初始化10号寄存器,设置发送地址
  143.     nr24l01_register_data_send[0]=0x3F;
  144.     nr24L01_write_register(0x3C,nr24l01_register_data_send,1);//初始化1C号寄存器,使能6个管道的动态载荷长度
  145.     nr24l01_register_data_send[0]=0x06;
  146.     nr24L01_write_register(0x3D,nr24l01_register_data_send,1);//初始化1D号寄存器,使能应答载荷包和动态载荷长度功能  
  147.     nr24l01_register_data_send[0]=0x0A;
  148.     nr24L01_write_register(0x20,nr24l01_register_data_send,1);//初始化0号CONFIG寄存器
  149.     for(z=0;z<60000;z++);//延时
  150.     for(z=0;z<60000;z++);//延时
  151.     for(z=0;z<60000;z++);//延时
  152.     for(z=0;z<60000;z++);//延时      
  153. }

  154. void nr24L01(void)//24L01主执行函数
  155. {
  156.      nr24l01_CE = 1;//进入发送模式
  157.      if(((nr24L01_write_singlecom_withCS(0xFF))&0x10) == 0x10)//若MAX_RT最大重发次数中断为1
  158.      {
  159.         send_status = 1;//发送失败标志置1
  160.         receive_status = 1;//接收失败标志置1;
  161.         nr24l01_status = nr24L01_write_singlecom_withCS(0xE1);//清空TX_FIFO
  162.         nr24l01_register_data_send[0]=0b01110000;
  163.         nr24l01_status = nr24L01_write_register(0b00100111,nr24l01_register_data_send,1);//清除MAX_RT、TX_IRQ、RX_IRQ标志位
  164.      }
  165.      else//若MAX_RT最大重发次数中断不为1
  166.      {
  167.         if((nr24L01_write_singlecom_withCS(0xFF)&0x40) == 0x40)//若RX_IRQ数据接收中断为1
  168.         {
  169.             nr24l01_status = nr24L01_read_register(0x60,1);//读取管道0的接收数据长度
  170.             if(nr24L01_data_receive[0]<=32)//若管道0接收的数据长度小于等于32字节(即数据有效)
  171.             {
  172.                receive_data_number = nr24L01_data_receive[0];//存储接收到的数据的数目
  173.                nr24l01_status = nr24L01_read_register(0x61,receive_data_number);//读取RX FIFO数据
  174.                nr24L01_data_receive[receive_data_number] = '\0';//加入空结束字符
  175.                N5110_write_string_6_8(0, 4,nr24L01_data_receive);//
  176.                receive_status = 0;//接收失败标志清0;  
  177.             }
  178.             else//若管道0接收的数据长度大于32字节(即数据无效)
  179.             {
  180.                receive_status = 1;//接收失败标志置1;
  181.                nr24l01_status = nr24L01_write_register(0xE2,nr24l01_register_data_send,0);//清空RX FIFO
  182.             }
  183.             nr24l01_register_data_send[0]=0b01000000;
  184.             nr24l01_status = nr24L01_write_register(0b00100111,nr24l01_register_data_send,1);//清除RX_IRQ标志位
  185.         }
  186.         
  187.         if((nr24L01_write_singlecom_withCS(0xFF)&0x20) == 0x20)//若TX_IRQ数据发送中断为1
  188.         {
  189.            send_status = 0;//发送失败标志清0
  190.            nr24l01_register_data_send[0]=0b00100000;
  191.            nr24l01_status = nr24L01_write_register(0b00100111,nr24l01_register_data_send,1);//清除TX_IRQ标志位
  192.            nr24l01_status = nr24L01_write_register(0xA0,nr24L01_data,send_data_number);//利用此语句写数据至TX FIFO
  193.            nr24L01_data[0] =  nr24L01_data[0] +1;//更换发送字符,可用其他控制命令代替
  194.            if( nr24L01_data[0] >126) nr24L01_data[0] = 48;//更换发送字符,可用其他控制命令代替  
  195.         }
  196.         else//若TX_IRQ数据发送中断不为1
  197.         {
  198.             if((nr24L01_write_singlecom_withCS(0xFF)&0x01) == 0x01)//若TX_FIFO已满
  199.             {
  200.                receive_status = 1;//接收失败标志置1;
  201.                nr24l01_status = nr24L01_write_singlecom_withCS(0xE1);//清空TX_FIFO
  202.             }
  203.             else//若TX_FIFO未满
  204.             {
  205.                nr24l01_status = nr24L01_write_register(0xA0,nr24L01_data,send_data_number);//利用此语句写数据至TX FIFO
  206.             }
  207.          }      
  208.      }      
  209.      nr24l01_status = nr24L01_read_register(0x07,1);//读取寄存器内容
  210.      N5110_change_num(0,5,nr24l01_status);//向屏幕输出状态寄存器内容
  211.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  212.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  213.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  214.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  215.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  216.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  217.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  218.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  219.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  220.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  221.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  222.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  223.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  224.           for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)
  225.      for(nrf24l01_k=0;nrf24l01_k<60770;nrf24l01_k++);//延时20ms(主频40M,k为unsigned int volatile)  
  226.   
  227. }
复制代码



然后main函数里面是这样的:
  1. void main(void)
  2. {
  3.   nr24L01_init();//初始化24lL01P
  4.   nr24L01_data[0] = 'J';
  5.   nr24L01_data[1] = 'a';
  6.   nr24L01_data[2] = 'm';
  7.   nr24L01_data[3] = 'e';
  8.   nr24L01_data[4] = 's';
  9.   send_data_number = 5;
  10.   if(mode == 0)//若当前模式为测试模式
  11.   {
  12.       while(1)//--------------主循环----------------
  13.       {
  14.           if(en_24l01p == 1)//若无线被使能
  15.           {
  16.               nr24L01();//24l01主执行函数
  17.           }   
  18.        }   
  19.     }
  20.    
  21.    
  22. }
复制代码



作者: 201000171238    时间: 2013-4-22 11:48

作者: 心如纸水    时间: 2013-4-22 12:09

作者: ludlee    时间: 2013-4-22 13:04

作者: bbddoop    时间: 2013-4-22 18:24
同时双向发送数据?这个厉害,怎么做的。

LZ最高速率能到多少byte/s?,我测试的大该55000个左右
作者: 牧℡〆风︶ㄣ    时间: 2013-4-22 19:51
想问一下,如果用无线和蓝牙传送图像的话,哪一种传送的速度会比较快,快多少
作者: jamesdeep    时间: 2013-4-22 22:50
bbddoop 发表于 2013-4-22 18:24
同时双向发送数据?这个厉害,怎么做的。

LZ最高速率能到多少byte/s?,我测试的大该55000个左右

没测试过多少个,用的是2Mbit/s传送速率,只要收发两端的单片机都处于极限速度,应该就能接近理论上的最高速度了

作者: jamesdeep    时间: 2013-4-22 23:00
bbddoop 发表于 2013-4-22 18:24
同时双向发送数据?这个厉害,怎么做的。

LZ最高速率能到多少byte/s?,我测试的大该55000个左右

使用自动应答附带数据包功能,发送端发一个数据包给接收端,然后接收端自动发一个应答包,这个应答包是可以附带最大32字节的数据包的

作者: bbddoop    时间: 2013-4-24 15:22
jamesdeep 发表于 2013-4-22 23:00
使用自动应答附带数据包功能,发送端发一个数据包给接收端,然后接收端自动发一个应答包,这个应答包是可 ...

恩,LZ测试下速率吧,我的是清华K10的板子,用PIT中断定时3S,发送了5500个32字节的包。LZ试试,如果你的快很多,说明我这底层驱动写的有问题。


作者: -Lamborghini    时间: 2013-7-9 07:57
24L01如何做到多发射单接收?相互之间没有干扰
作者: 辛哥就是我    时间: 2013-7-15 20:04
刚开始弄24L01,想问一下。24L01的SPI接口和单片机的SPI接口是怎么连接的!24L01的mosi,miso,与单片机是对应接,还是交差接呢?求大神指点啊!
作者: jamesdeep    时间: 2013-7-15 20:31
辛哥就是我 发表于 2013-7-15 20:04
刚开始弄24L01,想问一下。24L01的SPI接口和单片机的SPI接口是怎么连接的!24L01的mosi,miso,与单片机是对应 ...

对应的

作者: ︻§▅▆▇◤    时间: 2013-7-28 21:48
啊,是学长,暑假也想加个无线想问下24l01和nrf905哪个会好用些,哪款适合摄像头的数据传输

作者: jamesdeep    时间: 2013-7-30 20:32
︻§▅▆▇◤ 发表于 2013-7-28 21:48
啊,是学长,暑假也想加个无线想问下24l01和nrf905哪个会好用些,哪款适合摄像头的数据传输

24L01一次只能传输32个字节,摄像头不适合无线传输图像,用SD卡吧,电磁倒是完全无压力的

作者: yuanhao0230    时间: 2013-7-30 20:51
我的24L01都攒了一年的灰灰了,627398116@qq.com给份源程序参考参考吧
作者: 空相救心    时间: 2013-8-2 12:53
nrf2401多少钱一个
作者: 小苗儿jis    时间: 2013-8-5 10:05
求学长发一份xs128的源程序,顺便把接线图说一下吧
作者: 张艾雄    时间: 2013-8-12 11:45
你用K60写过吗???我怎么连初始化的问题都搞不定呢??急求解决办法,,
作者: 张艾雄    时间: 2013-8-12 15:12
奋斗小青年、 发表于 2013-4-21 23:12
做的第一个实验就是24l01

我用K60的SPI0模块,,怎么连24L01的初始化都搞不出来,,可能是什么问题啊??求指导,,连线没什么问题的,,我用万用表测过好多次了

作者: errowily    时间: 2013-8-14 16:45
大神还在吗  有关 24l01本人也研究好久  使用硬件spi接口 时  需要定义sck  mosi miso ce sck 几个接口吗
有源代码吗 邮箱1527186711@qq.com
作者: 惯性,等待    时间: 2013-8-23 16:34
大神,求代码,搞了好久都搞不出来 邮箱 401675778@qq.com

作者: 小子~    时间: 2013-9-2 02:59
求源代码,搞了好久了,老是出问题,是因为单片机主频太高了吗?1158405356@qq.com.直接移植51的那个不行,看人家移植好的也不行,搞不定。参考能用的吧自己的代码错误找出
作者: 1105795734    时间: 2013-9-2 08:43
楼主  我有个问题 :NRF2401我发送成功了  接收也成功了  为什么发送端接收不到应答信号??
作者: zangfan    时间: 2013-9-2 09:12
楼主是双向同时收发吗
作者: 1249844726    时间: 2013-10-31 13:49
楼主看下程序,发送不出去。
作者: Bboy小康    时间: 2014-1-17 19:33
:):):):)
作者: 在你身边    时间: 2014-11-19 21:11
有STC12c5a的收发程序吗

作者: 在你身边    时间: 2014-11-19 21:19
有STC12c5a的程序吗
作者: 刘筅苼    时间: 2015-1-15 20:48
可以分享下程序吗?   大神    搞了好多天了   还是不行啊
作者: 海洋之心dream    时间: 2015-5-3 20:23
jamesdeep 发表于 2013-7-30 20:32
24L01一次只能传输32个字节,摄像头不适合无线传输图像,用SD卡吧,电磁倒是完全无压力的

用SD卡?不太理解,求楼主指点

作者: jamesdeep    时间: 2015-5-3 20:52
海洋之心dream 发表于 2015-5-3 20:23
用SD卡?不太理解,求楼主指点

无线传输速度太慢,摄像头数据量大,传不过来,SD卡写入速度快,能够满足摄像头大数据要求

作者: lotuse1    时间: 2015-7-6 19:55
你好,还在吗?无线接收端status一直是0x0e 为什么呀?





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2