找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 640|回复: 3
收起左侧

51单片机+TM1680驱动数码显示屏源程序

[复制链接]
ID:369412 发表于 2023-12-9 11:08 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. /***************************************************************************
  2. 深圳天微电子
  3. *文 件 名:TM1680-V1.0
  4. *当前版本:V1.0
  5. *注意事项:1、A1\A0 采用MCU进行控制,实际使用时,可以将A1\A0任意接高低电平,TM1680 ID改为相应指令即可;
  6.             2、该程序采用STC15W芯片模拟IIC协议,IO口为双向IO口(无需设置输入与输出),如果MCU的IO口需要设置输入和输出,则在ACK时需要设置为输入
  7.             3、该芯片支持标准IIC协议
  8.             4、SDA、SCL需要外接上拉电阻;
  9.             5、不同的MCU需要根据芯片时钟频率调整延时时间;
  10. *免责声明:1.此程序为TM1680驱动LED演示程序,仅作参考之用。
  11. ********************************************************************************/

  12. #include <reg52.h>
  13. #include <intrins.h>
  14. #include <tm1680.h>


  15. /***端口定义***/
  16. //sbit SDA=P3^0;   //TM1680通讯端口设置
  17. //sbit SCL=P3^1;

  18. sbit SDA=P1^0;   //TM1680通讯端口设置
  19. sbit SCL=P1^1;

  20. sbit KEY=P3^2;

  21. //sbit MA1=P1^6;
  22. //sbit MA0=P1^7;

  23. ///***按键功能设置***/
  24. //sbit KEY0=P3^2;
  25. //sbit KEY1=P3^3;
  26. //sbit KEY2=P3^6;


  27. /***显示数据***/

  28. unsigned char TM1680perseg[8]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x8};
  29. //unsigned char DispA[8]={0x10,0xFE,0x92,0x92,0xFE,0x92,0x10,0x10};

  30.                       //地址    00    01   02   03   04  05    06   07  08  09   10    11    12   13  14  15   16   17  18    19  20    21   22   23
  31. unsigned char code table0[24]={0xff,0xff,0xff,0xff,0xF0,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};  //0 ok

  32.                       //地址    00    01   02   03   04  05    06   07  08   09   10    11    12   13  14  15   16   17  18    19  20    21   22   23
  33. unsigned char code table1[24]={0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x0C,0xff,0xff,0xff,0x00,0x00,0x00,0xff};  //1 ok

  34.                       //地址    00    01   02   03   04   05   06   07  08   09   10    11   12   13   14   15   16   17  18   19   20   21   22   23
  35. unsigned char code table2[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0c,0xff,0xff,0xff,0xff};  //2 ok
  36.        
  37.                             //地址    00    01   02   03   04   05   06   07  08   09   10    11   12   13  14    15   16   17  18   19   20    21  22   23
  38. unsigned char code table3[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x0C,0xff,0xff,0xff,0xff,0xff,0xff,0xff};  //3 ok
  39.        
  40.                             //地址    00    01   02   03   04   05   06   07  08   09   10    11    12   13   14  15   16   17  18   19   20    21  22   23
  41. unsigned char code table4[24]={0xff,0xf0,0x00,0xff,0xf0,0xff,0xff,0xFF,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0C,0xff,0xff,0xff,0x00,0x00,0x00,0xff};  //4  ok
  42.        
  43.                             //地址    00    01   02   03   04  05    06   07  08   09   10    11    12   13   14  15   16   17  18  19    20    21  22   23
  44. unsigned char code table5[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x0C,0xff,0xff,0xff,0xff,0xff,0xff,0xff};  //5 ok
  45.        
  46.                             //地址    00    01   02   03   04  05    06   07  08   09   10    11    12   13   14  15   16   17  18  19    20    21  22   23
  47. unsigned char code table6[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};   //6  ok
  48.        
  49.                             //地址    00    01   02   03   04  05    06   07  08   09   10    11    12   13   14  15   16   17  18  19    20    21  22   23
  50. unsigned char code table7[24]={0xff,0xff,0xff,0xFF,0xF0,0x00,0x00,0xFF,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x0C,0xff,0xff,0xff,0x00,0x00,0x00,0xff};   //7  ok
  51.        
  52.                             //地址     00   01   02   03   04  05    06   07  08   09   10    11   12   13   14  15   16    17   18  19    20    21  22   23
  53. unsigned char code table8[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};   //8 ok
  54.        
  55.                             //地址     00   01   02   03   04  05    06   07  08   09   10    11   12   13   14  15   16    17   18  19    20    21  22   23
  56. unsigned char code table9[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0C,0xff,0xff,0xff,0xff,0xff,0xff,0xff};   //9 ok

  57.        
  58. unsigned char  KEY_TEMP;
  59. /*******************************/
  60. /******        函数功能:延时函数 *****/
  61. /*******************************/
  62. void delayms(unsigned int n)  
  63. {
  64.         unsigned int i;
  65.         while(n--)
  66.         {
  67.                 for(i=0;i<300;i++);
  68.         }
  69. }

  70. /*******************************/
  71. /******        函数功能:延时函数 *****/
  72. /*******************************/
  73. void delayus(unsigned char n)  //256
  74. {
  75.         while (--n)
  76.         {
  77.                 _nop_();
  78.         }
  79. }

  80. /*******************************/
  81. /******        函数功能:起始操作  *****/
  82. /*******************************/

  83. void TM1680start(void)
  84. {
  85.     SDA=1;  
  86.           SCL=1;     
  87.     SDA=1;
  88.           delayus(4);
  89.     delayus(10);
  90.     SDA=0;
  91.     delayus(14);  //起始信号,必须大于4.7us
  92.     SCL=0;
  93. }

  94. /*******************************/
  95. /******        函数功能:反馈操作  *****/
  96. /*******************************/
  97. void Ack(void)
  98. {
  99.     SCL = 0;  
  100.     delayus(8);     
  101.     SCL = 1;                  
  102.     delayus(8);
  103.                 while(SDA);
  104.                 SCL=0;
  105.                 delayus(15);
  106. }


  107. /*******************************/
  108. /******        函数功能:反馈操作  *****/
  109. /*******************************/
  110. /*void TM1680SetAck(bit ack)
  111. {
  112.     SCL=0; delayus(5);
  113.     SDA = ack;                  //写应答信号
  114.     SCL = 1;                    //拉高时钟线
  115.     delayus(5);                 //延时
  116.     SCL = 0;                    //拉低时钟线
  117.     delayus(5);                 //延时
  118. }*/

  119. /*******************************/
  120. /******        函数功能:停止操作  *****/
  121. /*******************************/
  122. void TM1680stop(void)
  123. {
  124.     SDA=0;
  125.           SCL=1;
  126.     delayus(10);
  127.     SDA=1;      //停止信号,大于5us
  128.     delayus(10);
  129.     SCL=1;
  130.           SDA=1;
  131. }



  132. /*******************************/
  133. /******        函数功能:送数据    *****/
  134. /*******************************/
  135. void TM1680SendByte(unsigned char sbyte)
  136. {
  137.     unsigned char i=0;
  138.     for(i=0; i<8; i++)
  139.     {
  140.         SCL=0;delayus(2);
  141.         if(sbyte&0x80)
  142.         {
  143.                SDA=1;   //高位先发
  144.         }else{
  145.                 SDA=0;
  146.         }
  147.         delayus(5);
  148.         SCL=1;
  149.         delayus(5); //高电平的时间大于4us
  150.         sbyte<<=1;   
  151.         delayus(3);
  152.     }
  153.     SCL=0; delayus(5);
  154.     SDA=0; delayus(5);
  155. }



  156. /*******************************/
  157. /******        函数功能:  读操作  *****/
  158. /*******************************/
  159. /*unsigned char  TM1680RecvByte(void)
  160. {
  161.                 unsigned char i=0, sbyte;
  162.    
  163.         SDA=1;delayus(6);
  164.         for(i=0; i<8; i++)
  165.         {
  166.            SCL=0;delayus(6);
  167.             if(SDA)
  168.             {
  169.                 sbyte |= 0x01 ;   //置1
  170.             }else{
  171.                 sbyte &= 0xfe;    //置0
  172.             }
  173.             delayus(3);
  174.             SCL=1;
  175.             delayus(5); //高电平的时间大于4us
  176.             sbyte<<=1;
  177.         }
  178.         SCL=0;
  179.         return sbyte;
  180. }*/
  181. /******************************底层函数结束**************************/


  182. /******************************功能函数**************************/
  183. /***单字节写操作函数***/
  184. /***写命令函数:开始--ID-ACK--命令-ACK--结束***/
  185. /****************************************************************/
  186. /*
  187. void TM1680WriteCmd(unsigned char scmd)
  188. {
  189.         TM1680start();

  190.         TM1680SendByte(TM1680ID);     
  191.         Ack();

  192.         TM1680SendByte(scmd);  
  193.         Ack();

  194.         TM1680stop();
  195. }*/

  196. /*************  写一个字节数据:***********************/
  197. /********** 开始--ID-ACK-内部地址-ACK--数据-ACK-结束**/
  198. /***************************************************/
  199.        
  200.        
  201. void TM1680WriteOneByte(unsigned char faddr, unsigned char sdate)
  202. {  
  203.     TM1680start();
  204.    
  205.     TM1680SendByte(TM1680ID);     //写TM1680器件地址
  206.     Ack();

  207.     TM1680SendByte(faddr);  //eeprom 地址
  208.     Ack();
  209.    
  210.     TM1680SendByte(sdate); //写数据
  211.     Ack();
  212.    
  213.     TM1680stop();
  214. }


  215. /******************************************/
  216. /****   函数功能:函数功能:页操作   *******/
  217. /*****************************************/
  218.          
  219. void TM1680PageAllWrite(unsigned char faddr, unsigned char sdat1,unsigned char sdat2,unsigned char cnt)
  220. {
  221.     unsigned char i=0;
  222.     TM1680start();
  223.    
  224.     TM1680SendByte(TM1680ID);  
  225.     Ack();

  226.     TM1680SendByte(faddr);  //eeprom 地址
  227.     Ack();

  228.     for(i=0; i<cnt;i++)
  229.     {
  230.        TM1680SendByte(sdat1);  //写数据
  231.                           Ack();
  232.                          TM1680SendByte(sdat2);  //写数据
  233.         Ack();
  234.     }

  235.     TM1680stop();
  236. }



  237. void TM1680PageAll_GD_Write(unsigned char faddr, unsigned char sdat1, unsigned char sdat2,unsigned char cnt)
  238. {
  239.     unsigned char i=0;

  240.     for(i=0; i<cnt; i=i+2)
  241.     {
  242.        TM1680WriteOneByte( faddr+i, sdat1);
  243.                          TM1680WriteOneByte( faddr+2, sdat2);
  244.                        
  245.     }

  246.     TM1680stop();
  247. }


  248. /******************************************/
  249. /****   按键函数功能:函数功能:  按键 *******/
  250. /*****************************************/
  251.          
  252. void KEY_DEL()
  253. {

  254.   if(KEY==0)
  255.     {
  256.                  delayus(30);
  257.           if(KEY==0);
  258.     {
  259.                   delayus(10);
  260.                           while(KEY==0);
  261.                           KEY_TEMP++;               
  262.                 }
  263.         }
  264. if( KEY_TEMP==20)
  265.         KEY_TEMP=0;
  266.                  
  267. }                 


  268. /********************************************************/
  269. /****   函数功能: 先初始化后  再写命令+写数据     *******/
  270. /******************************************************/
  271. /*void TM1680WriteCmdDate(unsigned char faddr, unsigned char sdate, unsigned char cnt)
  272. {
  273.    unsigned char i=0;       
  274.         TM1680start();
  275.         TM1680SendByte(TM1680ID);        
  276.         Ack();
  277.         TM1680SendByte(SYSDIS);  
  278.         Ack();
  279.         TM1680SendByte(COM8NMOS);
  280.         Ack();
  281.         TM1680SendByte(RCMODE1);
  282.         Ack();
  283.         TM1680SendByte(SYSEN);  
  284.         Ack();
  285.         TM1680SendByte(LEDON);
  286.         Ack();
  287.         TM1680SendByte(PWM16);   
  288.         Ack();
  289.         TM1680SendByte(BLINKOFF);
  290.         Ack();
  291.        
  292.         TM1680SendByte(faddr);
  293.         Ack();
  294.          
  295.         for(i=0; i<cnt; i++)
  296.         {
  297.                         TM1680SendByte(sdate);
  298.                         Ack();       
  299.         }
  300.        
  301.         TM1680stop();
  302. }
  303.         */

  304. /******************************************/
  305. /****    函数功能: TM1680 初始化    *******/
  306. /*****************************************/

  307. void TM1680Init(void)
  308. {
  309.         TM1680start();

  310.         TM1680SendByte(TM1680ID);        
  311.         Ack();
  312.         TM1680SendByte(SYSDIS);  
  313.         Ack();
  314.         TM1680SendByte(COM16NMOS);   //根据需求进行选择
  315.         Ack();
  316.         TM1680SendByte(RCMODE1);
  317.         Ack();
  318.         TM1680SendByte(SYSEN);  
  319.         Ack();
  320.         TM1680SendByte(LEDON);
  321.         Ack();
  322. //        TM1680SendByte(LEDOFF);
  323. //        Ack();
  324.         TM1680SendByte(PWM12);   
  325.         Ack();
  326.         TM1680SendByte(BLINKOFF);
  327.         Ack();
  328.        
  329.         TM1680stop();       
  330.         delayms(50);
  331. }


  332. /******************************************/
  333. /*************    PWM调节测试   ***********/
  334. /*****************************************/

  335. //void PWMTest(unsigned char sTime)
  336. //{
  337. //         unsigned char i=0;
  338. //       
  339. //         for(i=0;i<16;i++)
  340. //        {
  341. //                        TM1680WriteCmd(PWM01 | i);
  342. //                        delayms(sTime);
  343. //                        delayms(sTime);
  344. //        }
  345. //}

  346. /******************************************/
  347. /*************    TM1680ID判断    *********/
  348. /*****************************************/

  349. //void TM1680IDChange(void)
  350. //{
  351. //                switch(TM1680ID)
  352. //                {
  353. //                                case 0xe4: MA1=0; MA0=0; break;
  354. //                                case 0xe5: MA1=0; MA0=1; break;
  355. //                                case 0xe6: MA1=1; MA0=0; break;
  356. //                                case 0xe7: MA1=1; MA0=1; break;
  357. //                                default:break;
  358. //                }
  359. //}

  360. /******************************************/
  361. /********        函数功能:逐渐点亮每一段 *********/
  362. /*****************************************/
  363. void TM1680PerDisp(void)
  364. {
  365.           unsigned char i=0,j=0;
  366.           unsigned char faddr=0x00, fdate=TM1680perseg[0];
  367.                 for(i=0;i<24; i++)
  368.                 {
  369.                                 for(j=0;j<8;j++)
  370.                                 {
  371.                                         fdate=fdate|TM1680perseg[j];
  372.                                         TM1680WriteOneByte(faddr,fdate);
  373.                                         delayms(20);
  374.                                 }
  375.                                 faddr+=2;
  376.                                 fdate=TM1680perseg[0];
  377.                 }
  378. }




  379. void TM1680_SZR(unsigned char *ss)  small
  380. {
  381.         unsigned char dd;
  382.   unsigned char *tab;
  383.   tab=ss;
  384.        
  385.          for(dd=0;dd<24;dd++)
  386.                 {
  387.                           TM1680WriteOneByte(4*dd,*tab) ;
  388.                           tab = tab+1;
  389.                 }
  390.         }
  391.        
  392. ///////////////////////////////////////////////
  393.        
  394. void TM1680_SZG(unsigned char *ss)  small
  395. {
  396.         unsigned char dd;
  397.   unsigned char *tab;
  398.   tab=ss;
  399.        
  400.          for(dd=0;dd<24;dd++)
  401.                 {
  402.                           TM1680WriteOneByte((4*dd+2),*tab) ;
  403.                           tab = tab+1;
  404.                 }
  405.         }
  406.        
  407.        
  408.        
  409.        
  410.        
  411.        

  412. //void TM1680_SZ0(void)
  413. //{
  414. //  TM1680WriteOneByte(0,table0[0]);
  415. //        TM1680WriteOneByte(4,table0[1]);
  416. //  TM1680WriteOneByte(8,table0[2]);
  417. //        TM1680WriteOneByte(12,table0[3]);       
  418. //  TM1680WriteOneByte(16,table0[4]);
  419. //        TM1680WriteOneByte(20,table0[5]);
  420. //  TM1680WriteOneByte(24,table0[6]);
  421. //        TM1680WriteOneByte(28,table0[7]);
  422. //  TM1680WriteOneByte(32,table0[8]);
  423. //        TM1680WriteOneByte(36,table0[9]);       
  424. //  TM1680WriteOneByte(40,table0[10]);
  425. //        TM1680WriteOneByte(44,table0[11]);       
  426. //  TM1680WriteOneByte(48,table0[12]);
  427. //        TM1680WriteOneByte(52,table0[13]);
  428. //  TM1680WriteOneByte(56,table0[14]);
  429. //        TM1680WriteOneByte(60,table0[15]);       
  430. //  TM1680WriteOneByte(64,table0[16]);
  431. //        TM1680WriteOneByte(68,table0[17]);       
  432. //  TM1680WriteOneByte(72,table0[18]);
  433. //        TM1680WriteOneByte(76,table0[19]);
  434. //  TM1680WriteOneByte(80,table0[20]);
  435. //        TM1680WriteOneByte(84,table0[21]);       
  436. //  TM1680WriteOneByte(88,table0[22]);
  437. //        TM1680WriteOneByte(92,table0[23]);
  438. //       
  439. //}
  440. //       
  441. //       
  442. //       
  443.        
  444.        
  445. ////////////////////////////////////////////
  446. //////////////     主函数    ///////////////
  447. ///////////////////////////////////////////
  448. void main(void)
  449. {
  450.         //unsigned char i=0,j=0,//fdate=0x10;
  451.         //TM1680IDChange();
  452.         delayms(200);       
  453.        
  454.         TM1680Init();
  455.        
  456.         TM1680PageAllWrite(0x00, 0x00, 0x00,48);  //上电清零
  457.         //TM1680PageAll_GD_Write(0x00, 0x00, 0x00,96);
  458.         delayms(20);
  459.        
  460.         TM1680PageAllWrite(0x00, 0xff,0xff, 48);  //上电全部显示
  461.         //TM1680PageAll_GD_Write(0x00, 0xFF, 0xff,96);
  462.         delayms(800);
  463.        
  464.         TM1680Init();
  465.         TM1680PageAllWrite(0x00, 0x00, 0x00,48);  //上电清零
  466.         delayms(20);
  467.        
  468.         TM1680PageAllWrite(0x00, 0xff,0x00, 48);
  469.         //TM1680PageAll_GD_Write(0x00, 0x00, 0x00,96);
  470.         ///delayms(20);
  471.        
  472.         ///TM1680PageAll_GD_Write(0x00, 0xFF,0x00,96);
  473.         delayms(800);
  474.        
  475.        
  476.                 TM1680Init();
  477.         TM1680PageAllWrite(0x00, 0x00, 0x00,48);  //上电清零
  478.         delayms(20);
  479.         TM1680PageAllWrite(0x00, 0x00,0xff, 48);  //清零
  480.         //TM1680PageAll_GD_Write(0x00, 0x00, 0xFF,96);
  481.    delayms(800);
  482.         //TM1680PerDisp();                     //每一段显示
  483.         //TM1680Init();
  484.         TM1680Init();
  485.         TM1680PageAllWrite(0x00, 0x00, 0x00,48);  //上电清零
  486.         delayms(20);

  487. //        TM1680WriteOneByte(0,0xff);
  488. //        TM1680WriteOneByte(4,0xff);
  489. //        TM1680WriteOneByte(8,0xff);
  490. //       
  491. //       
  492. //       
  493.        
  494.        
  495.        
  496.         //TM1680WriteOneByte(4,0xff);
  497.         //  delayms(20);
  498.        
  499.        
  500.         //TM1680_SZ0( );
  501.                
  502.         while(1)
  503.         {

  504.    KEY_DEL() ;

  505.                 switch(KEY_TEMP)
  506.           {               
  507.                
  508.                   case 0:
  509.                          {
  510.         TM1680_SZR(table0);
  511.                                  
  512.                          }
  513.                         break;
  514.                
  515.                   case 1:
  516.                          {
  517.                          
  518.          TM1680_SZR(table1);               
  519.                
  520.                                
  521.                          }
  522.                         break;
  523.                

  524.                   case 2:
  525.                          {

  526.                TM1680_SZR(table2);         
  527.                          }
  528.                  break;
  529.                          

  530.                   case 3:
  531.                          {

  532.          TM1680_SZR(table3);                 
  533.                          }
  534.                  break;                         
  535.                          

  536.                   case 4:
  537.                          {
  538.          TM1680_SZR(table4);               
  539.                                          
  540.                          }
  541.                  break;                         
  542.                          
  543.                   case 5:
  544.                          {
  545.          TM1680_SZR(table5);               
  546.                                                                        
  547.                          }
  548.                  break;       

  549.                   case 6:
  550.                          {
  551.          TM1680_SZR(table6);               
  552.                                                                                                        
  553.                          }
  554.                  break;       


  555.                   case 7:
  556.                          {
  557.          TM1680_SZR(table7);               
  558.                                                                        
  559.                          }
  560.                  break;       
  561.        
  562.                   case 8:
  563.                          {
  564.          TM1680_SZR(table8);               
  565.                                                                        
  566.                          }
  567.                  break;               
  568.        
  569.                           case 9:
  570.                          {
  571.          TM1680_SZR(table9);               
  572.                          }
  573.                  break;       
  574.        
  575.        
  576.                
  577.                   case 10:
  578.                          {
  579.                                 TM1680PageAllWrite(0x00, 0x00, 0x00,48);  //上电清零
  580.                 delayms(20);
  581.                                  
  582.         TM1680_SZG(table0);
  583.                                  
  584.                          }
  585.                         break;
  586.                
  587. ……………………

  588. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
原理图: 无
仿真: 无
代码: TM1680CX-16X24.zip (44.66 KB, 下载次数: 36)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:230398 发表于 2024-2-29 11:23 | 显示全部楼层
下载学习一下!
回复

使用道具 举报

ID:1064915 发表于 2024-2-29 16:11 | 显示全部楼层
1680多重的ROW/COM模式(32ROW/8COM和24ROW/16COM),可以给个原理图
回复

使用道具 举报

ID:433219 发表于 2024-3-1 15:07 | 显示全部楼层
多重的ROW/COM模式    什么意思?初次没看懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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