找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机电子琴制作 附Proteus仿真图+程序+视频等资料

  [复制链接]
跳转到指定楼层
楼主
一款简单的单片机DIY小制作
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


视频教程:


制作出来的实物图如下:


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <absacc.h>
  3. #include <stdio.h>
  4. #include <math.h>                 //头文件        
  5. #define uchar unsigned char
  6. #define uint unsigned int          //宏定义
  7. uchar STH0;                                  //定时器变量
  8. uchar STL0;                                  //定时器变量
  9. bit FY=0;                                         //模式变量,为0时弹奏模式,为1时播放模式
  10. uchar Song_Index=0,Tone_Index=0;//单首歌曲音符数  
  11. uchar k, key;                                         //k:按键数值变量。key:按键的键值(也就是有按键按下时的P0口状态)
  12. sbit SPK=P3^7 ;                                 //定义喇叭的接口
  13. sbit LED1=P3^5;
  14. sbit LED2=P3^4;                                 //定义两个LED的接口
  15. uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//数码管显示的数组(1 2 3 4 5 6 7 8 9)
  16.                                                 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xa3,0x8c,0xc8};        //(A B C D E F H O P N)
  17. unsigned char code num1[]=                        "   Music:       ";
  18. uchar code Song[][100]=         //内置音乐数组,song【歌曲序号】【音符顺序】
  19. {
  20.         //        1        2        3        4        5        6        7
  21.         //        8        9        10        11        12        13        14
  22.         //        15        16        17        18        19        20        21

  23.         {12,10,9,9,10,8,9,10,
  24.         12,10,9,9,5,10,11,10,
  25.         10,10,14,10,9,8,7,8,
  26.         9,10,13,6,8,10,9,6,
  27.         8,7,5,6,12,10,9,9,
  28.         9,10,8,9,10,12,10,9,
  29.         9,9,5,10,11,10,10,10,
  30.         14,10,9,8,7,8,9,10,
  31.         13,6,8,10,9,6,8,7,
  32.         5,6,-1},                                 //烟花易冷

  33.         {13,12,10,12,15,13,
  34.         12,13,10,12,13,12,10,8,6,12,
  35.         10,9,9,10,12,12,13,10,9,
  36.         8,12,10,9,8,6,8,5,-1},//世上只有妈妈好

  37.         {10,10,11,10,9,8,9,12,9,9,
  38.         8,8,9,8,7,6,7,10,7,7,
  39.         6,9,10,9,8,6,5,9,10,9,
  40.         8,6,6,9,10,9,8,6,7,8,-1}, //当你孤单你会想起谁
  41.          
  42.         {5,3,5,8,6,8,
  43.         5,5,1,2,3,2,1,2,5,
  44.         3,5,8,7,6,8,5,5,2,
  45.         3,4,0,1,6,8,8,7,6,
  46.         7,8,6,7,8,6,6,5,3,
  47.         1,2,5,3,5,8,7,6,8,
  48.         5,5,2,3,4,0,1,-1},                 //送别

  49.         {5,6,8,6,6,5,6,5,3,5,
  50.         5,6,8,6,6,5,6,5,6,1,
  51.         1,2,3,2,2,2,1,2,1,6,
  52.         3,2,5,6,8,6,6,5,6,5,
  53.         6,1,1,2,3,4,4,5,6,6,
  54.         5,6,8,6,8,6,5,5,1,6,
  55.         5,5,6,8,3,2,3,1,-1},           //最浪漫的事

  56.         {5,9,10,9,10,12,13,12,8,9,
  57.         10,13,12,10,12,12,13,15,13,12,
  58.         10,12,10,8,9,10,8,6,10,9,
  59.         12,9,10,9,10,12,13,12,8,9,
  60.         10,13,12,12,13,15,13,
  61.         12,10,12,10,8,6,10,9,8,6,
  62.         8,9,9,8,-1},                                //发如雪
  63.          
  64.         {5,8,9,10,9,10,11,12,12,12,
  65.         11,10,9,5,8,9,10,11,12,12,
  66.         12,13,12,9,10,8,8,6,9,9,
  67.         10,10,8,12,8,12,8,7,8,8,6,
  68.         9,9,10,10,12,12,
  69.         12,13,12,9,10,8,
  70.         5,8,9,10,9,10,11,12,12,12,
  71.         11,10,9,5,8,9,10,9,10,11,
  72.         12,12,12,9,10,8,8,6,9,9,
  73.         10,10,8,12,8,12,12,7,8,-1},        //简单爱

  74.         {8,9,10,8,8,9,10,8,10,11,12,10,11,12,
  75.         12,13,12,11,10,8,12,13,12,11,10,8,8,5,8,8,5,8,-1},        //两只老虎
  76.         
  77.         {5,5,6,5,8,7,
  78.         5,5,6,5,9,8,
  79.         5,5,12,10,8,7,6,
  80.         11,11,10,8,9,8,-1},                        //生日快乐

  81.         {6,8,9,10,12,10,8,9,6,8,9,10,
  82.         12,12,13,9,10,10,12,13,
  83.         12,13,15,14,13,12,13,10,8,9,10,12,8,6,
  84.         8,9,10,13,12,10,13,13,
  85.         12,11,10,9,10,12,6,8,9,8,9,
  86.         10,12,13,15,14,13,12,10,13,-1},        //让我们荡起双桨

  87.         {8,8,12,12,13,13,12,
  88.         11,11,10,10,9,9,8,
  89.         12,12,11,11,10,10,9,
  90.         12,12,11,11,10,10,9,
  91.         8,8,12,12,13,13,12,
  92.         11,11,10,10,9,9,8,-1},                        //小星星

  93.         {12,10,12,10,12,10,8,9,11,10,9,12,
  94.         12,10,12,10,12,10,8,9,11,10,9,8,
  95.         9,9,11,11,10,8,12,9,11,10,9,12,
  96.         12,10,12,10,12,10,8,9,11,10,9,8,-1}, //粉刷匠

  97.         {8,9,10,11,12,12,12,11,10,
  98.         11,11,11,10,9,8,10,12,
  99.         8,9,10,11,12,12,12,11,10,
  100.         11,11,11,10,9,8,10,8,
  101.         13,13,13,12,11,12,12,12,11,10,
  102.         11,11,11,10,9,8,10,12,
  103.         13,13,13,12,11,12,12,12,11,10,
  104.         11,11,11,10,9,8,10,8,-1},                        //洋娃娃和小熊跳舞

  105.         {12,10,12,13,15,16,17,16,15,13,12,15,
  106.         17,16,15,12,17,16,15,12,
  107.         10,12,13,15,16,17,15,13,15,16,
  108.         13,13,14,13,13,17,15,14,15,13,
  109.         12,10,12,13,15,16,17,16,15,13,12,15,
  110.         17,17,17,17,15,16,16,16,16,12,
  111.         12,10,12,13,15,16,17,16,15,13,12,
  112.         15,15,-1},                                                           //小红花

  113.         {8,9,10,11,12,10,8,15,13,11,12,12,10,
  114.         8,9,10,11,12,10,9,8,9,10,9,12,
  115.         8,9,10,11,12,10,8,15,13,11,12,10,
  116.         8,9,10,11,12,10,9,8,9,10,8,8,
  117.         15,13,11,12,12,8,15,13,11,12,10,
  118.         8,9,10,11,12,10,9,8,9,10,8,8,
  119.         15,13,11,12,12,8,15,13,11,12,10,
  120.         8,9,10,11,12,10,9,8,9,10,8,8,-1},        //小红帽
  121.         
  122.         {10,12,16,15,12,11,10,10,10,11,12,
  123.         13,12,10,12,16,15,12,11,
  124.         10,12,12,13,14,15,15,16,12,12,14,13,12,
  125.         10,12,15,13,15,16,15,14,12,10,12,
  126.         16,15,12,11,10,12,12,13,14,15,15,-1},        //雪绒花
  127. };
  128. uchar code Len[][100]= //内置音乐对应的节拍(音符持续时间)
  129. {
  130.         {1,1,2,4,1,1,1,4,
  131.         1,1,2,2,1,1,1,4,
  132.         1,1,1,1,2,1,1,1,
  133.         1,1,3,1,1,1,1,1,
  134.         1,1,1,6,1,1,2,1,
  135.         1,1,1,1,4,1,1,2,
  136.         1,1,1,1,1,4,1,1,
  137.         3,1,2,1,1,1,1,1,
  138.         3,1,1,1,1,1,1,2,
  139.         2,6,-1},

  140.         {3,1,2,2,2,1,
  141.         1,4,2,1,1,2,2,1,1,1,
  142.         1,4,3,1,2,1,1,2,2,
  143.         4,3,1,1,1,1,1,6,-1},

  144.         {2,1,1,2,1,1,2,2,2,3,
  145.         2,1,1,2,1,1,2,2,2,3,
  146.         2,1,1,1,1,2,2,1,1,1,
  147.         1,2,2,1,1,1,1,1,1,6,-1},
  148.          
  149.         {2,3,1,3,2,2,
  150.         4,2,1,1,2,1,1,4,2,
  151.         1,1,2,1,2,2,4,2,1,
  152.         1,2,1,4,2,2,4,2,1,
  153.         1,4,1,1,1,1,1,1,1,
  154.         1,8,2,1,1,2,1,2,2,
  155.         4,2,1,1,2,2,4,-1},

  156.         {1,1,1,2,1,1,1,1,1,5,
  157.         1,1,1,2,1,1,1,1,1,5,
  158.         1,1,1,1,1,1,1,1,1,1,
  159.         2,3,1,1,1,2,1,1,1,1,
  160.         1,5,1,1,1,2,1,1,1,1,
  161.         1,2,1,3,1,1,1,4,1,1,
  162.         5,1,1,1,1,1,1,6,-1},

  163.         {1,1,2,1,1,1,1,3,1,1,
  164.         1,1,1,1,3,1,1,2,1,1,
  165.         1,1,2,1,1,1,1,1,1,1,
  166.         1,1,2,1,1,1,1,3,1,1,
  167.         1,1,3,1,1,2,1,
  168.         1,1,1,2,1,1,1,1,1,1,
  169.         1,1,1,4,-1},

  170.         {1,1,1,1,1,1,1,1,1,1,
  171.         1,1,3,1,1,1,1,1,1,1,
  172.         1,1,2,1,1,2,1,1,1,1,
  173.         1,1,1,1,1,1,1,1,1,1,1,
  174.         1,1,1,1,1,1,
  175.         1,1,2,1,1,2,
  176.         1,1,2,1,1,1,1,1,1,1,
  177.         1,1,3,1,1,1,1,1,1,1,
  178.         1,1,2,1,1,2,1,1,1,1,
  179.         1,1,2,1,1,1,1,1,1,-1},
  180.         
  181.         {2,2,2,2,2,2,2,2,2,2,4,2,2,4,
  182.         1,1,1,1,2,2,1,1,1,1,2,2,2,2,4,2,2,4,-1},

  183.         {1,1,2,2,2,4,
  184.         1,1,2,2,2,4,
  185.         1,1,2,2,2,2,2,
  186.         1,1,2,2,2,4,-1},

  187.         {1,1,1,3,1,1,1,2,4,1,1,1,
  188.         3,1,2,2,4,1,1,4,
  189.         3,1,1,1,1,1,1,2,1,1,3,1,2,2,
  190.         1,1,1,1,5,4,3,1,
  191.         1,1,2,4,3,1,1,1,3,1,1,
  192.         2,2,2,2,1,1,1,1,4,-1},

  193.         {2,2,2,2,2,2,3,
  194.         2,2,2,2,2,2,3,
  195.         2,2,2,2,2,2,3,
  196.         2,2,2,2,2,2,3,
  197.         2,2,2,2,2,2,3,
  198.         2,2,2,2,2,2,4,-1},

  199.         {1,1,1,1,1,1,2,1,1,1,1,2,
  200.         1,1,1,1,1,1,2,1,1,1,1,2,
  201.         1,1,1,1,1,1,2,1,1,1,1,2,
  202.         1,1,1,1,1,1,2,1,1,1,1,3,-1},

  203.         {1,1,1,1,1,1,1,1,1,
  204.         1,1,1,1,1,1,1,2,
  205.         1,1,1,1,1,1,1,1,1,
  206.         1,1,1,1,1,1,1,2,
  207.         1,1,1,1,1,1,1,1,1,2,
  208.         1,1,1,1,1,1,1,2,
  209.         1,1,1,1,1,1,1,1,1,1,
  210.         1,1,1,1,1,1,1,3,-1},

  211.         {1,1,1,1,1,1,2,1,1,1,1,4,
  212.         2,1,1,4,2,1,1,4,
  213.         2,1,1,2,2,1,1,1,1,4,
  214.         2,1,1,3,1,1,1,1,1,4,
  215.         1,1,1,1,1,1,2,1,1,1,1,4,
  216.         1,1,1,1,4,1,1,1,1,4,
  217.         1,1,1,1,1,1,2,1,1,1,1,
  218.         4,4,-1},

  219.         {1,1,1,1,2,1,1,2,1,1,1,1,2,
  220.         1,1,1,1,1,1,1,1,2,2,2,2,
  221.         1,1,1,1,2,1,1,2,1,1,2,2,
  222.         1,1,1,1,1,1,1,1,2,2,2,2,
  223.         2,1,1,1,1,2,2,1,1,2,2,
  224.         1,1,1,1,1,1,1,1,2,2,2,2,
  225.         2,1,1,1,1,2,2,1,1,2,2,
  226.         1,1,1,1,1,1,1,1,2,2,2,2,-1},

  227.         {2,2,4,2,2,4,2,2,1,1,2,
  228.         4,4,2,2,4,2,2,4,
  229.         2,2,1,1,2,4,4,4,1,2,1,1,2,
  230.         2,2,4,2,2,2,2,4,4,2,2,
  231.         4,2,2,4,2,2,1,1,1,4,4,-1}
  232. };
  233. uint code tab[]={         //内置16个音符弹奏和播放时都是调用此数组内的数据用于定时器初值
  234.         63500,                                                                                 //超低音 si
  235.         63628,63835,64021,64103,64260,64400,64524,          //低音do-si
  236.         64580,64684,64777,64820,64898,64968,65030,          //           do-si
  237.         65058,65110,65157,65178,65217,65252,65283,         //高音do-si
  238.         65313 };                                                                         //超高音do

  239. void delay1 (uint ms)      //粗略1ms延时函数,不精确  
  240. {
  241.         uchar t;
  242.         while (ms--)
  243.         for(t=0;t<120;t++);
  244. }
  245. void delay(void)
  246. {
  247.         uchar i;
  248.         for (i=300;i>0;i--);
  249. }
  250. uchar getkey(void)                                  //矩阵按键扫描函数
  251. {
  252.         uchar scancode,tmpcode;
  253.         if((P1&0xf0)==0xf0)                         //无按键按下时此表达式成立
  254.         return (0);                                         //此函数返回值为0
  255.         scancode = 0xfe;                          //如果上面的if表达式不成立,此语句才可以执行
  256.         while((scancode&0x10)!=0)    //有按键按下时,此表达式成立
  257.         {                                                
  258.                 P1=scancode;                           //将P0口赋值
  259.                 if((P1&0xf0)!=0xf0)           //判断P0口的状态
  260.                 {
  261.                         tmpcode = (P1&0xf0)|0x0f;                 //P0口的状态与上0xf0,然后或上0x0f
  262.                         return((~scancode)+(~tmpcode));         //将两个变量的值取反相加后返回此函数
  263.                 }
  264.                 else scancode=(scancode<<1)|0x01;           //如果上面的if语句不成立,将scancode左移一位
  265.         }
  266.         return(0xff);
  267. }

  268. void anjian()                                 //按键键值识别
  269. {   
  270.         P1=0xf0;                                 //P1口赋值
  271.         if((P1&0xf0)!=0xf0)            //判断是否有按键按下
  272.         {
  273.                 delay();                      //去抖
  274.                 if((P1&0xf0)!=0xf0)  //再次判断有无按键按下  
  275.                 {
  276.                         key=getkey();         //扫描按键
  277.                         Tone_Index=0;    //播放音符顺序清零
  278.                         switch(key)            //根据扫描的按键编码将k赋值
  279.                         {
  280.                                 case 0x88:         //按键编码为0x88
  281.                                 k = 0;                 //k赋值0
  282.                                 break;                  //已经确定键值后提前跳出switch
  283.                                 case 0x48:   //如果不满足上一个case则继续向下判断,直到有符合
  284.                                 k = 1;                  //k赋值1
  285.                                 break;       //下同,略         
  286.                                 case 0x28:   
  287.                                 k = 2 ;
  288.                                 break;  
  289.                                 case 0x18:   
  290.                                 k = 3 ;
  291.                                 break;  
  292.                                 case 0x84:   
  293.                                 k = 4 ;
  294.                                 break;
  295.                                 case 0x44:   
  296.                                 k = 5 ;
  297.                                 break;
  298.                                 case 0x24:   
  299.                                 k = 6 ;
  300.                                 break;
  301.                                 case 0x14:   
  302.                                 k = 7 ;
  303.                                 break;
  304.                                 case 0x82:   
  305.                                 k = 8 ;
  306.                                 break;
  307.                                 case 0x42:   
  308.                                 k = 9 ;
  309.                                 break;
  310.                                 case 0x22:   
  311.                                 k = 10 ;
  312.                                 break;
  313.                                 case 0x12:   
  314.                                 k = 11 ;
  315.                                 break;
  316.                                 case 0x81:   
  317.                                 k = 12 ;
  318.                                 break;
  319.                                 case 0x41:   
  320.                                 k = 13 ;
  321.                                 break;
  322.                                 case 0x21:   
  323.                                 k = 14 ;
  324.                                 break;
  325.                                 case 0x11:   
  326.                                 k = 15 ;
  327.                                 break;
  328.                                 default :                 //如果以上都不符合,直接跳出,无键值输出
  329.                                 break;
  330.                         }
  331.                 }
  332.         }
  333. }

  334. void main(void)                                                   //主函数
  335. {
  336.         SPK=0;
  337.         LED1=1;                                                           
  338.         LED2=0;                                                    //开机默认弹奏模式
  339.         P0=0xc0;                                                   //数码管显示0
  340.         IE=0x87;                                                   //定义外部中断控制器
  341.         TMOD=0x01;                                                   //定义定时器0的工作方式
  342.         IT0=1;                                                           //外部中断0为下降沿触发
  343.         IT1=1;                                                           //外部中断1为下降沿触发
  344.         while(1)                                                   //进入死循环
  345.         {
  346.                 P1=0xf0;                                            //P1口赋值
  347.                 if((P1&0xf0)!=0xf0)                           //判断P0口是否有变化
  348.                 {        
  349.                         anjian();                                   //读取键值
  350.                         P0=DSY_CODE[k];                           //显示键值,也就是显示音符
  351.                         if(FY==0)                                   //如果是弹奏模式
  352.                         {
  353.                                 STH0 = tab[k]/256;
  354.                                 STL0 = tab[k]%256;           //根据k的值赋初值给T0
  355.                                 TR0 = 1;               //打开定时器用于定时产生频率发生     
  356.                                 while ((P1&0xf0)!=0xf0); //按键不松开的话,T0就一直产生频率
  357.                                 TR0=0;                 //按键松开后关闭T0计时,频率停止
  358.                         }
  359.                         else  //如果是播放模式(上面的if语句不成立就执行else)
  360.                         {
  361.                                 while (FY==1)                                                          //进入播放模式
  362.                                 {
  363.                                         if(Song[k][Tone_Index]==-1)                  //一首播放完退出
  364.                                         {
  365.                                                 Tone_Index=0;
  366.                                                 SPK=0;
  367.                                                 break;
  368.                                         }  
  369.                                         STH0=(tab[Song[k][Tone_Index]])/256;
  370.                                         STL0=(tab[Song[k][Tone_Index]])%256; //将内置音乐数组的数据赋给定时器做为初值计时
  371.                                 //        P0=DSY_CODE[Song[k][Tone_Index]];          //显示播放的音符
  372.                                         TR0 = 1;                                                          //打开定时器定时开关
  373.                                         delay1(300*Len[k][Tone_Index]);          //节拍数组延时
  374.                                         Tone_Index++;                                                  //变量加准备播放下一个音符
  375.                                         TR0=0;                                                                 //停止定时器
  376.                                         anjian();                                                         //扫描按键
  377.                                         P0=DSY_CODE[k];                                                 //显示音乐序号
  378.                                         while((P1&0xf0)!=0xf0);
  379.                                 }
  380.                         }
  381.                 }
  382.         }
  383. }

  384. void EXO_IXT() interrupt 0                  //外部中断0
  385. {
  386.         FY=0;                                                  //弹奏模式
  387.         LED1=1;
  388.         LED2=0;                                                  //点亮弹奏模式指示灯
  389.         Tone_Index=0;                                  //歌曲音符序号清零,以便于下次播放内置音乐时从头播放
  390. }
  391. void EX1_INT() interrupt 2                  //外部中断1
  392. {
  393.         FY=1;                                                  //播放模式
  394.         LED1=0;                                                  //点亮播放模式指示灯
  395.         LED2=1;
  396. }
  397. void time0_int(void) interrupt 1 using 0   //定时器0
  398. {      
  399.         TH0 = STH0;                                   //定时器赋初值
  400.         TL0 = STL0;
  401.         SPK=!SPK;                             //喇叭引脚取反,产生频率的音乐
  402. }
