找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4454|回复: 7
收起左侧

STC15f104w单片机四位数码管定时闹钟,播放音乐

  [复制链接]
ID:481965 发表于 2019-4-7 15:56 | 显示全部楼层 |阅读模式
使用Stc15f104w作为控,驱动数码管为两片74hc595n
使用无源蜂鸣器,可播放曲子,程序里为天空之城
两个按钮调时间,程序为网上寻找组合辛苦修改调试好的,不喜勿喷
1111.jpg


回复

使用道具 举报

ID:328014 发表于 2019-4-9 01:40 | 显示全部楼层
好东东 能分享源码吗?
回复

使用道具 举报

ID:66287 发表于 2019-4-9 09:15 | 显示全部楼层
本末倒置,两片74HC595很贵了,换一片多IO的单片机,资源多,编程方便,维护也简单啊。
回复

使用道具 举报

ID:481965 发表于 2019-4-10 14:50 | 显示全部楼层
bhjyqjs 发表于 2019-4-9 09:15
本末倒置,两片74HC595很贵了,换一片多IO的单片机,资源多,编程方便,维护也简单啊。

74hc595一片一两角吧,两片可以控制八位数码管,三片就可以控制16位
回复

使用道具 举报

ID:481965 发表于 2019-4-10 14:51 | 显示全部楼层
51hei团团 发表于 2019-4-9 01:40
好东东 能分享源码吗?

看下一贴
回复

使用道具 举报

