[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+ 3 OLED

[复制链接]
 楼主| 比神乐 发表于 2020-8-9 14:40 | 显示全部楼层 |阅读模式
今天搞了一下OLED显示,I2C模拟时序。
SDA:PC5;
SCL:PC4.
代码:
  1. #define                 OLED_SCLK_Set()                        PORTC.OUTSET = PIN4_bm        //PC4(SCL)输出高
  2. #define                        OLED_SCLK_Clr()                        PORTC.OUTCLR = PIN4_bm        //PC4(SCL)输出低
  3. #define                        OLED_SDIN_Set()                        PORTC.OUTSET = PIN5_bm        //PC5(SDA)输出高
  4. #define                        OLED_SDIN_Clr()                        PORTC.OUTCLR = PIN5_bm;        //PC5(SDA)输出高
  5. #define                 OLED_READ_SDIN()                (PORTC.IN & (PIN5_bm))        //读取PC5(SDA)电平
  1. #include "i2c_software.h"
  2. #include <avr/io.h>

  3. /*
  4.         @brief                        延迟1us
  5.         @param                        无
  6.         @retval                        无
  7. */
  8. static void delay(unsigned char num)
  9. {
  10.         uint8_t i = 5;
  11.         //while(num--)
  12.         //{
  13.         //        while(i--);
  14.         //}
  15.         //__nop();
  16.         for(;i>0;i--);
  17.        
  18. }


  19. /*
  20.         @brief                        ms延迟函数
  21.         @param                        无
  22.         @retval                        无
  23. */
  24. static void delay_ms(unsigned int ms)//延迟函数,MS级别
  25. {
  26.         unsigned int x,y;
  27.         for(x = ms;x>0;x--)
  28. {
  29.                 for(y = 12000;y>0;y--);
  30. }
  31. }


  32. /*
  33.         @brief                        初始化OLED与单片机的IO接口
  34.         @param                        无
  35.         @retval                        无
  36. */
  37. void OLED_GPIO_Init(void)
  38. {
  39.        
  40. }


  41. /*
  42.         @brief                        模拟IIC起始信号
  43.         @param                        无
  44.         @retval                        无
  45. */
  46. void OLED_IIC_Start(void)
  47. {

  48.         OLED_SCLK_Set();        //时钟线置高
  49.         OLED_SDIN_Set();        //信号线置高
  50.         delay(1);        //延迟1us
  51.         OLED_SDIN_Clr();        //信号线置低
  52.         delay(1);        //延迟1us
  53.         OLED_SCLK_Clr();        //时钟线置低
  54.         delay(1);        //延迟1us
  55. }


  56. /*
  57.         @brief                        模拟IIC停止信号
  58.         @param                        无
  59.         @retval                        无
  60. */
  61. void OLED_IIC_Stop(void)
  62. {
  63.         OLED_SDIN_Clr();        //信号线置低
  64.         delay(1);        //延迟1us
  65.         OLED_SCLK_Set();        //时钟线置高
  66.         delay(1);        //延迟1us
  67.         OLED_SDIN_Set();        //信号线置高
  68.         delay(1);        //延迟1us
  69. }


  70. /*
  71.         @brief                        模拟IIC读取从机应答信号
  72.         @param                        无
  73.         @retval                        无
  74. */
  75. static unsigned char IIC_Wait_Ack(void)
  76. {
  77.         unsigned char ack;

  78.         OLED_SCLK_Clr();        //时钟线置低
  79.         delay(1);        //延迟1us
  80.         OLED_SDIN_Set();        //信号线置高
  81.         delay(1);        //延迟1us
  82.         OLED_SCLK_Set();        //时钟线置高
  83.         delay(1);        //延迟1us
  84.         /* Configure SW0 as input */
  85.         PORTC.DIRCLR = PIN5_bm;
  86.         /* Enable the internal pull-up for PC7 */
  87.         PORTC.PIN5CTRL |= PORT_PULLUPEN_bm;
  88.         delay(1);        //延迟1us
  89.         if(OLED_READ_SDIN())        //读取SDA的电平
  90.                 ack = IIC_NO_ACK;        //如果为1,则从机没有应答
  91.         else
  92.                 ack = IIC_ACK;                //如果为0,则从机应答

  93.         OLED_SCLK_Clr();//时钟线置低
  94.         delay(1);        //延迟1us
  95.         PORTC.DIRSET = PIN5_bm;
  96.         delay(1);        //延迟1us
  97.         return ack;        //返回读取到的应答信息
  98. }


  99. /*
  100.         @brief                        模拟IIC主机发送应答信号
  101.         @param                        无
  102.         @retval                        无
  103. */
  104. // static void IIC_Send_Ack(unsigned char ack)
  105. // {
  106. //         OLED_SCLK_Clr();        //时钟线置低
  107. //         delay(1);        //延迟1us

  108. //         if(ack == IIC_ACK)        //根据情况发送应答/不应答
  109. //                 OLED_SDIN_Clr();        //应答
  110. //         else
  111. //                 OLED_SDIN_Set();        //不应答
  112. //         delay(1);        //延迟1us

  113. //         OLED_SCLK_Set();        //时钟线置高,发送应答/不应答信号
  114. //         delay(1);        //延迟1us
  115. //         OLED_SCLK_Clr();        //时钟线置低
  116. //         delay(1);        //延迟1us
  117. // }


  118. /*
  119.         @brief                        IIC写入一个字节
  120.         @param                        IIC_Byte:写入的字节
  121.         @retval                        无
  122. */
  123. void Write_IIC_Byte(unsigned char IIC_Byte)
  124. {
  125.         unsigned char i;  //定义变量
  126.         for(i=0;i<8;i++) //for循环8次
  127.         {
  128.                 OLED_SCLK_Clr();        //时钟线置低,为传输数据做准备
  129.                 delay(1);        //延迟1us

  130.                 if(IIC_Byte & 0x80)        //读取最高位
  131.                           OLED_SDIN_Set();//最高位为1
  132.                 else
  133.                         OLED_SDIN_Clr();        //最高位为0

  134.                 IIC_Byte <<= 1;  //数据左移1位
  135.                 delay(1);        //延迟1us
  136.                 OLED_SCLK_Set(); //时钟线置高,产生上升沿,把数据发送出去
  137.                 delay(1);        //延迟1us
  138.         }
  139.         OLED_SCLK_Clr();        //时钟线置低
  140.         delay(1);        //延迟1us

  141.         while(IIC_Wait_Ack());        //从机应答
  142. }
  1. /********************************************************
  2.   * [url=home.php?mod=space&uid=288409]@file[/url]                oled.c
  3.   * [url=home.php?mod=space&uid=187600]@author[/url]              LGG
  4.   * [url=home.php?mod=space&uid=895143]@version[/url]             V1.0.0
  5.   * [url=home.php?mod=space&uid=130263]@DATA[/url]                2017年06月6号
  6.   * [url=home.php?mod=space&uid=247401]@brief[/url]               OELD文件
  7.   *
  8. ********************************************************/


  9. /*includes----------------------------------------------*/
  10. #include "oled.h"
  11. #include "oledfont.h"
  12. /*definition--------------------------------------------*/

  13. /*
  14.         @brief                        延迟1us
  15.         @param                        无
  16.         @retval                        无
  17. */
  18. static void delay(unsigned char num)
  19. {
  20.         //uint8_t i = 5;
  21.         //while(num--)
  22.         //{
  23.         //        while(i--);
  24.         //}
  25.         //__nop();
  26.         __nop();
  27.        
  28. }


  29. /*
  30.         @brief                        ms延迟函数
  31.         @param                        无
  32.         @retval                        无
  33. */
  34. static void delay_ms(unsigned int ms)//延迟函数,MS级别
  35. {
  36.         unsigned int x,y;
  37.         for(x = ms;x>0;x--)
  38. {
  39.                 for(y = 12000;y>0;y--);
  40. }
  41. }

  42. /****************************以下为OLED应用层*******************************************/
  43. /*
  44.         @brief                        IIC写入命令
  45.         @param                        IIC_Command:写入的命令
  46.         @retval                        无
  47. */
  48. static void Write_IIC_Command(unsigned char IIC_Command)
  49. {
  50.         #if Software_IIC_EN
  51.        
  52.    OLED_IIC_Start();
  53.    Write_IIC_Byte(0x78);//写入从机地址,SD0 = 0
  54.    Write_IIC_Byte(0x00);//写入命令
  55.    Write_IIC_Byte(IIC_Command);//数据
  56.    OLED_IIC_Stop();  //发送停止信号
  57.         #else
  58.         I2C_GenerateSTART(I2C1,ENABLE);
  59.         I2C_Send_Byte(I2C1,0x78);
  60.         I2C_Send_Byte(I2C1,0x00);
  61.         I2C_Send_Byte(I2C1,IIC_Command);
  62.         I2C_GenerateSTOP(I2C1,ENABLE);
  63.         #endif
  64. }


  65. /*
  66.         @brief                        IIC写入数据
  67.         @param                        IIC_Data:数据
  68.         @retval                        无
  69. */
  70. static void Write_IIC_Data(unsigned char IIC_Data)
  71. {
  72.         #if Software_IIC_EN
  73.    OLED_IIC_Start();
  74.    Write_IIC_Byte(0x78);        //写入从机地址,SD0 = 0
  75.    Write_IIC_Byte(0x40);        //写入数据
  76.    Write_IIC_Byte(IIC_Data);//数据
  77.    OLED_IIC_Stop();                //发送停止信号
  78.         #else
  79.         I2C_GenerateSTART(I2C1,ENABLE);
  80.         I2C_Send_Byte(I2C1,0x78);
  81.         I2C_Send_Byte(I2C1,0x40);
  82.         I2C_Send_Byte(I2C1,IIC_Data);
  83.         I2C_GenerateSTOP(I2C1,ENABLE);
  84.         #endif
  85. }


  86. /*
  87.         @brief                        对OLED写入一个字节
  88.         @param                        dat:数据
  89.                                         cmd:1,写诶数据;0,写入命令
  90.         @retval                        无
  91. */
  92. void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
  93. {
  94.         if(cmd)
  95.           {
  96.        Write_IIC_Data(dat); //写入数据
  97.           }
  98.         else {
  99.        Write_IIC_Command(dat); //写入命令
  100.         }
  101. }


  102. /*
  103.         @brief                        设置数据写入的起始行、列
  104.         @param                        x: 列的起始低地址与起始高地址;0x00~0x0f:设置起始列低地址(在页寻址模式);
  105.                                                 0x10~0x1f:设置起始列高地址(在页寻址模式)
  106.                                         y:起始页地址 0~7
  107.         @retval                        无
  108. */
  109. void OLED_Set_Pos(unsigned char x, unsigned char y)
  110. {
  111.         OLED_WR_Byte(0xb0+y,OLED_CMD);//写入页地址
  112.         OLED_WR_Byte((x&0x0f),OLED_CMD);  //写入列的地址  低半字节
  113.         OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//写入列的地址 高半字节
  114. }                          


  115. /*
  116.         @brief                        开显示
  117.         @param                        无
  118.         @retval                        无
  119. */
  120. void OLED_Display_On(void)
  121. {
  122.         OLED_WR_Byte(0X8D,OLED_CMD);  //设置OLED电荷泵
  123.         OLED_WR_Byte(0X14,OLED_CMD);  //使能,开
  124.         OLED_WR_Byte(0XAF,OLED_CMD);  //开显示
  125. }


  126. /*
  127.         @brief                        关显示
  128.         @param                        无
  129.         @retval                        无
  130. */  
  131. void OLED_Display_Off(void)
  132. {
  133.         OLED_WR_Byte(0XAE,OLED_CMD);  //关显示
  134.         OLED_WR_Byte(0X8D,OLED_CMD);  //设置OLED电荷泵
  135.         OLED_WR_Byte(0X10,OLED_CMD);  //失能,关
  136. }                                            


  137. /*
  138.         @brief                        清屏
  139.         @param                        无
  140.         @retval                        无
  141. */          
  142. void OLED_Clear(void)  
  143. {  
  144.         unsigned char i,n;                    //定义变量
  145.         for(i=0;i<8;i++)  
  146.         {  
  147.                 OLED_WR_Byte (0xb0+i,OLED_CMD);    //从0~7页依次写入
  148.                 OLED_WR_Byte (0x00,OLED_CMD);      //列低地址
  149.                 OLED_WR_Byte (0x10,OLED_CMD);      //列高地址  
  150.                 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); //写入 0 清屏
  151.         }
  152. }


  153. /*
  154.         @brief                        显示一个字符
  155.         @param                        x:起始列
  156.                                         y:起始页,SIZE = 16占两页;SIZE = 12占1页
  157.                                         chr:字符
  158.         @retval                        无
  159. */
  160. void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr)
  161. {             
  162.         unsigned char c=0,i=0;       
  163.                 c=chr-' '; //获取字符的偏移量       
  164.                 if(x>Max_Column-1){x=0;y=y+2;} //如果列数超出了范围,就从下2页的第0列开始

  165.                 if(SIZE ==16) //字符大小如果为 16 = 8*16
  166.                         {
  167.                                 OLED_Set_Pos(x,y);        //从x y 开始画点
  168.                                 for(i=0;i<8;i++)  //循环8次 占8列
  169.                                 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); //找出字符 c 的数组位置,先在第一页把列画完
  170.                                 OLED_Set_Pos(x,y+1); //页数加1
  171.                                 for(i=0;i<8;i++)  //循环8次
  172.                                 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); //把第二页的列数画完
  173.                         }
  174.                 else         //字符大小为 6 = 6*8
  175.                         {       
  176.                                 OLED_Set_Pos(x,y+1); //一页就可以画完
  177.                                 for(i=0;i<6;i++) //循环6次 ,占6列
  178.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA); //把字符画完
  179.                         }
  180. }


  181. /*
  182.         @brief                        计算m^n
  183.         @param                        m:输入的一个数
  184.                                         n:输入数的次方
  185.         @retval                        result:一个数的n次方
  186. */
  187. unsigned int oled_pow(unsigned char m,unsigned char n)
  188. {
  189.         unsigned int result=1;         
  190.         while(n--)result*=m;   
  191.         return result;
  192. }                                  


  193. /*
  194.         @brief                        在指定的位置,显示一个指定长度大小的数
  195.         @param                        x:起始列
  196.                                         y:起始页
  197.                                         num:数字
  198.                                         len:数字的长度
  199.                                         size:显示数字的大小
  200.         @retval                        无
  201. */                  
  202. void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size)
  203. {                
  204.         unsigned char t,temp;  //定义变量
  205.         unsigned char enshow=0;                //定义变量

  206.         for(t=0;t<len;t++)
  207.         {
  208.                 temp=(num/oled_pow(10,len-t-1))%10;//取出输入数的每个位,由高到低
  209.                 if(enshow==0&&t<(len-1)) //enshow:是否为第一个数;t<(len-1):判断是否为最后一个数
  210.                 {
  211.                         if(temp==0) //如果该数为0
  212.                         {
  213.                                 OLED_ShowChar(x+(size/2)*t,y,' ');//显示 0 ;x+(size2/2)*t根据字体大小偏移的列数(8)
  214.                                 continue; //跳过剩下语句,继续重复循环(避免重复显示)
  215.                         }else enshow=1;
  216.                 }
  217.                  OLED_ShowChar(x+(size/2)*t,y,temp+'0'); //显示一个位;x+(size2/2)*t根据字体大小偏移的列数(8)
  218.         }
  219. }


  220. /*
  221.         @brief                        显示字符串
  222.         @param                        x:起始列
  223.                                         y:起始页
  224.                                         *chr:第一个字符首地址
  225.         @retval                        无
  226. */
  227. void OLED_ShowString(unsigned char x,unsigned char y,unsigned char *chr)
  228. {
  229.         unsigned char j=0; //定义变量

  230.         while (chr[j]!='\0') //如果不是最后一个字符
  231.         {               
  232.                 OLED_ShowChar(x,y,chr[j]); //显示字符
  233.                 x+=8; //列数加8 ,一个字符的列数占8
  234.                 if(x>=128){x=0;y+=2;} //如果x大于等于128,切换页,从该页的第一列显示
  235.                 j++; //下一个字符
  236.         }
  237. }


  238. /*
  239.         @brief                        显示中文
  240.         @param                        x:起始列;一个字体占16列
  241.                                         y:起始页;一个字体占两页
  242.                                         no:字体的序号
  243.         @retval                        无
  244. */
  245. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
  246. {                                  
  247.         unsigned char t,adder=0; //定义变量

  248.         OLED_Set_Pos(x,y);        //从 x y 开始画点,先画第一页
  249.     for(t=0;t<16;t++) //循环16次,画第一页的16列
  250.                 {
  251.                         OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);//画no在数组位置的第一页16列的点
  252.                         adder+=1; //数组地址加1
  253.              }       
  254.                 OLED_Set_Pos(x,y+1); //画第二页
  255.     for(t=0;t<16;t++)//循环16次,画第二页的16列
  256.                 {       
  257.                         OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);//画no在数组位置的第二页16列的点
  258.                         adder+=1;//数组地址加1
  259.         }                                       
  260. }


  261. /*
  262.         @brief                        显示图片
  263.         @param                        x0:起始列地址
  264.                                         y0:起始页地址
  265.                                         x1:终止列地址
  266.                                         y1:终止页地址
  267.                                         BMP[]:存放图片代码的数组
  268.         @retval                        无
  269. */
  270. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
  271. {        
  272.         unsigned int j=0; //定义变量
  273.         unsigned char x,y; //定义变量
  274.   
  275.         if(y1%8==0) y=y1/8;   //判断终止页是否为8的整数倍
  276.          else y=y1/8+1;

  277.                 for(y=y0;y<y1;y++) //从起始页开始,画到终止页
  278.                 {
  279.                         OLED_Set_Pos(x0,y); //在页的起始列开始画
  280.                            for(x=x0;x<x1;x++) //画x1 - x0 列
  281.                             {
  282.                                     OLED_WR_Byte(BMP[j++],OLED_DATA);        //画图片的点           
  283.                             }
  284.                 }
  285. }


  286. /*
  287.         @brief                        OLED初始化函数
  288.         @param                        无
  289.         @retval                        无
  290. */                                    
  291. void OLED_Init(void)
  292. {
  293.         #if Software_IIC_EN
  294.         OLED_GPIO_Init();        //GPIO口初始化,软件i2c
  295.         #else
  296.         I2CInitMasterMode();
  297.         #endif
  298.         delay_ms(200);        //延迟,由于单片机上电初始化比OLED快,所以必须加上延迟,等待OLED上复位完成

  299.         OLED_WR_Byte(0xAE,OLED_CMD);        //关闭显示

  300.         OLED_WR_Byte(0x00,OLED_CMD);        //设置低列地址
  301.         OLED_WR_Byte(0x10,OLED_CMD);        //设置高列地址
  302.         OLED_WR_Byte(0x40,OLED_CMD);        //设置起始行地址
  303.         OLED_WR_Byte(0xB0,OLED_CMD);        //设置页地址

  304.         OLED_WR_Byte(0x81,OLED_CMD);         // 对比度设置,可设置亮度
  305.         OLED_WR_Byte(0xFF,OLED_CMD);        //  265  

  306.         OLED_WR_Byte(0xA1,OLED_CMD);        //设置段(SEG)的起始映射地址;column的127地址是SEG0的地址
  307.         OLED_WR_Byte(0xA6,OLED_CMD);        //正常显示;0xa7逆显示

  308.         OLED_WR_Byte(0xA8,OLED_CMD);        //设置驱动路数(16~64)
  309.         OLED_WR_Byte(0x3F,OLED_CMD);        //64duty
  310.        
  311.         OLED_WR_Byte(0xC8,OLED_CMD);        //重映射模式,COM[N-1]~COM0扫描

  312.         OLED_WR_Byte(0xD3,OLED_CMD);        //设置显示偏移
  313.         OLED_WR_Byte(0x00,OLED_CMD);        //无偏移
  314.        
  315.         OLED_WR_Byte(0xD5,OLED_CMD);        //设置震荡器分频
  316.         OLED_WR_Byte(0x80,OLED_CMD);        //使用默认值
  317.        
  318.         OLED_WR_Byte(0xD9,OLED_CMD);        //设置 Pre-Charge Period
  319.         OLED_WR_Byte(0xF1,OLED_CMD);        //使用官方推荐值
  320.        
  321.         OLED_WR_Byte(0xDA,OLED_CMD);        //设置 com pin configuartion
  322.         OLED_WR_Byte(0x12,OLED_CMD);        //使用默认值
  323.        
  324.         OLED_WR_Byte(0xDB,OLED_CMD);        //设置 Vcomh,可调节亮度(默认)
  325.         OLED_WR_Byte(0x40,OLED_CMD);        ////使用官方推荐值
  326.        
  327.         OLED_WR_Byte(0x8D,OLED_CMD);        //设置OLED电荷泵
  328.         OLED_WR_Byte(0x14,OLED_CMD);        //开显示
  329.        
  330.         OLED_WR_Byte(0xAF,OLED_CMD);        //开启OLED面板显示
  331.         OLED_Clear();        //清屏
  332.         OLED_Set_Pos(0,0);          //设置数据写入的起始行、列
  333. }  


  334. /*
  335.         @brief                        OLED滚屏函数,范围0~1页,水平向左
  336.         @param                        无
  337.         @retval                        无
  338. */       
  339. void OLED_Scroll(void)
  340. {
  341.         OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
  342.         OLED_WR_Byte(0x27,OLED_CMD);        //水平向左滚动
  343.         OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  344.         OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
  345.         OLED_WR_Byte(0x00,OLED_CMD);        //滚动时间间隔
  346.         OLED_WR_Byte(0x01,OLED_CMD);        //终止页 1
  347.         OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  348.         OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
  349.         OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
  350. }

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include "oled.h"

  4. #define uchar unsigned char
  5. #define uint unsigned int




  6. static void PORT_init(void);
  7. static void EVSYS_init(void);

  8. static void SYSTEM_init(void);




  9. static void PORT_init(void)
  10. {
  11.    
  12.     /* Configure LED0 pin as output */
  13.     PORTC.DIRSET = PIN4_bm|PIN5_bm;
  14.    
  15. }

  16. static void EVSYS_init(void)
  17. {
  18.     EVSYS.CHANNEL3 = EVSYS_CHANNEL3_PORTC_PIN7_gc;
  19.     EVSYS.USERTCB0CAPT = EVSYS_USER_CHANNEL3_gc;
  20. }



  21. static void SYSTEM_init(void)
  22. {
  23.     PORT_init();
  24.     EVSYS_init();
  25.    
  26. }





  27. int main(void)
  28. {
  29.        
  30.        
  31.     SYSTEM_init();
  32.        
  33.         OLED_Init();
  34.         OLED_Clear();
  35.        
  36.         OLED_ShowString(10,1,"I Love You!");// OLED TEST

  37.     while (1)
  38.     {
  39.                
  40.     }
  41. }
效果图:


本帖子中包含更多资源

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

×
 楼主| 比神乐 发表于 2020-8-9 19:38 | 显示全部楼层
bellstudio 发表于 2020-8-9 19:17
事件系统在这里发挥的作用是?。。。。

没什么作用。我只是没有去掉
电子xiaocainiao 发表于 2020-8-9 22:26 | 显示全部楼层
我觉得I2C中那个1us的延时是可以去掉的,随便一个指令就是us级别了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部