找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的电子琴代码和PCB与原理图(有实物)

[复制链接]
跳转到指定楼层
楼主
基于单片机的电子琴(电子系统设计的题目),希望可以帮到大家
制作成功的实物图:

Altium Designer画的电子琴原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #include <reg51.h>
  2. #include "lcd.h"
  3. #include "key.h"
  4. //---重定义关键词---//
  5. #ifndef u8
  6. #define u8 unsigned char
  7. #endif

  8. #ifndef u32
  9. #define        u32 unsigned int
  10. #endif

  11. sbit BEEP = P2^0;

  12. u8 m,n;
  13. u8 i=0;
  14. u8 play_flag = 1;
  15. u8 num;

  16. u8 code T[49][2]={{0,0},
  17.         {0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
  18.         {0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
  19.         {0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
  20.         {0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
  21. };
  22. u8 code music_xyj[][2]=
  23. {
  24.         {17,8},{17,8},{10,16},{13,8},{10,4},{8,4},{10,8},{0,8},
  25.         {10,4},{13,4},{13,4},{13,4},{13,8},{13,4},{10,4},{13,8},
  26.         {15,4},{17,4},{17,16},{17,8},{20,8},{10,8},{13,8},{10,8},
  27.         {10,4},{8,4},{5,16},{15,4},{15,4},{15,4},{17,2},{17,2},
  28.         {8,8},{12,8},{10,24},{22,4},{22,4},{22,4},{22,4},{17,8},
  29.         {20,2},{20,6},{20,4},{20,4},{17,4},{22,4},{20,4},{0,8},
  30.         {18,4},{18,4},{18,4},{18,4},{18,8},{13,2},{13,6},{13,4},
  31.         {15,4},{13,4},{15,4},{17,12},{22,4},{22,4},{22,4},{22,4},
  32.         {17,8},{20,2},{20,6},{20,4},{20,4},{17,4},{22,4},{20,4},
  33.         {0,8},{22,4},{22,4},{22,4},{22,4},{22,2},{20,6},{20,4},
  34.         {20,4},{20,4},{17,4},{20,12},{15,4},{15,4},{13,4},{15,4},
  35.         {17,4},{15,4},{13,4},{15,2},{15,2},{17,4},{15,4},{17,4},
  36.         {20,20},{13,4},{15,4},{17,4},{20,4},{20,8},{12,8},{10,24},
  37.         {0xFF,0xFF}
  38. };



  39. u8 code music_htys[][2] =
  40. {
  41.         {0,4},{13,4},{13,8},{10,4},{8,8},{10,8},{13,8},{13,4},
  42.         {15,4},{17,16},{15,4},{15,8},{13,4},{13,4},{15,8},{15,4},
  43.         {20,4},{20,4},{17,4},{17,4},{15,4},{17,16},{13,4},{13,8},
  44.         {10,4},{8,8},{20,8},{17,4},{15,4},{17,4},{15,4},{13,16},
  45.         {15,4},{15,8},{13,4},{15,4},{15,8},{17,4},{15,4},{13,4},
  46.         {10,4},{15,4},{13,16},{13,4},{13,8},{10,4},{8,8},{10,8},
  47.         {13,4},{13,8},{15,4},{17,16},{15,4},{15,8},{13,4},{15,8},
  48.         {15,4},{20,4},{20,4},{17,4},{17,4},{15,4},{17,16},{13,4},
  49.         {13,4},{13,4},{10,4},{8,8},{8,8},{17,4},{15,4},{17,4},
  50.         {15,4},{13,16},{15,4},{15,8},{13,4},{15,4},{15,8},{17,4},
  51.         {15,4},{13,4},{10,4},{15,4},{13,16},{17,4},{20,8},{20,4},
  52.         {20,8},{20,8},{22,4},{20,4},{17,4},{15,4},{13,16},{22,4},
  53.         {25,4},{22,4},{20,4},{17,4},{15,4},{13,4},{10,4},{15,8},
  54.         {15,4},{17,4},{17,4},{15,12},{17,4},{20,8},{20,4},{20,8},
  55.         {20,8},{22,4},{20,4},{17,4},{15,4},{13,16},{10,4},{13,4},
  56.         {10,4},{8,4},{15,8},{17,8},{13,24},{0,8},{0xFF,0xFF}
  57. };

  58. u8 code music_cq[][2]=
  59. {
  60.         {0,4},{13,2},{13,2},{13,4},{17,4},{15,4},{15,2},{15,2},
  61.         {13,2},{13,4},{13,2},{15,4},{15,4},{13,2},{10,2},{10,4},
  62.         {10,16},{0,4},{12,2},{12,2},{12,4},{13,2},{15,2},{15,4},
  63.         {12,4},{10,2},{8,4},{5,2},{5,16},{0,8},{0,8},{0,4},
  64.         {17,2},{15,2},{17,4},{17,2},{15,2},{15,4},{15,2},{13,2},
  65.         {13,8},{15,4},{10,4},{10,2},{10,2},{15,2},{13,2},{13,8},
  66.         {0,8},{0,4},{12,2},{12,2},{12,4},{13,2},{15,2},{15,4},
  67.         {15,4},{10,2},{8,6},{5,16},{0,8},{0,8},{20,6},{15,2},
  68.         {15,4},{17,4},{20,6},{15,2},{15,4},{13,4},{10,16},{0,8},
  69.         {0,8},{15,6},{10,2},{10,4},{17,4},{15,6},{13,2},{13,4},
  70.         {13,4},{8,16},{0,8},{0,8},{20,6},{15,2},{15,4},{17,4},
  71.         {20,6},{15,2},{15,4},{13,4},{10,16},{0,8},{0,8},{15,6},
  72.         {10,2},{10,4},{17,4},{15,6},{13,2},{13,4},{13,2},{15,2},
  73.         {15,16},{0,8},{0,8},{0,4},{13,2},{13,2},{13,4},{8,2},
  74.         {13,2},{13,4},{20,4},{18,4},{17,4},{15,6},{13,2},{13,16},
  75.         {0,2},{13,2},{17,2},{20,2},{22,4},{20,2},{23,2},{22,2},
  76.         {20,6},{22,4},{20,2},{17,2},{17,2},{15,4},{17,2},{17,16},
  77.         {0,8},{0,8},{0,4},{13,2},{13,2},{13,4},{8,2},{13,2},
  78.         {13,4},{20,4},{18,4},{17,4},{15,6},{13,2},{13,16},{0,2},
  79.         {13,2},{17,2},{20,2},{22,4},{20,2},{22,2},{22,2},{20,6},
  80.         {22,4},{20,4},{17,2},{20,6},{20,24},{0,4},{13,2},{13,2},
  81.         {13,4},{17,4},{15,4},{15,2},{15,2},{13,2},{13,4},{13,2},
  82.         {15,4},{15,4},{15,2},{13,4},{10,2},{10,16},        {0xFF,0xFF}
  83. };




  84. void delay(u8 p)
  85. {
  86.     u8 i,j;
  87.     for(;p>0;p--)
  88.     for(i=181;i>0;i--)
  89.     for(j=181;j>0;j--);
  90. }

  91. void pause()
  92. {
  93.     u8 i,j;
  94.     for(i=150;i>0;i--)
  95.     for(j=150;j>0;j--);
  96. }

  97. void T0_int() interrupt 1
  98. {
  99.         if((play_flag == 4)&&(num == 0))
  100.         {
  101.                 //消除杂音 - 静音
  102.         }else
  103.         {
  104.                 BEEP =! BEEP;
  105.         }
  106.        
  107.         if(play_flag != 4)
  108.         {
  109.                 TH0 = T[m][0];
  110.                 TL0 = T[m][1];       
  111.         }else
  112.         {
  113.                 switch(num)
  114.                 {
  115.                         case 1:m=13;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘1’
  116.                         case 2:m=15;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘2’
  117.                         case 3:m=17;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘3’
  118.                         case 4:m=18;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘4’
  119.                         case 5:m=20;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘5’
  120.                         case 6:m=22;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘6’
  121.                         case 7:m=24;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘7’
  122.                         case 8:m=25;   TH0=T[m][0];TL0=T[m][1];break;           //音调‘8’
  123.                         default:break;
  124.                 }               
  125.         }
  126. }



  127. void play_music(u8 _play_flag)
  128. {
  129.         if(_play_flag == 1)
  130.         {
  131.                 m = music_xyj[i][0];
  132.                 n = music_xyj[i][1];
  133.                 if(m == 0x00)
  134.                 {
  135.                         TR0=0;
  136.                         delay(n);
  137.                         i++;
  138.                 }else if(m == 0xFF)
  139.                 {
  140.                         TR0=0;
  141.                         delay(30);
  142.                         i=0;
  143.                 }else if(m == music_xyj[i+1][0])
  144.                 {
  145.                         TR0=1;
  146.                         delay(n);
  147.                         TR0=0;
  148.                         pause();
  149.                         i++;
  150.                 }else
  151.                 {
  152.                         TR0=1;
  153.                         delay(n);
  154.                         i++;
  155.                 }                       
  156.         }else if(_play_flag == 2)
  157.         {
  158.                 m = music_htys[i][0];
  159.                 n = music_htys[i][1];
  160.                 if(m == 0x00)
  161.                 {
  162.                         TR0=0;
  163.                         delay(n);
  164.                         i++;
  165.                 }else if(m == 0xFF)
  166.                 {
  167.                         TR0=0;
  168.                         delay(30);
  169.                         i=0;
  170.                 }else if(m == music_htys[i+1][0])
  171.                 {
  172.                         TR0=1;
  173.                         delay(n);
  174.                         TR0=0;
  175.                         pause();
  176.                         i++;
  177.                 }else
  178.                 {
  179.                         TR0=1;
  180.                         delay(n);
  181.                         i++;
  182.                 }                       
  183.         }else if(_play_flag == 3)
  184.         {
  185.                 m = music_cq[i][0];
  186.                 n = music_cq[i][1];
  187.                 if(m == 0x00)
  188.                 {
  189.                         TR0=0;
  190.                         delay(n);
  191.                         i++;
  192.                 }else if(m == 0xFF)
  193.                 {
  194.                         TR0=0;
  195.                         delay(30);
  196.                         i=0;
  197.                 }else if(m == music_cq[i+1][0])
  198.                 {
  199.                         TR0=1;
  200.                         delay(n);
  201.                         TR0=0;
  202.                         pause();
  203.                         i++;
  204.                 }else
  205.                 {
  206.                         TR0=1;
  207.                         delay(n);
  208.                         i++;
  209.                 }                       
  210.         }else
  211.         {
  212. //                TR0=0;
  213.         }

  214. }


  215. void Timer0Init()
  216. {
  217.         TMOD &= 0xF0;
  218.         TMOD |= 0x01;  
  219.         EA = 1;
  220.         ET0 = 1;
  221. }

  222. void IntInit()
  223. {
  224.         IT0 = 1;
  225.         EX0 = 1;
  226.         IT1 = 1;
  227.         EX1 = 1;       
  228.         EA = 1;//打开总中断       
  229. }



  230. sbit K_1 = P3^2;
  231. sbit K_2 = P3^3;
  232. bit updata_flag = 1;
  233. void main(void)
  234. {
  235.         Timer0Init();
  236.         IntInit();
  237.         LcdInit();
  238.        
  239.         LcdWriteCom(0x80);
  240.         LcdWriteData('M');
  241.         LcdWriteData('u');
  242.         LcdWriteData('s');
  243.         LcdWriteData('i');
  244.         LcdWriteData('c');
  245.         LcdWriteData(':');
  246.        
  247.         while(1)
  248.         {
  249.                 play_music(play_flag);
  250.                
  251.                 if(updata_flag == 1)
  252.                 {
  253.                         updata_flag = 0;
  254.                        
  255.                         switch(play_flag)
  256.                         {
  257.                                 case 1:
  258.                                         LcdWriteCom(0x80+6);
  259.                                         LcdWriteData('x');
  260.                                         LcdWriteData('y');
  261.                                         LcdWriteData('j');
  262.                                         LcdWriteData(' ');
  263.                                         break;
  264.                                 case 2:
  265.                                         LcdWriteCom(0x80+6);
  266.                                         LcdWriteData('h');
  267.                                         LcdWriteData('t');
  268.                                         LcdWriteData('y');
  269.                                         LcdWriteData('s');
  270.                                         break;
  271.                                 case 3:
  272.                                         LcdWriteCom(0x80+6);
  273.                                         LcdWriteData('c');
  274.                                         LcdWriteData('q');
  275.                                         LcdWriteData(' ');
  276.                                         LcdWriteData(' ');
  277.                                         break;
  278.                                 case 4:
  279.                                         LcdWriteCom(0x80+6);
  280.                                         LcdWriteData('n');
  281.                                         LcdWriteData('u');
  282.                                         LcdWriteData('l');
  283.                                         LcdWriteData('l');
  284.                                         break;
  285.                         }
  286. ……………………

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



所有资料51hei提供下载:
14基于C51单片机电子琴设计.zip (9.55 MB, 下载次数: 45)


评分

参与人数 2黑币 +55 收起 理由
阿斯顿噶事 + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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