ID:481965 发表于 2019-4-10 15:12 | 显示全部楼层

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define NOTE_D0 0//220
  4. #define NOTE_D1 5//294
  5. #define NOTE_D2 7//330
  6. #define NOTE_D3 8//350
  7. #define NOTE_D4 10//393
  8. #define NOTE_D5 12//441
  9. #define NOTE_D6 14//495
  10. #define NOTE_D7 16//556

  11. #define NOTE_DL1 147
  12. #define NOTE_DL2 165
  13. #define NOTE_DL3 175
  14. #define NOTE_DL4 196
  15. #define NOTE_DL5 0//221
  16. #define NOTE_DL6 2//248
  17. #define NOTE_DL7 4//278

  18. #define NOTE_DH1 17//589
  19. #define NOTE_DH2 19//661
  20. #define NOTE_DH3 20//700
  21. #define NOTE_DH4 22//786
  22. #define NOTE_DH5 24//882
  23. #define NOTE_DH6 26//990
  24. #define NOTE_DH7 112   
  25. sbit buzzer=P3^4;
  26. sbit  k1=P3^3;//sbit  Echo=  P3^3;
  27. sbit  k2=P3^2;//sbit  Trig=  P3^2;
  28. sbit  DS   = P3^1;    //p3.4串行数据输入   DS
  29. sbit  SH_CP = P3^0;    //串行输入时钟,上升沿有效
  30. sbit  ST_CP = P3^5;    //串行寄存器时钟,上升沿有效
  31. typedef unsigned char uchar;
  32. typedef unsigned int uint;
  33. sfr P3M1 = 0xb1;
  34. sfr P3M0 = 0xb2;
  35. sfr        T2H  = 0xD6;
  36. sfr        T2L  = 0xD7;
  37. sfr IE2  = 0xAF;
  38. sfr        AUXR = 0x8E;



  39. /**********函数声明********************/
  40. void SendTo595(uchar byteData);
  41. void xianshi(uint shu);
  42. void xian();
  43. void key1pros();
  44. void key2pros();
  45. void tiaoshi();
  46. void Timer2Init() ;
  47. /***********************************/


  48. char code DISP[] = {0xf5, 0x05, 0xb3, 0x97, 0x47, 0xd6, 0xf6, 0x85, 0xf7,0xd7};
  49. char code DIWP[] = {0xfd, 0x0d, 0xbb, 0x9f, 0x4f, 0xde, 0xfe, 0x8d, 0xff,0xdf};
  50. char code QQ[]={0x70,0xb0,0xd0,0xe0};
  51. int  t50ms=0,t1s=60,tmin=60,th=9;
  52. uint  po=0,aa=4,tt=0;
  53. uint c=0,v=0,b=0,n=0,x=1;
  54. uint length;//这里定义一个变量,后面用来表示共有多少个音符//uint  time=0;//uint q;
  55. uchar th0_f; //在中断中装载的 T0 的值高 8 位
  56. uchar tl0_f ;//在中断中装载的 T0 的值低 8 位

  57. //T0 的值,及输出频率对照表
  58. uchar code freq[36*2]={
  59. 0xA9,0xEF,//00220HZ ,1 //0
  60. 0x93,0xF0,//00233HZ ,1#//1
  61. 0x73,0xF1,//00247HZ ,2//2
  62. 0x49,0xF2,//00262HZ ,2#//3
  63. 0x07,0xF3,//00277HZ ,3//4
  64. 0xC8,0xF3,//00294HZ ,4//5
  65. 0x73,0xF4,//00311HZ ,4#//6
  66. 0x1E,0xF5,//00330HZ ,5//7
  67. 0xB6,0xF5,//00349HZ ,5#//8
  68. 0x4C,0xF6,//00370HZ ,6//9
  69. 0xD7,0xF6,//00392HZ ,6#//10
  70. 0x5A,0xF7,//00415HZ ,7//11
  71. 0xD8,0xF7,//00440HZ 1 //12
  72. 0x4D,0xF8,//00466HZ 1# //13
  73. 0xBD,0xF8,//00494HZ 2 //14
  74. 0x24,0xF9,//00523HZ 2# //15
  75. 0x87,0xF9,//00554HZ 3 //16
  76. 0xE4,0xF9,//00587HZ 4 //17
  77. 0x3D,0xFA,//00622HZ 4# //18
  78. 0x90,0xFA,//00659HZ 5 //19
  79. 0xDE,0xFA,//00698HZ 5# //20
  80. 0x29,0xFB,//00740HZ 6 //21
  81. 0x6F,0xFB,//00784HZ 6# //22
  82. 0xB1,0xFB,//00831HZ 7 //23
  83. 0xEF,0xFB,//00880HZ `1
  84. 0x2A,0xFC,//00932HZ `1#
  85. 0x62,0xFC,//00988HZ `2
  86. 0x95,0xFC,//01046HZ `2#
  87. 0xC7,0xFC,//01109HZ `3
  88. 0xF6,0xFC,//01175HZ `4
  89. 0x22,0xFD,//01244HZ `4#
  90. 0x4B,0xFD,//01318HZ `5
  91. 0x73,0xFD,//01397HZ `5#
  92. 0x98,0xFD,//01480HZ `6
  93. 0xBB,0xFD,//01568HZ `6#
  94. 0xDC,0xFD,//01661HZ `7 //35
  95. };

  96. uint code tune[] =  
  97. {  
  98. NOTE_D0,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3, NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D4,NOTE_DH1, NOTE_D3,NOTE_D3,NOTE_D0,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D4,NOTE_D4,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D0,NOTE_D6,NOTE_D7, NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_DH1,NOTE_D7,NOTE_D7,NOTE_DH1,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH3,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D7,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_DH1,NOTE_DH2,NOTE_DH3,NOTE_DH2,NOTE_DH3,NOTE_DH5,NOTE_DH2,NOTE_DH2,NOTE_DH2,NOTE_D5,NOTE_D5,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH2,NOTE_DH2,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_DH4,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH5,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5, NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D7
  99. };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
  100. float code duration[]=

  101. {  
  102.   1,0.5,0.5,     1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
  103.   1+0.5,0.5,1,1,     1,1,1,1,          1+0.5,0.5,1,1,
  104.   1,1,0.5,0.5,0.5,0.5,    1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
  105.   1+0.5,0.5,1,1,    1,1,1,0.5,0.5,     1+0.5,0.5,1,1,
  106.   1,1,1,0.5,0.5,    1,0.5,0.25,0.25,0.25,0.5,    0.5,0.5,0.5,0.25,0.5,1,
  107.   0.5,0.5,0.5,0.5,1,1,    1,1,1,0.5,0.5,    1+0.5,0.5,1,1,
  108.   1,1,1,0.5,0.5,    1.5,0.5,1,1,    1,1,1,1,
  109.   0.5,0.5,1,1,0.5,0.5,    1.5,0.25,0.5,1,    1,1,1,1,
  110.   1,1,1,1,    1,1,1,1,    0.5,0.5,1,1,0.5,0.5,
  111.   1,0.5,0.5,1,1,    1,1,1,1,    1,1,1,1,
  112.   0.5,0.5,1,1,0.5,0.5,    1,0.5,0.25,0.5,1,    1,1,1,0.5,0.5
  113. };//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)






  114. void delay(uint z)//延时1ms
  115. {
  116. uint x,y;
  117. for(x=z;x>0;x--)
  118. {
  119. for(y=0;y<114;y++)
  120. {
  121. }
  122. }
  123. }



  124. void fasheng() //发声子程序
  125. {
  126. unsigned int a,x;
  127. for (a=0;a<900;a++)
  128. {
  129. buzzer=!buzzer;
  130. for (x=0;x<100;x++); //45为蜂鸣器发声频率
  131. }





  132. }



  133. void timer0 (void) interrupt 1
  134. {

  135. TH0=0x3C;
  136. TL0=0xB0;
  137. t50ms++;
  138. if(t50ms==20)//1s
  139. {
  140. t50ms=0;
  141. t1s--;
  142. //while(1){fasheng();delay(1000);}
  143. if(t1s==-1)//1min
  144. {
  145. t1s=59;
  146. tmin--;
  147. //fasheng();
  148. if(tmin==-1)//1h
  149. {





  150. fasheng();
  151. x=0;
  152. TR0=0;





  153. tmin=59;
  154. th--;

  155. }
  156. }

  157. }

  158. }  


  159. //定时中断 2,用于产生唱歌频率
  160. void Timer2_inter() interrupt 12   
  161. {
  162. T2L=tl0_f;
  163. T2H=th0_f; //调入预定时值
  164. buzzer=~buzzer; //取反音乐输出 IO
  165. }


  166. void Timer2Init()        //50毫秒@11.0592MHz
  167. {
  168. AUXR &=  ~(1<<4);                // Timer2 停止运行
  169. AUXR &= 0xFB; //定时器时钟12T模式
  170.         T2H = 0x00;        // 数据位
  171.         T2L = 0x4C;        // 数据位
  172. IE2 |= 0x04; //允许定时器2产生中断
  173. //AUXR |= 0x10; //定时器2开始计时
  174. }



  175. void Time_Init()
  176. {
  177.          TMOD=0x01;        //设T0为方式1,GATE=1;
  178.          TH0=0x3C;
  179.          TL0=0xB0;
  180.     ET0=1;
  181.          EA=1;

  182.                
  183. }       

  184. void SendTo595(uchar Data)
  185. {
  186.    uint i;


  187.    for(i=0;i<8;i++)
  188.    {
  189.                     SH_CP = 0;
  190.                  
  191.         DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0
  192.                  
  193.         Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

  194.         SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期
  195.         _nop_();

  196.    }  


  197. }

  198. void xian()

  199. {


  200. uint qian;
  201. uint bai;
  202. uint shi;
  203. uint ge;
  204. uint j;
  205. qian=tmin/10;
  206. bai=tmin%10;
  207. shi=t1s/10;
  208. ge=t1s%10;



  209. for(j=0;j<20;j++)
  210. {
  211. SendTo595(QQ[0]);
  212. SendTo595(DISP[ge]);
  213. ST_CP = 0;
  214.          _nop_();
  215.          //位移寄存器完毕,转移到存储寄存器
  216.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  217.    _nop_();
  218.   // _nop_();

  219. delay(1);

  220. SendTo595(QQ[1]);
  221. SendTo595(DISP[shi]);
  222. ST_CP = 0;
  223.          _nop_();
  224.          //位移寄存器完毕,转移到存储寄存器
  225.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  226.    _nop_();
  227.   // _nop_();

  228. delay(1);
  229. SendTo595(QQ[2]);
  230. SendTo595(DIWP[bai]);
  231. ST_CP = 0;
  232.          _nop_();
  233.          //位移寄存器完毕,转移到存储寄存器
  234.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  235.    _nop_();
  236.   // _nop_();

  237. delay(1);

  238. SendTo595(QQ[3]);
  239. SendTo595(DISP[qian]);
  240. ST_CP = 0;
  241.          _nop_();
  242.          //位移寄存器完毕,转移到存储寄存器
  243.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  244.    _nop_();
  245.   // _nop_();

  246. delay(1);

  247. }


  248. }






  249. void key1pros()//定义独立按键控制
  250. {
  251.     po=1000;
  252.         if(k1==1)//说明按下去了
  253.         {
  254.           while(po--);//消抖
  255.           if(k1==1)
  256.           {
  257.                   fasheng() ;
  258.                 tt=tt+1;
  259.                 if(tt==10)
  260.                 {
  261.                 tt=0;
  262.                 }//翻转
  263.           }
  264.           
  265.           while(k1);//按键松开
  266.         }
  267. }
  268. void key2pros()
  269. {
  270. po=1000;
  271. if(k2==1)//说明按下去了
  272.         {
  273.           while(po--);//消抖
  274.           if(k2==1)
  275.           {
  276.                   fasheng() ;
  277.                 aa=aa-1;
  278.        
  279.           }
  280.           
  281.           while(k2);//按键松开
  282.         }
  283.        
  284. }

  285. void tiaoshi()
  286. {
  287. switch(aa)
  288.                         {               
  289.                                                         case 4:
  290.                                                         while(aa==4)
  291. {
  292. key2pros();
  293. key1pros();
  294. c=tt;
  295. SendTo595(QQ[0]);
  296. SendTo595(DISP[0]);
  297. ST_CP = 0;
  298.          _nop_();
  299.          //位移寄存器完毕,转移到存储寄存器
  300.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  301.    _nop_();
  302.   // _nop_();

  303. SendTo595(QQ[1]);
  304. SendTo595(DISP[0]);
  305. ST_CP = 0;
  306.          _nop_();
  307.          //位移寄存器完毕,转移到存储寄存器
  308.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  309.    _nop_();
  310.   // _nop_();

  311. SendTo595(QQ[2]);
  312. SendTo595(DIWP[0]);
  313. ST_CP = 0;
  314.          _nop_();
  315.          //位移寄存器完毕,转移到存储寄存器
  316.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  317.    _nop_();
  318.   // _nop_();


  319. SendTo595(QQ[3]);
  320. SendTo595(DISP[c]);
  321. ST_CP = 0;
  322.          _nop_();
  323.          //位移寄存器完毕,转移到存储寄存器
  324.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  325.    _nop_();
  326.   // _nop_();



  327.         }                                               
  328.                                                         break;

  329.                                                         case 3:while(aa==3)
  330.                                                         {

  331. key2pros();
  332. key1pros();
  333. v=tt;
  334. SendTo595(QQ[0]);
  335. SendTo595(DISP[0]);
  336. ST_CP = 0;
  337.          _nop_();
  338.          //位移寄存器完毕,转移到存储寄存器
  339.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  340.    _nop_();
  341.   // _nop_();

  342. SendTo595(QQ[1]);
  343. SendTo595(DISP[0]);
  344. ST_CP = 0;
  345.          _nop_();
  346.          //位移寄存器完毕,转移到存储寄存器
  347.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  348.    _nop_();
  349.   // _nop_();

  350. SendTo595(QQ[2]);
  351. SendTo595(DIWP[v]);
  352. ST_CP = 0;
  353.          _nop_();
  354.          //位移寄存器完毕,转移到存储寄存器
  355.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  356.    _nop_();
  357.   // _nop_();


  358. SendTo595(QQ[3]);
  359. SendTo595(DISP[c]);
  360. ST_CP = 0;
  361.          _nop_();
  362.          //位移寄存器完毕,转移到存储寄存器
  363.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  364.    _nop_();
  365.   // _nop_();
  366. }
  367.                                                        
  368.                                                         break;

  369.                                                         case 2:while(aa==2)
  370.                                                         {
  371. key2pros();
  372. key1pros();
  373. b=tt;
  374. SendTo595(QQ[0]);
  375. SendTo595(DISP[0]);
  376. ST_CP = 0;
  377.          _nop_();
  378.          //位移寄存器完毕,转移到存储寄存器
  379.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  380.    _nop_();
  381.   // _nop_();

  382. SendTo595(QQ[1]);
  383. SendTo595(DISP[b]);
  384. ST_CP = 0;
  385.          _nop_();
  386.          //位移寄存器完毕,转移到存储寄存器
  387.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  388.    _nop_();
  389.   // _nop_();

  390. SendTo595(QQ[2]);
  391. SendTo595(DIWP[v]);
  392. ST_CP = 0;
  393.          _nop_();
  394.          //位移寄存器完毕,转移到存储寄存器
  395.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  396.    _nop_();
  397.   // _nop_();


  398. SendTo595(QQ[3]);
  399. SendTo595(DISP[c]);
  400. ST_CP = 0;
  401.          _nop_();
  402.          //位移寄存器完毕,转移到存储寄存器
  403.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  404.    _nop_();
  405.   // _nop_();
  406. }
  407.                                                        
  408.                                                         break;


  409.                                                         case 1:
  410.                                                         while(aa==1)
  411.                                                         {
  412. key2pros();
  413. key1pros();
  414. n=tt;
  415. SendTo595(QQ[0]);
  416. SendTo595(DISP[n]);
  417. ST_CP = 0;
  418.          _nop_();
  419.          //位移寄存器完毕,转移到存储寄存器
  420.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  421.    _nop_();
  422.   // _nop_();

  423. SendTo595(QQ[1]);
  424. SendTo595(DISP[b]);
  425. ST_CP = 0;
  426.          _nop_();
  427.          //位移寄存器完毕,转移到存储寄存器
  428.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  429.    _nop_();
  430.   // _nop_();

  431. SendTo595(QQ[2]);
  432. SendTo595(DIWP[v]);
  433. ST_CP = 0;
  434.          _nop_();
  435.          //位移寄存器完毕,转移到存储寄存器
  436.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  437.    _nop_();
  438.   // _nop_();


  439. SendTo595(QQ[3]);
  440. SendTo595(DISP[c]);
  441. ST_CP = 0;
  442.          _nop_();
  443.          //位移寄存器完毕,转移到存储寄存器
  444.    ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  445.    _nop_();
  446.   // _nop_();
  447. }
  448. t1s=b*10+n;
  449. tmin=c*10+v;
  450.                                                        
  451.                                                         break;

  452.                                

  453. }



  454. }














  455. void main()

  456. {
  457. Time_Init();
  458. Timer2Init();
  459. P3M0 = 0x00;
  460. P3M1 = 0x00;
  461. length = sizeof(tune)/sizeof(tune[0]);

  462. while(aa>0)
  463. {

  464. tiaoshi();
  465. //qq=tt;

  466. //TR0 = 1;
  467. //xian();
  468. }
  469. TR0 = 1;
  470. while(x)
  471. {


  472. xian();



  473. }

  474. AUXR |= 0x10;
  475. while(1)
  476. {
  477. for(x=0;x<length;x++)
  478. {
  479. tl0_f=freq[2*tune[x]]; //置一个音符的值
  480. th0_f=freq[2*tune[x]+1];
  481. delay(3500*duration[x]);
  482. }
  483. }


  484. }       

复制代码


回复

使用道具 举报

ID:55085 发表于 2020-6-11 16:52 | 显示全部楼层
看起来不错哦!学习啦!!!
回复

使用道具 举报

ID:848824 发表于 2020-12-19 05:21 来自手机 | 显示全部楼层
这个挺好有电路图就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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