找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2132|回复: 0
打印 上一主题 下一主题
收起左侧

综合12864LCD,数码管,电机,4*4键盘,AD采集的小作品源码

[复制链接]
跳转到指定楼层
楼主
作品是简陋了一些,不过功能还是比较综合,所以文件名字取名“ZONGHE”,适合单片机入门之后的训练
实物图:


单片机源程序如下:
  1. /**************************************************************/
  2. //作者:武夷学院  机电学院  0721de
  3. //地点:        宿舍
  4. //芯片:STC12C5A系列
  5. //作用:力学模型作品软件组成,欢迎交流单片机,APP技术
  6. /**************************************************************/
  7. #include "STC12C5A.H"
  8. #include "ADC.h"
  9. #define uchar unsigned char
  10. #define TIME  2000   //电机转动时间
  11. #define KEY_P P3      //键盘
  12. uchar KEEY=0,key=0,temp=0;  //键盘
  13. sbit MOTOR1=P0^7;                        //简支梁,外伸梁电机  =1驱动
  14. sbit MOTOR2=P0^6;                        //悬臂梁电机                  =1驱动
  15. sbit LED_HONG1=P0^5;        //简支梁,外伸梁红灯  =1驱动
  16. sbit LED_LV1=P0^4;          //简支梁,外伸梁绿灯  =1驱动
  17. sbit LED_HONG2=P0^3;        //悬臂梁红灯                  =1驱动
  18. sbit LED_LV2=P0^2;          //悬臂梁绿灯                  =1驱动
  19. sbit lcd_l=P0^0;
  20. sbit lcd_h=P0^1;
  21. sbit DATA=P1^2;                //LCD
  22. sbit CLK=P1^3;                //LCD
  23. uchar code dis0[] =  {"<<"};                               //LCD
  24. uchar code dis1[] =  {"  材料力学教具  "};                    //LCD
  25. uchar code dis2[] =  {"    欢迎使用    "};             //LCD
  26. uchar code dis3[] =  {"  武夷学院制    "};                            //LCD
  27. uchar code dis4[] =  {"  点击回车进入  "};                         //LCD
  28. uchar code dis5[] =  {"简支梁例题选择"};                         //LCD
  29. uchar code dis6[] =  {"外伸梁例题选择"};                         //LCD
  30. uchar code dis7[] =  {"悬臂梁例题选择"};                         //LCD
  31. uchar code dis8[] =  {"----------------"};                         //LCD
  32. uchar code dis9[] =  {"  "};                                  //
  33. uchar code dis10[] = {"长方体的简支梁总"};                     //简支梁
  34. uchar code dis11[] = {"长8m, 均布载荷q "};                     //简支梁
  35. uchar code dis12[] = {"的中心距A 点4m, "};                     //简支梁
  36. uchar code dis13[] = {"载荷作用长度8m, "};                     //简支梁
  37. uchar code dis100[] ={"截面为长12cm的正"};                     //简支梁
  38. uchar code dis111[] ={"方体, 许用正应力"};                     //简支梁
  39. uchar code dis122[] ={"=10MPa, 求q 最大"};                     //简支梁
  40. uchar code dis133[] ={"值, 答案:180MPa "};                     //简支梁
  41. ////////////////////////////////////////////////////////////
  42. uchar code dis14[] = {"板长150mm,截面长"};                //外伸梁
  43. uchar code dis15[] = {"20mm, 宽30mm, 截"};                        //外伸梁
  44. uchar code dis16[] = {"面孔直径14mm弯曲"};                        //外伸梁
  45. uchar code dis17[] = {"许用应力140MPa, "};                    //外伸梁
  46. uchar code dis144[] ={"求最大允许压紧力"};                //外伸梁
  47. uchar code dis155[] ={"F.  答案F=3KN,扭"};                        //外伸梁
  48. uchar code dis166[] ={"动旋钮模拟学生答"};                        //外伸梁
  49. uchar code dis177[] ={"案( 单位N )     "};                //外伸梁
  50. ////////////////////////////////////////////////////////////
  51. uchar code dis18[] = {"悬臂梁的长度为5m"};                     //悬臂梁
  52. uchar code dis19[] = {"截面0.1m平方米, "};                     //悬臂梁
  53. uchar code dis20[] = {"载荷F 在B 端, 大"};                     //悬臂梁
  54. uchar code dis21[] = {"小未知, 许用切应"};                     //悬臂梁
  55. uchar code dis188[] ={"力为100MPa, 求F "};                     //悬臂梁
  56. uchar code dis199[] ={"允许的最大值.   "};                     //悬臂梁
  57. uchar code dis200[] ={"答案F= KN.      "};                     //悬臂梁
  58. uchar code dis211[] ={"                "};                     //悬臂梁

  59. uchar can1[4];
  60. uchar can2[4];
  61. uchar can3[4];
  62. uchar can4[4];
  63. #define GUAN P2         //数码管
  64. sbit G1=P1^7;         //数码管
  65. sbit G2=P1^6;         //数码管
  66. sbit G3=P1^5;         //数码管
  67. sbit G4=P1^4;         //数码管
  68. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,         //数码管
  69. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};         //数码管
  70. void shu_ma_guan(int);   //数码管
  71. char KEY_SCAN();                 //键盘
  72. char HANG=0;
  73. void write_data(unsigned char);                     //LCD
  74. void write_cmd(unsigned char);                     //LCD
  75. void write_han(uchar,uchar,uchar dis[]); //LCD
  76. void LCD_init();                                                 //LCD
  77. void DELAY(int);
  78. void DIANJIZHUAN();
  79. void main()
  80. {
  81.   /********初始化定时器,ADC和LCD*******/
  82.   int adc=0,adcmin=2000;  //此变量用于存储ADC转换数值
  83.   adc_init();
  84.   LCD_init();
  85.   MOTOR1=1;
  86.   MOTOR2=1;
  87.   LED_HONG1=1;
  88.   LED_HONG2=1;
  89.   LED_LV1=0;                         //亮绿灯
  90.   LED_LV2=0;                         //亮绿灯
  91.   lcd_l=0;
  92.   lcd_h=1;                       //LCD
  93.   /*********初始化结束***********/
  94.   while(1)                        //第一层while
  95.   {
  96.         adc=get_AD_result_10F(1);                        
  97.         if(adc<adcmin)adcmin=adc;
  98.         if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  99.         shu_ma_guan(adcmin);                                 //之前要加上adc处理防止数码管闪
  100.     write_han(0,0,dis1);
  101.         write_han(1,0,dis2);
  102.         write_han(2,0,dis3);
  103.         write_han(3,0,dis4);
  104.         KEEY=KEY_SCAN();
  105.         if(KEEY==0)
  106.         while(KEEY!=4)                 //第二界面
  107.         {
  108.          KEEY=25;
  109.      LED_HONG1=1;                 //红灯灭
  110.      LED_HONG2=1;                 //红灯灭
  111.          LED_LV1=0;                         //亮绿灯
  112.      LED_LV2=0;                         //亮绿灯
  113.          adc=get_AD_result_10F(1);
  114.         if(adc<adcmin)adcmin=adc;
  115.         if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}                          
  116.          shu_ma_guan(adcmin);                                 //之前要加上adc处理防止数码管闪
  117.          write_han(0,0,dis5);
  118.          if(HANG==0){write_han(0,7,dis0);write_han(1,7,dis9);write_han(2,7,dis9);write_han(3,7,dis9);}
  119.          write_han(1,0,dis6);
  120.          if(HANG==1){write_han(1,7,dis0);write_han(0,7,dis9);write_han(2,7,dis9);write_han(3,7,dis9);}
  121.          write_han(2,0,dis7);
  122.          if(HANG==2){write_han(2,7,dis0);write_han(0,7,dis9);write_han(1,7,dis9);write_han(3,7,dis9);}
  123.          write_han(3,0,dis8);
  124.          KEEY=KEY_SCAN();
  125.          if(KEEY==2){HANG++;KEEY=25;}
  126.          if(KEEY==3){HANG--;KEEY=25;}
  127.          if(HANG>2)HANG=0;if(HANG<0)HANG=2;
  128. ////////////////////////////////////////////////////
  129.          if(HANG==0&&KEEY==0)while(KEEY!=4)
  130.          {                                                        //第三界面1简支梁
  131.         // KEEY=25;
  132.          adc=get_AD_result_10F(1);                 
  133.         if(adc<adcmin)adcmin=adc;
  134.         if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  135.          shu_ma_guan(adcmin/5);
  136.          if(LED_LV1==0)if(adcmin==900){LED_HONG1=0;LED_LV1=1;MOTOR1=0;DIANJIZHUAN();MOTOR1=1;}//断梁                                          
  137.          write_han(0,0,dis10);
  138.          write_han(1,0,dis11);
  139.          write_han(2,0,dis12);
  140.          write_han(3,0,dis13);
  141.          KEEY=KEY_SCAN();
  142.          if(KEEY==2)while(KEEY!=4&&KEEY!=3)
  143.            {
  144.               adc=get_AD_result_10F(1);                 
  145.               if(adc<adcmin)adcmin=adc;
  146.                if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  147.               shu_ma_guan(adcmin/5);
  148.              if(LED_LV1==0)if(adcmin==900){LED_HONG1=0;LED_LV1=1;MOTOR1=0;DIANJIZHUAN();MOTOR1=1;}//断梁                                                   
  149.               write_han(0,0,dis100);
  150.               write_han(1,0,dis111);
  151.               write_han(2,0,dis122);
  152.               write_han(3,0,dis133);
  153.               KEEY=KEY_SCAN();       
  154.            }
  155.          }                                                        //第三界面1结束       
  156. /////////////////////////////////////////////////////                   
  157.          if(HANG==1&&KEEY==0)while(KEEY!=4)
  158.          {                          //第三界面2外伸梁
  159.          adc=get_AD_result_10F(1);               
  160.         if(adc<adcmin)adcmin=adc;
  161.         if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  162.          shu_ma_guan(adcmin*3);       
  163.          if(LED_LV1==0)if(adcmin==1000){LED_HONG1=0;LED_LV1=1;MOTOR1=0;DIANJIZHUAN();MOTOR1=1;}//断梁                         
  164.          write_han(0,0,dis14);
  165.          write_han(1,0,dis15);
  166.          write_han(2,0,dis16);
  167.          write_han(3,0,dis17);
  168.          KEEY=KEY_SCAN();
  169.          if(KEEY==2)while(KEEY!=4&&KEEY!=3)
  170.            {
  171.               adc=get_AD_result_10F(1);                 
  172.               if(adc<adcmin)adcmin=adc;
  173.                if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  174.               shu_ma_guan(adcmin*3);
  175.           if(LED_LV1==0)if(adcmin==1000){LED_HONG1=0;LED_LV1=1;MOTOR1=0;DIANJIZHUAN();MOTOR1=1;}//断梁                         
  176.               write_han(0,0,dis144);
  177.               write_han(1,0,dis155);
  178.               write_han(2,0,dis166);
  179.               write_han(3,0,dis177);
  180.               KEEY=KEY_SCAN();       
  181.            }                                  
  182.          }                                                        //第三界面2结束
  183. /////////////////////////////////////////////////////
  184.          if(HANG==2&&KEEY==0)while(KEEY!=4)
  185.          {                                                        //第三界面3悬臂梁
  186. //         KEEY=25;
  187.          adc=get_AD_result_10F(1);                 
  188.         if(adc<adcmin)adcmin=adc;
  189.         if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  190.         if(LED_LV2==1)if(adcmin==1000){LED_HONG2=0;LED_LV2=1;MOTOR2=0;DIANJIZHUAN();MOTOR2=1;}//断梁
  191.          shu_ma_guan(adcmin);                                 
  192.          write_han(0,0,dis18);
  193.          write_han(1,0,dis19);
  194.          write_han(2,0,dis20);
  195.          write_han(3,0,dis21);
  196.          KEEY=KEY_SCAN();
  197.          if(KEEY==2)while(KEEY!=4&&KEEY!=3)
  198.            {
  199.               adc=get_AD_result_10F(1);                 
  200.               if(adc<adcmin)adcmin=adc;
  201.                if(adc-adcmin>1){adcmin++;if(adc-adcmin>11)adcmin+=10;}
  202.               shu_ma_guan(adcmin);                                 
  203.               write_han(0,0,dis188);
  204.               write_han(1,0,dis199);
  205.               write_han(2,0,dis200);
  206.               write_han(3,0,dis211);
  207.               KEEY=KEY_SCAN();       
  208.            }
  209.          }                                                        //第三界面3结束                  
  210.          KEEY=25;

  211.         }                                          //第二界面结束

  212.   }                 //第一界面结束
  213. }
  214. /***********不可更改部分******/
  215. void shu_ma_guan(int a)
  216. {
  217.    char g,s,b,q;
  218.    int j=30;                        //根据情况变化
  219.    g=a%10;
  220.    s=(a/10)%10;
  221.    b=(a/100)%10;
  222.    q=(a/1000)%10;
  223.   while(j--)
  224.   {
  225.    G1=0;
  226.    G2=1;
  227.    G3=1;
  228.    G4=1;
  229.    GUAN=table[q];
  230.    DELAY(100);
  231.    G1=1;
  232.    G2=0;
  233.    G3=1;
  234.    G4=1;
  235.    GUAN=table[b];
  236.    DELAY(100);
  237.    G1=1;
  238.    G2=1;
  239.    G3=0;
  240.    G4=1;
  241.    GUAN=table[s];
  242.    DELAY(100);
  243.    G1=1;
  244.    G2=1;
  245.    G3=1;
  246.    G4=0;
  247.    GUAN=table[g];
  248.    DELAY(100);
  249.    }
  250. }
  251. void DELAY(int i)
  252. {
  253.   while(i--);
  254. }

  255. char KEY_SCAN()
  256. {
  257.        KEY_P=0xfe;                                         //************设KEY_P为1111  1110***********************
  258.     temp=KEY_P;                                         //读引脚KEY_P与1111 0000 进行与运算,
  259.     temp=temp&0xf0;
  260.     if(temp!=0xf0)
  261.     {
  262.       DELAY(2);
  263.       if(temp!=0xf0)                                 //与运算完毕后发现0xfe中高四位改变则进入if语句
  264.       {
  265.         temp=KEY_P;
  266.         switch(temp)
  267.         {
  268.           case 0xee:                         //KEY_P口为1110 1110则key0被按下
  269.                key=0;
  270.                break;

  271.           case 0xde:                          //1101 1110则key1被按下
  272.                key=1;
  273.                break;

  274.           case 0xbe:                           //1011 1110key2
  275.                key=2;
  276.                break;

  277.           case 0x7e:                                //0111 1110key3
  278.                key=3;
  279.                break;
  280.          }
  281.          while(temp!=0xf0)                         //检测到有按键按下,立即将KEY_P赋值给temp
  282.          {
  283.            temp=KEY_P;
  284.            temp=temp&0xf0;
  285.             
  286.          }
  287.          
  288.         return key;
  289.          //P1=0xfe;
  290.       }
  291.     }
  292.     KEY_P=0xfd;                                             //*****************设KEY_P为1111 1011***********************
  293.     temp=KEY_P;                                                   //设KEY_P为0xf0只有第二列按下KEY_P口高四位做出相应变化
  294.     temp=temp&0xf0;                                         //p3与1111 0000与运算
  295.     if(temp!=0xf0)
  296.     {                                                                 //KEY_P被赋予的0xfe(1110)检测第一列,0xfd(1101)检测第二列,0xfb(1011),0xf7(0111)
  297.       DELAY(2);
  298.       if(temp!=0xf0)
  299.       {
  300.         temp=KEY_P;
  301.         switch(temp)
  302.         {
  303.           case 0xed:
  304.                key=4;
  305.                break;

  306.           case 0xdd:
  307.                key=5;
  308.                break;

  309.           case 0xbd:
  310.                key=6;
  311.                break;

  312.           case 0x7d:
  313.                key=7;
  314.                break;
  315.          }
  316.          while(temp!=0xf0)
  317.          {
  318.            temp=KEY_P;
  319.            temp=temp&0xf0;
  320.             
  321.          }
  322.          
  323.          return key;
  324.       }
  325.       }
  326.     KEY_P=0xfb;                                                   //设KEY_P为0xfb只有第三列按下KEY_P口高四位做出相应变化
  327.     temp=KEY_P;
  328.     temp=temp&0xf0;
  329.     if(temp!=0xf0)
  330.     {
  331.       DELAY(2);
  332.       if(temp!=0xf0)
  333.       {
  334.         temp=KEY_P;
  335.         switch(temp)
  336.         {
  337.           case 0xeb:
  338.                key=8;
  339.                break;

  340.           case 0xdb:
  341.                key=9;
  342.                break;

  343.           case 0xbb:
  344.                key=10;
  345.                break;

  346.           case 0x7b:
  347.                key=11;
  348.                break;
  349.          }
  350.          while(temp!=0xf0)
  351.          {
  352.            temp=KEY_P;
  353.            temp=temp&0xf0;
  354.             
  355.          }
  356.          
  357.         return key;
  358.       }
  359.       }
  360.     KEY_P=0xf7;                                                //设KEY_P为0xf7只有第四列按下KEY_P口高四位做出相应变化
  361.     temp=KEY_P;
  362.     temp=temp&0xf0;
  363.     if(temp!=0xf0)
  364.     {
  365.       DELAY(2);
  366.       if(temp!=0xf0)
  367.       {
  368.         temp=KEY_P;
  369.         switch(temp)
  370.         {
  371.           case 0xe7:
  372.                key=12;
  373.                break;

  374.           case 0xd7:
  375.                key=13;
  376.                break;

  377.           case 0xb7:
  378.                key=14;
  379.                break;

  380.           case 0x77:
  381.                key=15;
  382.                break;
  383.          }
  384.          while(temp!=0xf0)
  385.          {
  386.            temp=KEY_P;
  387.            temp=temp&0xf0;
  388.             
  389.          }
  390.          
  391.         return key;
  392.       }
  393.     }
  394.         return 22;       //防止key始终为0
  395. }


  396. void LCD_init()
  397. {
  398.     write_cmd(0x34);      //扩充指令操作         0011 0100 (00 001DL X,RE,X,X)RE为扩充指令,DL必为1
  399.    
  400.     write_cmd(0x30);      //基本指令操作          0011 0000         RE为0基础指令
  401.    
  402.     write_cmd(0x0C);      //显示开,关光标        0000 1100 (0000 1DCB)D整体显示C游标B游标位置
  403.    
  404.     write_cmd(0x01);      //清除LCD的显示内容  0000 0001
  405.    
  406. }


  407. void write_data(unsigned char Data)
  408. {               
  409.   DATA=0;
  410.   DATA=1;
  411.   CLK=1;DELAY(2);           //1
  412.   CLK=0;

  413.   DATA=1;
  414.   CLK=1;DELAY(2);          //2
  415.   CLK=0;

  416.   DATA=1;
  417.   CLK=1;DELAY(2);                //3
  418.   CLK=0;

  419.   DATA=1;                         
  420.   CLK=1;DELAY(2);         //4
  421.   CLK=0;

  422.   DATA=1;
  423.   CLK=1;DELAY(2);         //5
  424.   CLK=0;

  425.   DATA=0;           //
  426.   CLK=1;DELAY(2);          //6
  427.   CLK=0;

  428.   DATA=1;         //
  429.   CLK=1;DELAY(2);        //7
  430.   CLK=0;

  431.   DATA=0;                          
  432.   CLK=1;DELAY(2);          //8
  433.   CLK=0;  

  434.   DATA=0x80&Data;
  435.   CLK=1;DELAY(2);           //9
  436.   CLK=0;

  437.   DATA=0x40&Data;
  438.   CLK=1;DELAY(2);         //10
  439.   CLK=0;

  440.   DATA=0x20&Data;
  441.   CLK=1;DELAY(2);          //11
  442.   CLK=0;

  443.   DATA=0x10&Data;
  444.   CLK=1;DELAY(2);          //12
  445.   CLK=0;

  446.   DATA=0;
  447.   CLK=1;DELAY(2);          //13
  448.   CLK=0;

  449.   DATA=0;
  450.   CLK=1;DELAY(2);          //14
  451.   CLK=0;

  452.   DATA=0;
  453.   CLK=1;DELAY(2);          //15
  454.   CLK=0;

  455.   DATA=0;
  456.   CLK=1;DELAY(2);          //16
  457.   CLK=0;

  458.   DATA=0x08&Data;                 
  459.   CLK=1;DELAY(2);                 //17
  460.   CLK=0;

  461.   DATA=0x04&Data;
  462.   CLK=1;DELAY(2);                 //18
  463.   CLK=0;  

  464.   DATA=0x02&Data;
  465.   CLK=1;DELAY(2);                  //19
  466.   CLK=0;

  467.   DATA=0x01&Data;
  468.   CLK=1;DELAY(2);                 //20
  469.   CLK=0;

  470.   DATA=0;
  471.   CLK=1;DELAY(2);                   //21
  472.   CLK=0;

  473.   DATA=0;
  474.   CLK=1;DELAY(2);                  //22
  475.   CLK=0;
  476.      
  477.   DATA=0;     
  478.   CLK=1;DELAY(2);                  //23
  479.   CLK=0;
  480.          
  481.   DATA=0;
  482.   CLK=1;DELAY(2);                  //24
  483.   CLK=0;                                          
  484. }

  485. void write_cmd(unsigned char Data)
  486. {                  
  487.   DATA=0;
  488.   DATA=1;
  489.   CLK=1;DELAY(2);           //1
  490.   CLK=0;

  491.   DATA=1;
  492.   CLK=1;DELAY(2);          //2
  493.   CLK=0;

  494.   DATA=1;
  495.   CLK=1;DELAY(2);                //3
  496.   CLK=0;
  497.    
  498.   DATA=1;                         
  499.   CLK=1;DELAY(2);                  //4
  500.   CLK=0;

  501.   DATA=1;
  502.   CLK=1;DELAY(2);                  //5
  503.   CLK=0;

  504.   DATA=0;                           //
  505.   CLK=1;DELAY(2);                  //6
  506.   CLK=0;

  507.   DATA=0;                                 //
  508.   CLK=1;DELAY(2);                        //7
  509.   CLK=0;

  510.   DATA=0;                          
  511.   CLK=1;DELAY(2);           //8
  512.   CLK=0;  

  513.   DATA=0x80&Data;
  514.   CLK=1;DELAY(2);           //9
  515.   CLK=0;

  516.   DATA=0x40&Data;
  517.   CLK=1;DELAY(2);         //10
  518.   CLK=0;

  519.   DATA=0x20&Data;
  520.   CLK=1;DELAY(2);          //11
  521.   CLK=0;

  522.   DATA=0x10&Data;
  523.   CLK=1;DELAY(2);          //12
  524.   CLK=0;

  525.   DATA=0;
  526.   CLK=1;DELAY(2);          //13
  527.   CLK=0;

  528.   DATA=0;
  529.   CLK=1;DELAY(2);          //14
  530.   CLK=0;

  531.   DATA=0;
  532.   CLK=1;DELAY(2);          //15
  533.   CLK=0;

  534.   DATA=0;
  535.   CLK=1;DELAY(2);          //16
  536.   CLK=0;

  537.   DATA=0x08&Data;                 
  538.   CLK=1;DELAY(2);                 //17
  539. ……………………

  540. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
ZONGHE.zip (12.4 KB, 下载次数: 11)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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