找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5074|回复: 18
收起左侧

大家好,我现在在做一个光敏电阻智能窗帘,问题是到了晚上电机启动,比如启动到达....

[复制链接]
ID:191929 发表于 2017-5-6 19:42 | 显示全部楼层 |阅读模式
还请大家帮帮忙,先谢谢了
回复

使用道具 举报

ID:191929 发表于 2017-5-6 19:45 | 显示全部楼层

定时问题

本帖最后由 惜缘2008 于 2017-5-6 20:06 编辑

请大家帮忙,自己弄了好久了,问题是:到了晚上电机启动,到达指定位置电机要停下来,我用定时器来做,无奈停在定时循环出不来,问题在程序主函数里边,(主函数keyscan()后面的if语句)---电机启动后停不下来了
回复

使用道具 举报

ID:191929 发表于 2017-5-6 19:50 | 显示全部楼层
程序格式不对,我重发一遍,大家见谅,见怪不怪
  1. #include <reg52.h>       //51芯片管脚定义头文件
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code zheng[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  5. uchar code fan[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
  6. sbit  key1   = P3^0;       //正转
  7. sbit  key2   = P3^1;       //反转----按键分时复用
  8. sbit  key3   = P3^2;       //停止
  9. sbit  key4   = P3^3;       //时间调整按钮
  10. sbit beep=P2^3; sbit dsds=P2^4;
  11. sbit dsrw=P2^2; sbit dsas=P2^1;
  12. sbit dscs=P2^0; sbit irq=P3^3;
  13. sbit  rd=P3^7;  sbit guang_dq=P3^6;//光敏电阻输出
  14. sbit DQ=P2^5;//ds18b20与单片机连接口
  15. sbit lcden=P3^4;sbit lcdrs=P3^5;
  16. sbit dula=P2^6;sbit wela=P2^7;
  17. char shi,fen,miao,nian,yue,ri;
  18. uchar num,flag,flag1,flag_ting,count;
  19. uint temp,aa;//温度值
  20. uchar tflag;//温度正负标志
  21. uchar code table[]="  :  :   T:     ";
  22. uchar code table1[]="20  -  -  L:   G";
  23. void write_ds(uchar,uchar);
  24. uchar read_ds(uchar);
  25. uchar set_alarm(uchar,uchar,uchar);
  26. uchar read_time(uchar);
  27. void delay(uint z)//延时函数--1ms
  28. {
  29.   uint x,y;
  30.   for(x=z;x>0;x--)
  31.      for(y=110;y>0;y--);
  32. }
  33. void didi()
  34. {
  35.   beep=0;
  36.   delay(200);
  37.   beep=1;
  38. }
  39. void wr_com(uchar com)//写指令//
  40. {
  41.     delay(1);
  42.     lcdrs=0;
  43.     lcden=0;
  44.     P0=com;
  45.     delay(1);
  46.     lcden=1;
  47.     delay(1);
  48.     lcden=0;
  49. }
  50. void wr_data(uchar date)//写数据//
  51. {
  52.     delay(1);
  53.     lcdrs=1;
  54.     lcden=0;
  55.     P0=date;
  56.     delay(1);
  57.     lcden=1;
  58.     delay(1);
  59.     lcden=0;
  60. }
  61. void init()//初始化设置//
  62. {
  63.     beep=1;
  64.     EA=1;
  65.     TMOD=0x01;
  66.     TH0=(65536-50000)/256;
  67.     TL0=(65536-50000)%256;
  68.     ET0=1;
  69.     TR0=1;
  70.     rd=0;
  71.     dula=0;
  72.     wela=0;

  73.     wr_com(0x38);
  74.     wr_com(0x0c);
  75.     wr_com(0x04);
  76.     wr_com(0x01);
  77.     wr_com(0x80);
  78.    for(num=0;num<15;num++)
  79.           {
  80.             wr_data(table[num]);
  81.         delay(20);
  82.           }
  83.    wr_com(0x80+0x40);
  84.    for(num=0;num<16;num++)
  85.           {
  86.             wr_data(table1[num]);
  87.         delay(20);
  88.           }
  89. }
  90. /////////////写时分秒
  91. void write_sfm(uchar add,uchar date)
  92. {
  93.   uchar shi,ge;
  94.   shi=date/10;
  95.   ge=date%10;
  96.   wr_com(0x80+add);
  97.   wr_data(0x30+shi);
  98.   wr_data(0x30+ge);
  99. }
  100. /////////////写年月日
  101. void write_nyr(uchar add,uchar date)
  102. {
  103.   uchar shi,ge;
  104.   shi=date/10;
  105.   ge=date%10;
  106.   wr_com(0x80+0x40+add);
  107.   wr_data(0x30+shi);
  108.   wr_data(0x30+ge);
  109. }
  110. ///////////12c887写一位
  111. void write_ds(uchar add,uchar date)
  112. {
  113.   dsas=1;
  114.   dsds=1;
  115.   dsrw=1;
  116.   dscs=0;
  117.   P0=add;
  118.   dsas=0;
  119.   dsrw=0;
  120.   P0=date;
  121.   dsrw=1;
  122.   dscs=1;
  123.   dsas=1;
  124. }
  125. ///////////12c887读一位
  126. uchar read_ds(uchar add)
  127. {
  128.   uchar data_ds;
  129.   dsas=1;
  130.   dsds=1;
  131.   dsrw=1;
  132.   dscs=0;
  133.   P0=add;
  134.   dsas=0;
  135.   dsds=0;
  136.   P0=0xff;
  137.   data_ds=P0;
  138.   dsds=1;
  139.   dscs=1;
  140.   dsas=1;
  141. return data_ds;
  142. }
  143. /***************************ds18b20程序****************************/
  144. void delay_18B20(uint i)//延时1微秒
  145. {
  146.    while(i--);
  147. }
  148. void ds1820rst()/*ds1820复位*/
  149. {

  150.     DQ = 1;          //DQ复位
  151.     delay_18B20(4); //延时
  152.     DQ = 0;          //DQ拉低
  153.     delay_18B20(100); //精确延时大于480us
  154.     DQ = 1;          //拉高
  155.     delay_18B20(30);
  156. }
  157. uchar ds1820rd()/*读数据*/
  158. {
  159.     uchar i=0;
  160.     uchar dat = 0;
  161.     for (i=8;i>0;i--)
  162.     {  
  163.         DQ = 0; //给脉冲信号
  164.         dat>>=1;
  165.         DQ = 1; //给脉冲信号
  166.         if(DQ)
  167.         dat|=0x80;
  168.         delay_18B20(10);
  169.     }
  170.    return(dat);
  171. }
  172. void ds1820wr(uchar wdata)/*写数据*/
  173. {
  174.     uchar i=0;
  175.     for (i=8; i>0; i--)
  176.     {
  177.         DQ = 0;
  178.         DQ = wdata&0x01;
  179.         delay_18B20(10);
  180.         DQ = 1;
  181.         wdata>>=1;
  182.     }
  183. }
  184. uint read_temp()/*读取温度值并转换*/
  185. {
  186.     uint a,b;
  187.     ds1820rst();   
  188.     ds1820wr(0xcc);//*跳过读序列号*/
  189.     ds1820wr(0x44);//*启动温度转换*/
  190.     ds1820rst();   
  191.     ds1820wr(0xcc);//*跳过读序列号*/
  192.     ds1820wr(0xbe);//*读取温度*/
  193.     a=ds1820rd();
  194.     b=ds1820rd();
  195.     temp=b;
  196.     temp<<=8;
  197.     temp=temp|a;
  198.     if(temp<0x08ff)
  199.      tflag=0;
  200.     else
  201.     {
  202.      temp=~temp+1;
  203.      tflag=1;
  204.     }                                                                                                         
  205.     temp=temp*(0.0625)*100+0.5;//温度值扩大10倍,精确到liang位小数
  206.   return temp;
  207. }
  208. void display_real_temp(uint temp)//实时温度显示函数
  209. {
  210.         uchar datas[] = {0, 0, 0, 0}; //定义数组
  211.        
  212.         datas[0] = temp % 10000 / 1000;
  213.         datas[1] = temp % 1000 / 100;
  214.         datas[2] = temp % 100 / 10;
  215.        
  216.         wr_com(0x80+0x0b);     //写地址 80表示初始地址
  217.         wr_data('0'+datas[0]); //十位
  218.        
  219.         wr_com(0x80+0x0c);     //写地址 80表示初始地址
  220.         wr_data('0'+datas[1]); //个位

  221.         wr_com(0x80+0x0d);     //写地址 80表示初始地址
  222.         wr_data(0x20+14); //个位
  223.        
  224.         wr_com(0x80+0x0e);     //写地址 80表示初始地址
  225.         wr_data('0'+datas[2]); //显示小数点

  226.         wr_com(0x80+0x0f);     //写地址 80表示初始地址
  227.         wr_data(0x60+3); //显示C   
  228.        
  229. }
  230. /********************************************************
  231.                     步进电机正转
  232. *********************************************************/
  233. void  motor_zheng()
  234. {
  235.    uchar i;
  236.    for (i=0; i<8; i++)       //一个周期转45度
  237.     {
  238.       P1 = zheng[i];          //取数据
  239.       delay(1);            //调节转速
  240.     }
  241. }
  242. /********************************************************/
  243. /*步进电机反转
  244. /********************************************************/
  245. void  motor_fan()
  246. {
  247. uchar i;
  248. for (i=0; i<8; i++)     //一个周期转45度1
  249.   {
  250.         P1 = fan[i];          //取数据
  251.         delay(1);            //调节转速
  252.   }
  253. }
  254. //////////////手动按键控制
  255. void shoudong()
  256. {
  257.    uchar r,N=1; //N 步进电机运转圈数 因为我们的步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
  258.    if(key1==0)
  259.           {
  260.         delay(10);
  261.         if(key1==0)
  262.            {
  263.              if(!key1);
  264.              wr_com(0x80+0x40+15);
  265.              wr_data('Z');
  266.               while(1)
  267.                  {
  268.                                          for(r=0;r<N;r++)
  269.                                  {
  270.                                            motor_zheng();       //电机正转                           
  271.                                      }
  272.                                          if(key3==0)
  273.                                           break;    //退出此循环程序
  274.                                          if(key2==0)
  275.                                           break;                     
  276.                  }
  277.                    }
  278.       }
  279.          if(key2==0)
  280.        {
  281.              delay(10);
  282.          if(key2==0)
  283.            {
  284.               if(!key2);
  285.              wr_com(0x80+0x40+15);
  286.              wr_data('F');
  287.               while(1)
  288.                 {
  289.                                  for(r=0;r<N;r++)
  290.                          {
  291.                                motor_fan();       //电机反转                          
  292.                                  }
  293.                                  if(key3==0)
  294.                                   break;    //退出此循环程序
  295.                                  if(key1==0)
  296.                                break;
  297.                 }               
  298.            }
  299.        }
  300.           if(key3==0)
  301.         {
  302.           delay(10);
  303.           if(key3==0)
  304.             {
  305.                      if(!key3);
  306.              wr_com(0x80+0x40+15);
  307.              wr_data('G');  
  308.                          P1=0xf0;
  309.             }
  310.         }            
  311. }
  312. /////////////电机自动正转
  313. void zidong_zheng()
  314. {
  315.   //uchar i,j
  316.   while(1)
  317.      {
  318.       motor_zheng();
  319.      }
  320. }
  321. /////////////电机自动反转
  322. void zidong_fan()
  323. {
  324.   //uchar r,N=1;
  325.    while(1)
  326.      {
  327.        motor_fan();
  328.      }
  329. }
  330. void keyscan()
  331. {
  332.    uchar keynum;
  333.    if(key4==0)//----加和减都是在第一个按键按下情况下进行的
  334.     {
  335.       delay(10);//按键消抖----有按键操作就需要消抖--还需要进行松手检测
  336.       if(key4==0)//第一个按键
  337.         {
  338.           flag=1;
  339.          keynum++;
  340.          if(keynum==1)//第一次按键--操作秒---即光标的位置<操作对象>
  341.             {
  342.               while(!key4);
  343.                   wr_com(0x80+6);//指令执行位置
  344.                   wr_com(0x0f);//光标闪烁
  345.             }
  346.          if(keynum==2)//第二次按键--操作分
  347.             {
  348.               while(!key4);
  349.                   wr_com(0x80+3);
  350.                   wr_com(0x0f);
  351.             }
  352.          if(keynum==3)//第三次按键--操作时
  353.             {
  354.               while(!key4);
  355.                   wr_com(0x80);
  356.                   wr_com(0x0f);
  357.             }
  358.          if(keynum==4)//第4次按键--操作日
  359.             {
  360.               while(!key4);
  361.                   wr_com(0x80+0x40+8);
  362.                   wr_com(0x0f);
  363.             }
  364.          if(keynum==5)//第5次按键--操作月
  365.             {
  366.               while(!key4);
  367.                   wr_com(0x80+0x40+5);
  368.                   wr_com(0x0f);
  369.             }
  370.          if(keynum==6)//第6次按键--操作年
  371.             {
  372.               while(!key4);
  373.                   wr_com(0x80+0x40+2);
  374.                   wr_com(0x0f);
  375.             }
  376.          if(keynum==7)//第7次按键一--回复操作前状态
  377.             {
  378.                while(!key4);
  379.                keynum=0;
  380.                wr_com(0x0c);
  381.                flag=0;//DS12C887正常运行---并将修改过的值写进芯片-----这句不加不能进入设置
  382.                write_ds(0,miao);
  383.                write_ds(2,fen);
  384.                write_ds(4,shi);
  385.                write_ds(7,ri);
  386.                            write_ds(8,yue);
  387.                            write_ds(9,nian);
  388.             }
  389.      }
  390.   }
  391. //////////////时间调整---加
  392. if(keynum!=0)
  393.         {
  394.           if(key2==0)
  395.            {
  396.              delay(10);
  397.              if(key2==0)
  398.                {
  399.                   if(keynum==1)
  400.                      {
  401.                        while(!key2);
  402.                         miao++;
  403.                        if(miao==60)
  404.                         miao=0;
  405.                         write_sfm(6,miao);
  406.                         wr_com(0x80+6);                       
  407.                      }
  408.                   if(keynum==2)
  409.                      {
  410.                        while(!key2);
  411.                         fen++;
  412.                        if(fen==60)
  413.                         fen=0;
  414.                         write_sfm(3,fen);
  415.                         wr_com(0x80+3);                       
  416.                      }
  417.                   if(keynum==3)
  418.                      {
  419.                        while(!key2);
  420.                         shi++;
  421.                        if(shi==24)
  422.                         shi=0;
  423.                         write_sfm(0,shi);
  424.                         wr_com(0x80);                       
  425.                      }
  426.                   if(keynum==4)
  427.                      {
  428.                        while(!key2);
  429.                         ri++;
  430.                        if(ri==32)
  431.                         ri=1;
  432.                         write_nyr(8,ri);
  433.                         wr_com(0x80+0x40+8);                       
  434.                      }
  435.                   if(keynum==5)
  436.                      {
  437.                        while(!key2);
  438.                         yue++;
  439.                        if(yue==13)
  440.                         yue=1;
  441.                         write_nyr(5,yue);
  442.                         wr_com(0x80+0x40+5);                       
  443.                      }
  444.                   if(keynum==6)
  445.                      {
  446.                        while(!key2);
  447.                         nian++;
  448.                        if(nian==100)
  449.                         nian=0;
  450.                         write_nyr(2,nian);
  451.                         wr_com(0x80+0x40+2);                       
  452.                      }
  453.                }
  454.            }
  455. //////////////时间调整---减
  456.          if(key3==0)
  457.            {
  458.              delay(10);
  459.              if(key3==0)
  460.                {
  461.                   if(keynum==1)
  462.                      {
  463.                       while(!key3);
  464.                       miao--;
  465.                       if(miao==-1)
  466.                           miao=59;
  467.                       write_sfm(6,miao);
  468.                       wr_com(0x80+6);
  469.                      }
  470.                   if(keynum==2)
  471.                      {
  472.                       while(!key3);
  473.                       fen--;
  474.                       if(fen==-1)
  475.                          fen=59;
  476.                       write_sfm(3,fen);
  477.                       wr_com(0x80+3);
  478.                      }
  479.                   if(keynum==3)
  480.                      {
  481.                       while(!key3);
  482.                       shi--;
  483.                       if(shi==-1)
  484.                           shi=23;
  485.                       write_sfm(0,shi);
  486.                       wr_com(0x80);
  487.                      }
  488.                   if(keynum==4)
  489.                      {
  490.                       while(!key3);
  491.                       ri--;
  492.                       if(ri==0)
  493.                           ri=31;
  494.                       write_nyr(8,ri);
  495.                       wr_com(0x80+0x40+8);
  496.                      }
  497.                   if(keynum==5)
  498.                      {
  499.                       while(!key3);
  500.                       yue--;
  501.                       if(yue==0)
  502.                           yue=12;
  503.                       write_nyr(5,yue);
  504.                       wr_com(0x80+0x40+5);
  505.                      }
  506.                   if(keynum==6)
  507.                      {
  508.                       while(!key3);
  509.                       nian--;
  510.                       if(nian==-1)
  511.                           nian=99;
  512.                       write_nyr(2,nian);
  513.                       wr_com(0x80+0x40+2);
  514.                      }
  515.                }
  516.            }
  517.         }
  518. }

  519. /********************************************************                                                      
  520. *  主程序                                                                                                   
  521. *********************************************************/
  522. void main()
  523. {
  524.    //uchar i;   
  525.     init();
  526.    while(1)
  527.     {
  528.               keyscan();
  529.           if((guang_dq==1)&&(aa<200))//----------问题在这,程序一直在这循环
  530.            {
  531.                 zidong_zheng();
  532.            }
  533.        didi();
  534.        delay(200);
  535.        P1=0xf0;
  536.        flag=0;
  537.       if(flag==0)
  538.         {
  539.                   read_temp();
  540.                   display_real_temp(temp);
  541.                   shoudong();

  542.               miao=read_ds(0);
  543.               fen=read_ds(2);
  544.               shi=read_ds(4);
  545.               ri=read_ds(7);
  546.               yue=read_ds(8);
  547.               nian=read_ds(9);
  548.        
  549.              write_sfm(6,miao);
  550.              write_sfm(3,fen);
  551.              write_sfm(0,shi);
  552.              write_nyr(8,ri);
  553.              write_nyr(5,yue);
  554.              write_nyr(2,nian);
  555.         }
  556.     }
  557. }
  558. void timer0() interrupt 1  //定时器---程序复杂--为了不影响时钟的反应速度--在定时器内完成这些操作
  559. {

  560.   TH0=(65536-50000)/256;
  561.   TL0=(65536-50000)%256;
  562.   aa++;

  563. }

复制代码
回复

使用道具 举报

ID:191929 发表于 2017-5-6 19:44 | 显示全部楼层
问题是到了晚上,电机启动,既然起动就要到达指定位置停下来,我用定时器来做,无奈程序一直在那循环,不知道怎么改了,希望大家帮帮我,谢谢谢谢了
回复

使用道具 举报

ID:166760 发表于 2017-5-6 19:55 | 显示全部楼层
没问题啊
回复

使用道具 举报

ID:191929 发表于 2017-5-6 19:59 | 显示全部楼层

就是主函数里边,keyscan()函数下边的if语句,程序停在那,出不来
回复

使用道具 举报

ID:7485 发表于 2017-5-6 21:41 | 显示全部楼层
如果使用步进电机的话,可以规定步数,一定的步数自然是到达一定的位置。如果使用直流电机,一般做这类动作需要一个限位开关或传感器,如磁、光电等传感器。用定时即便你的程序能达到目的,也不可靠。
回复

使用道具 举报

ID:10641 发表于 2017-5-6 21:49 | 显示全部楼层
可以添加极限传感器
回复

使用道具 举报

ID:191024 发表于 2017-5-6 22:26 | 显示全部楼层
可能是延时时间太长了,你可以使用库函数intrins或使用DelayX_us(unsigned char t),都是引用_nop_,这样就不会耽误太多的时间去等待延时判断。
回复

使用道具 举报

ID:191929 发表于 2017-5-6 22:38 | 显示全部楼层
本帖最后由 惜缘2008 于 2017-5-6 23:10 编辑
ahshmj 发表于 2017-5-6 21:41
如果使用步进电机的话,可以规定步数,一定的步数自然是到达一定的位置。如果使用直流电机,一般做这类动作 ...

恩恩,对的,现在想通了用定时器行不通,我用的步进电机,现在换成一个变量,还是不行不受控制,控制步数走的太慢,还是停不下来
  1. void main()
  2. {
  3.     uchar i=0;  
  4.     init();
  5.    
  6.    while(1)
  7.     {
  8.               keyscan();
  9.           if((guang_dq==1)&&(i<200))//----------问题在这,程序一直在这循环
  10.            {
  11.            i++;
  12.                    for (k=0; k<8; k++)       //一个周期转45度
  13.                     {
  14.                       P1 = zheng[k];          //取数据
  15.                       delay(1);
  16.             }
  17.            }
  18.        //didi();
  19.       //flag=0;
复制代码



回复

使用道具 举报

ID:191929 发表于 2017-5-6 22:39 | 显示全部楼层
navyzq 发表于 2017-5-6 21:49
可以添加极限传感器

这个我还没接触到
回复

使用道具 举报

ID:191929 发表于 2017-5-6 22:43 | 显示全部楼层
HUANGHFS 发表于 2017-5-6 22:26
可能是延时时间太长了,你可以使用库函数intrins或使用DelayX_us(unsigned char t),都是引用_nop_,这样就不 ...

恩恩,好的,我试试
回复

使用道具 举报

ID:151348 发表于 2017-5-7 09:42 | 显示全部楼层
惜缘2008 发表于 2017-5-6 19:44
问题是到了晚上,电机启动,既然起动就要到达指定位置停下来,我用定时器来做,无奈程序一直在那循环,不知 ...

你的aa相对于用于计时,aa=200,说明定时10s。问题是,定时10s结束之后,电机就要停止,但定时器timer0仍然在工作,所以aa一直有机会小于200(aa超uint范围后又会回到0),if((guang_dq==1)&&(aa<200))就会不断成立。所以当aa>200后,就应该关闭定时器
回复

使用道具 举报

ID:111634 发表于 2017-5-7 11:12 | 显示全部楼层
ahshmj 发表于 2017-5-6 21:41
如果使用步进电机的话,可以规定步数,一定的步数自然是到达一定的位置。如果使用直流电机,一般做这类动作 ...

"如果使用步进电机的话,可以规定步数,一定的步数自然是到达一定的位置。如果使用直流电机,一般做这类动作需要一个限位开关或传感器,如磁、光电等传感器。用定时即便你的程序能达到目的,也不可靠。"

照此办理,没错!根本不需要定时器,若需早晨和晚上定时开关,倒是可以考虑用定时器。
回复

使用道具 举报

ID:197714 发表于 2017-5-7 21:38 | 显示全部楼层
我也做的是窗帘
回复

使用道具 举报

ID:191929 发表于 2017-5-8 11:20 | 显示全部楼层
zl2168 发表于 2017-5-7 11:12
"如果使用步进电机的话,可以规定步数,一定的步数自然是到达一定的位置。如果使用直流电机,一般做这类 ...

恩恩,谢谢,我试试,也有定时开关功能,还要用定时器,
回复

使用道具 举报

ID:191929 发表于 2017-5-8 11:23 | 显示全部楼层
imxuheng 发表于 2017-5-7 09:42
你的aa相对于用于计时,aa=200,说明定时10s。问题是,定时10s结束之后,电机就要停止,但定时器timer0仍 ...

对对对,就是这个问题,我用的是步进电机,先控制下步数,,在定时开关的时候我会这样试试,谢谢
回复

使用道具 举报

ID:191929 发表于 2017-5-8 11:25 | 显示全部楼层

一起学吧,哈哈,有问题一起解决,大家这么热情
回复

使用道具 举报

ID:7485 发表于 2018-11-2 09:25 | 显示全部楼层
惜缘2008 发表于 2017-5-6 22:38
恩恩,对的,现在想通了用定时器行不通,我用的步进电机,现在换成一个变量,还是不行不受控制,控制步数 ...

如果是步进电机,到了指定的步数,一定能停下来的。嫌慢你可以加快,或换步进电机。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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