久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18651|回復: 30
收起左側

絕對干貨 單片機8鍵電子琴設計(源碼+仿真)

  [復制鏈接]
ID:265962 發表于 2018-12-29 11:38 | 顯示全部樓層 |閱讀模式
當初的設計親自試驗,可用,歡迎需要的小伙伴下載

制作出來的實物圖如下:

電子琴 (1).jpg 電子琴 (2).jpg

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  1. #include <reg52.h>                 //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535

  4. sbit beep  = P2^5;           //蜂鳴器定義

  5. sbit K1=P1^0;//給P1^0定義,控制DO的發音
  6. sbit K2=P1^1;//給P1^1定義,控制XI的發音
  7. sbit K3=P1^2;//給P1^2定義,控制LA的發音
  8. sbit K4=P1^3;//給P1^3定義,控制SO的發音
  9. sbit K5=P3^4;//給P3^4定義,控制FA的發音
  10. sbit K6=P3^5;//給P3^5定義,控制MI的發音
  11. sbit K7=P3^6;//給P3^6定義,控制RE的發音
  12. sbit K8=P3^7;//給P3^7定義,控制DO的發音

  13. sbit K9=P2^0;//音樂播放按鍵
  14. uchar flag_en = 0;           //開始放歌
  15. uchar flag_i = 0;

  16. //數碼管段選定義       0    1    2    3   4           5        6         7          8           9        
  17. uchar code smg_du[]={0xde,0x90,0xcd,0xd9,0x93,0x5b,0x5f,0xd0,0xdf,0xdb
  18. //                                           A        B         C          D           E   F        不顯示
  19.                                          };         //斷碼        

  20. uchar m,n;
  21. uchar code T[49][2]={{0,0},
  22. {0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
  23. {0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
  24. {0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
  25. {0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
  26. };
  27. uchar code music1[][2]={{0,4},           //青花瓷
  28. {0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{14,8},{19,4},{21,4},{24,4},{21,4},{19,16},{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{12,8},{19,4},{21,4},{24,4},{19,4},{17,16},{0,4},{17,4},{19,4},{21,4},
  29. {24,4},{26,4},{24,4},{22,4},{24,4},{21,4},{21,4},{19,4},{19,16},{0,4},
  30. {17,4},{19,4},{17,4},{17,4},{19,4},{17,4},{19,4},{19,4},{21,8},{24,4},{21,4},{21,12},{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{14,8},{19,4},{21,4},{24,4},{21,4},{19,16},{0,4},{24,4},{24,4},{21,4},
  31. {19,4},{21,4},{12,8},{19,4},{21,4},{24,4},{19,4},{17,16},{0,4},{17,4},{19,4},{21,4},{24,4},{26,4},{24,4},{22,4},{24,4},{21,4},{21,4},{19,4},{19,12},{12,4},{21,8},{19,4},{19,8},{17,16},
  32. {0xFF,0xFF}};

  33. uchar code music2[][2]={{0,4},          //生日快樂
  34. {17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
  35. {17,6},{17,2},{19,8},{17,8},{24,8},{22,16},{17,6},{17,2},{29,8},{26,8},{22,8},{21,8},{19,8},{27,6},{27,2},{26,8},{22,8},{24,8},{22,16},
  36. {0xFF,0xFF}};

  37. uchar code music3[][2]={{0,4},         //愛情買賣
  38. {22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
  39. {15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
  40. {20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
  41. {22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
  42. {22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
  43. {15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
  44. {20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
  45. {24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
  46. {17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
  47. {24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
  48. {15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
  49. {17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
  50. {17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
  51. {29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
  52. {29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
  53. {20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
  54. {0xFF,0xFF}};
  55. void delay(uchar p)
  56. {
  57.     uchar i,j;
  58.     for(;p>0;p--)
  59.     for(i=181;i>0;i--)
  60.     for(j=181;j>0;j--);
  61. }

  62. void pause()
  63. {
  64.     uchar i,j;
  65.     for(i=150;i>0;i--)
  66.     for(j=150;j>0;j--);
  67. }


  68. /***********************1ms延時函數*****************************/
  69. void delay_1ms(uint q)
  70. {
  71.         uint i,j;
  72.         for(i=0;i<q;i++)
  73.                 for(j=0;j<120;j++);
  74. }

  75. /******************按鍵程序*************************/
  76. void key()          //按鍵程序
  77. {
  78.         if(K1==0)
  79.         {
  80.                 delay_1ms(10);         //按鍵去抖動
  81.                 if(K1==0)
  82.                 {
  83.                         P0=smg_du[0];//使數碼管顯示該音調的字符
  84.                         while(!K1)
  85.                         {
  86.                                 m = 8;
  87.                                 TR0 = 1;           //打開定時器
  88.                         }//使蜂鳴器發出相應頻率的聲音;
  89.                         TR0 = 0;              //關閉定時器
  90.                 }
  91.         }
  92.         if(K2==0)
  93.         {
  94.                 delay_1ms(10);         //按鍵去抖動
  95.                 if(K2==0)
  96.                 {
  97.                         P0=smg_du[1];//使數碼管顯示該音調的字符
  98.                         while(!K2)
  99.                         {
  100.                                 m = 9;
  101.                                 TR0 = 1;           //打開定時器
  102.                         }//使蜂鳴器發出相應頻率的聲音;
  103.                         TR0 = 0;              //關閉定時器
  104.                 }
  105.         }
  106.         if(K3==0)
  107.         {
  108.                 delay_1ms(10);         //按鍵去抖動
  109.                 if(K3==0)
  110.                 {
  111.                         P0=smg_du[2];//使數碼管顯示該音調的字符
  112.                         while(!K3)
  113.                         {
  114.                                 m = 10;
  115.                                 TR0 = 1;           //打開定時器
  116.                         }//使蜂鳴器發出相應頻率的聲音;
  117.                         TR0 = 0;              //關閉定時器
  118.                 }
  119.         }
  120.         if(K4==0)
  121.         {
  122.                 delay_1ms(10);         //按鍵去抖動
  123.                 if(K4==0)
  124.                 {
  125.                         P0=smg_du[3];//使數碼管顯示該音調的字符               
  126.                         while(!K4)
  127.                         {
  128.                                 m = 11;
  129.                                 TR0 = 1;           //打開定時器
  130.                         }//使蜂鳴器發出相應頻率的聲音;
  131.                         TR0 = 0;              //關閉定時器
  132.                 }
  133.         }
  134.         if(K5==0)
  135.         {
  136.                 delay_1ms(10);         //按鍵去抖動
  137.                 if(K5==0)
  138.                 {
  139.                         P0=smg_du[4];//使數碼管顯示該音調的字符
  140.                         while(!K5)               
  141.                         {
  142.                                 m = 12;
  143.                                 TR0 = 1;           //打開定時器
  144.                         }//使蜂鳴器發出相應頻率的聲音;
  145.                         TR0 = 0;              //關閉定時器
  146.                 }
  147.         }
  148.         if(K6==0)
  149.         {
  150.                 delay_1ms(10);         //按鍵去抖動
  151.                 if(K6==0)
  152.                 {
  153.                         P0=smg_du[5];//使數碼管顯示該音調的字符
  154.                         while(!K6)         
  155.                         {
  156.                                 m = 13;
  157.                                 TR0 = 1;           //打開定時器
  158.                         }//使蜂鳴器發出相應頻率的聲音;
  159.                         TR0 = 0;              //關閉定時器
  160.                 }
  161.         }
  162.         if(K7==0)
  163.         {
  164.                 delay_1ms(10);         //按鍵去抖動
  165.                 if(K7==0)
  166.                 {
  167.                         P0=smg_du[6];//使數碼管顯示該音調的字符
  168.                         while(!K7)
  169.                         {
  170.                                 m = 14;
  171.                                 TR0 = 1;           //打開定時器
  172.                         }//使蜂鳴器發出相應頻率的聲音;
  173.                         TR0 = 0;              //關閉定時器
  174.                 }
  175.         }
  176.         if(K8==0)
  177.         {
  178.                 delay_1ms(10);         //按鍵去抖動
  179.                 if(K8==0)
  180.                 {
  181.                         P0=smg_du[7];//使數碼管顯示該音調的字符
  182.                         while(!K8)
  183.                         {
  184.                                 m = 15;
  185.                                 TR0 = 1;           //打開定時器
  186.                         }//使蜂鳴器發出相應頻率的聲音;
  187.                         TR0 = 0;              //關閉定時器
  188.                 }
  189.         }
  190.         P0 = 0x20;
  191.         K9 = 1;           
  192.         if(K9==0)
  193.         {
  194.                 delay_1ms(10);         //按鍵去抖動
  195.                 if(K9==0)
  196.                 {
  197.                         flag_en ++;
  198.                         flag_i = 0;
  199.                         if(flag_en > 3)
  200.                         {
  201.                                 flag_en = 0;        
  202.                                 TR0 = 0;
  203.                         }        
  204.                         while(!K9)
  205.                         {
  206.                         }//使蜂鳴器發出相應頻率的聲音;
  207.                 }
  208.         }
  209. }


  210. /******************主程序**********************/           
  211. void main()
  212. {
  213.         P0 = P1 = P2 = P3 = 0xff;
  214.         TMOD=0x01;  EA=1; ET0=1;    //定時器0初始化
  215.         while(1)
  216.         {
  217.                 key();          //按鍵程序
  218.                 if(flag_en == 1)         //青花瓷
  219.                 {
  220.                         m=music1[flag_i][0];n=music1[flag_i][1];            //放歌
  221.                         P0 = smg_du[m % 8];          //顯示
  222.                         if(m==0x00)
  223.                         {
  224.                                 TR0=0;
  225.                                 beep = 1;
  226.                                 delay(n);
  227.                                 flag_i++;
  228.                         }
  229.                         else if(m==0xFF)                                 //放歌結束
  230.                         {
  231.                                 TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
  232.                         else if(m==music1[flag_i+1][0])
  233.                                 {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
  234.                         else
  235.                                 {TR0=1;delay(n);flag_i++;}
  236.                 }
  237.                 else
  238.                         beep = 1 ;

  239.                 if(flag_en == 2)         //生日歌
  240.                 {
  241.                         m=music2[flag_i][0];n=music2[flag_i][1];            //放歌
  242.                         P0 = smg_du[m % 8];          //顯示
  243.                         if(m==0x00)
  244.                         {
  245.                                 TR0=0;
  246.                                 beep = 1;
  247.                                 delay(n);
  248.                                 flag_i++;
  249.                         }
  250.                         else if(m==0xFF)                                 //放歌結束
  251.                         {
  252.                                 TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
  253.                         else if(m==music2[flag_i+1][0])
  254.                                 {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
  255.                         else
  256.                                 {TR0=1;delay(n);flag_i++;}
  257.                 }
  258.                 else
  259. ……………………

  260. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

程序等資料51hei附件下載:
單片機8鍵電子琴.7z (1.46 MB, 下載次數: 752)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:449377 發表于 2018-12-30 18:18 | 顯示全部樓層
有沒有16鍵的啊
回復

使用道具 舉報

ID:483705 發表于 2019-3-4 09:49 | 顯示全部樓層

真的會唱好多歌曲。!酷斃了。。!
回復

使用道具 舉報

ID:497882 發表于 2019-4-1 19:45 | 顯示全部樓層
樓主你的這個可以直接放8節音嗎?doremifa這幾個就夠了的。
回復

使用道具 舉報

ID:531751 發表于 2019-5-9 17:13 | 顯示全部樓層
贊一個!!
回復

使用道具 舉報

ID:531751 發表于 2019-5-9 20:25 來自觸屏版 | 顯示全部樓層
左下角是啥呀?
回復

使用道具 舉報

ID:182775 發表于 2019-6-12 23:00 | 顯示全部樓層
謝謝樓主,很有用!。。。。。。。。!
回復

使用道具 舉報

ID:621345 發表于 2019-10-9 20:25 | 顯示全部樓層
可以,很有幫助,謝謝
回復

使用道具 舉報

ID:624669 發表于 2019-10-31 14:50 來自觸屏版 | 顯示全部樓層
開始參考,坐等焊接
回復

使用道具 舉報

ID:624669 發表于 2019-10-31 14:50 來自觸屏版 | 顯示全部樓層
感謝大佬!都是現成的
回復

使用道具 舉報

ID:624669 發表于 2019-10-31 15:06 | 顯示全部樓層
這個電路圖貌似在哪家店見過
回復

使用道具 舉報

ID:624669 發表于 2019-10-31 15:12 | 顯示全部樓層
這個是可以直接播放音樂的嗎,也可以通過按鍵發聲音
回復

使用道具 舉報

ID:624669 發表于 2019-10-31 15:24 | 顯示全部樓層
仿真軟件用multisim可以嗎
回復

使用道具 舉報

ID:539658 發表于 2019-11-2 20:56 | 顯示全部樓層
厲害,謝謝
回復

使用道具 舉報

ID:634898 發表于 2019-11-3 20:19 | 顯示全部樓層
這個真的酷斃了,感謝樓主分享
回復

使用道具 舉報

ID:634994 發表于 2019-11-3 21:00 | 顯示全部樓層
酷斃了  好多歌都能弄出來
回復

使用道具 舉報

ID:642523 發表于 2019-11-19 14:18 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:659058 發表于 2019-12-8 20:12 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:24810 發表于 2019-12-23 11:23 | 顯示全部樓層
以前看到一個程序,用STC15K單片機,可以存 真實音色進去,通過DA轉換出來的,聲音更真實。
回復

使用道具 舉報

ID:423971 發表于 2019-12-24 11:35 | 顯示全部樓層
贊。∠螺d來看看 多謝樓主
回復

使用道具 舉報

ID:672981 發表于 2019-12-25 14:57 | 顯示全部樓層
請問大佬 有原理圖講解視頻嗎?很需要哦
回復

使用道具 舉報

ID:781068 發表于 2020-6-16 15:14 | 顯示全部樓層
下下來看看
回復

使用道具 舉報

ID:783877 發表于 2020-6-19 10:14 | 顯示全部樓層
大佬厲害 向大佬學習
回復

使用道具 舉報

ID:784300 發表于 2020-6-20 19:07 | 顯示全部樓層
836219677 發表于 2019-11-3 21:00
酷斃了  好多歌都能弄出來

可以播放嗎?為啥我下載了播放不出來啊
回復

使用道具 舉報

ID:855035 發表于 2020-12-5 23:33 來自觸屏版 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:888052 發表于 2021-3-3 15:45 | 顯示全部樓層
厲害呀樓主,不錯不錯,學到了
回復

使用道具 舉報

ID:935529 發表于 2021-6-9 17:17 | 顯示全部樓層
沃德哇咔 發表于 2019-12-25 14:57
請問大佬 有原理圖講解視頻嗎?很需要哦

有講解嗎?
回復

使用道具 舉報

ID:936280 發表于 2021-7-30 19:45 | 顯示全部樓層
仿真怎么打開呀?
回復

使用道具 舉報

ID:561301 發表于 2021-8-5 10:53 | 顯示全部樓層
剛學單片機,學著搞一個玩
回復

使用道具 舉報

ID:350104 發表于 2021-8-9 11:26 | 顯示全部樓層
很好的應用 推薦一下
回復

使用道具 舉報

ID:976016 發表于 2021-11-29 13:26 | 顯示全部樓層
這個板子還在嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲不卡视频 | 午夜视频一区二区三区 | 国产毛片久久久久久久久春天 | 天天干视频 | 国产乱码精品一区二区三区五月婷 | 欧美成人精品在线观看 | 男女羞羞视频免费 | 亚洲444kkkk在线观看最新 | 国产精品国产三级国产aⅴ中文 | av中文在线 | 在线一区 | 91视视频在线观看入口直接观看 | 天天综合亚洲 | 97精品国产一区二区三区 | 国产一区二区视频在线 | 国产欧美日韩一区二区三区 | 欧美日韩国产传媒 | 久久久精品网 | 久久国产精品久久国产精品 | 国产电影一区二区在线观看 | av网站在线播放 | 亚洲精品91 | 91亚洲国产亚洲国产 | 国产中文区二幕区2012 | 亚洲精品免费在线 | 999精品在线 | 色综合视频| 一区二区三区在线播放 | 亚洲国产成人在线观看 | 欧美国产精品 | 亚洲国产一区二区三区在线观看 | av无遮挡| 久草视 | 日韩中文字幕一区 | 日韩一区中文字幕 | а_天堂中文最新版地址 | 日韩一区二区在线看 | 精品欧美一区二区三区久久久 | 日韩一区二区三区在线 | 国产精品一区二区久久 | 欧美激情视频一区二区三区免费 |