复制代码

所有资料51hei提供下载:
电子琴.7z (6.46 MB, 下载次数: 354)


限于篇幅其余资料在压缩包中,含视频等

评分

参与人数 2黑币 +56 收起 理由
炸天帮二哈 + 6 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:328014 发表于 2019-12-10 01:13 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:328014 发表于 2019-12-10 01:14 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:657933 发表于 2019-12-27 22:50 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

5#
ID:897709 发表于 2021-3-28 17:11 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

6#
ID:923677 发表于 2021-5-19 19:04 | 只看该作者
实验板一定要用这个吗?
回复

使用道具 举报

7#
ID:236196 发表于 2021-6-9 14:16 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

8#
ID:635085 发表于 2021-12-3 21:49 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

9#
ID:635085 发表于 2021-12-3 21:49 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

10#
ID:988176 发表于 2021-12-6 16:23 | 只看该作者

好资料,51黑有你更精彩!!!
回复

使用道具 举报

11#
ID:988717 发表于 2021-12-6 17:03 | 只看该作者

好资料,51黑有你更精彩
回复

使用道具 举报

12#
ID:590050 发表于 2021-12-6 17:07 | 只看该作者

好资料,51黑有你更精彩!!!
回复

使用道具 举报

13#
ID:990070 发表于 2021-12-9 14:38 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

14#
ID:991603 发表于 2021-12-13 12:22 来自手机 | 只看该作者
好资料,51黑有你更精彩!!! 回复
回复

使用道具 举报

15#
ID:1030998 发表于 2022-5-31 17:38 | 只看该作者
牛啊这四百多行
回复

使用道具 举报

16#
ID:943462 发表于 2022-6-7 00:14 来自手机 | 只看该作者
膜拜大佬
回复

使用道具 举报

17#
ID:1032926 发表于 2022-6-7 16:43 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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