简易电子琴八个摁键
还可以存入歌曲
电路原理图如下:
单片机源程序如下:
- #include"reg51.h"
- void t0init(void);
- void delay_ms(unsigned int );
- sbit P27=P2^7;
- sbit P26=P2^6;
- sbit P25=P2^5;
- //挥着翅膀的女孩
- unsigned char code Music_hzcb[]={
- 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,
- 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,
- 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,
- 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,
- 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,
- 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,
- 0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,
- 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,
- 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,
- 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,
- 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
- 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
- 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
- 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,
- 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,
- 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
- 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
- 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
- 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
- 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,
- 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,
- 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,
- 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,
- 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,
- 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,
- 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,
- 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,
- 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
- 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,
- 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
- 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,
- 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,
- 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
- 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,
- 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,
- 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0xff,0xff};
- //同一首歌
- unsigned char code Music_tyshg[]={
- 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,
- 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,
- 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,
- 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,
- 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,
- 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,
- 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,
- 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,
- 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,
- 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,
- 0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,
- 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,
- 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,
- 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,
- 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,
- 0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,
- 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,
- 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,
- 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,
- 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,
- 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,
- 0xff,0xff };
- //两只蝴蝶
- unsigned char code Music_lzhhd[] ={
- 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,
- 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,
- 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,
- 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03,
- 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,
- 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,
- 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,
- 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,
- 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,
- 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,
- 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,
- 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,
- 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,
- 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,
- 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,
- 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,
- 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,
- 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03,
- 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,
- 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,
- 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,
- 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,
- 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,
- 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,
- 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,
- 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,
- 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,
- 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,
- 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,
- 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,
- 0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,
- 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,
- 0x10,0x03, 0x15,0x00, 0xff,0xff };
-
- unsigned char code Music_Code[]={
- 0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x66,
- 0xfb,0x03,0xfb,0x8f,0xfc,0x0b,0xfd,0xee};
- unsigned char const yinfu1[3][14]={
- 0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x66,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,
- 0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,
- 0xfb,0x21,0xfe,0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc0,0xfe,0xe3,0xff,0x02};
- unsigned char const length[]={1,2,4,8,16,32,64};
- unsigned char sth,stl;
- void main(void)
- {
- unsigned char j;
- unsigned int i;
- t0init();
- while(1)
- {
- switch (P1)
- {
- case 0xfe: delay_ms(10);
- if (P1==0xfe)
- {
- i=0;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xfe) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while (P1==0xfe);
- delay_ms(10);
- if(P1==0xfe) continue;
- else break;
- }
- TR0=0;
- }
- break;
- case 0xfd: delay_ms(10);
- if (P1==0xfd)
- {
- i=1;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xfd) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xfd);
- delay_ms(10);
- if(P1==0xfd) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0xfb: delay_ms(10);
- if (P1==0xfb)
- {
- i=2;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xfb) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xfb);
- delay_ms(10);
- if(P1==0xfb) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0xf7: delay_ms(10);
- if (P1==0xf7)
- {
- i=3;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xf7) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xf7);
- delay_ms(10);
- if(P1==0xf7) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0xef: delay_ms(10);
- if (P1==0xef)
- {
- i=4;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xef) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xef);
- delay_ms(10);
- if(P1==0xef) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0xdf: delay_ms(10);
- if (P1==0xdf)
- {
- i=5;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xdf) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xdf);
- delay_ms(10);
- if(P1==0xdf) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0xbf: delay_ms(10);
- if (P1==0xbf)
- {
- i=6;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0xbf) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0xbf);
- delay_ms(10);
- if(P1==0xbf) continue;
- else break;
- }
- }
- TR0=0;
- break;
- case 0x7f: delay_ms(10);
- if (P1==0x7f)
- {
- i=7;
- TR0=0;
- sth=Music_Code[2*i];
- stl=Music_Code[2*i+1];
- TR0=1;
- for(j=0;j<=100;j++)
- {
- delay_ms(10);
- if(P1==0x7f) continue;
- else break;
- }
- TR0=0;
- for (;;)
- {
- while(P1==0x7f);
- delay_ms(10);
- if(P1==0x7f) continue;
- else break;
- }
- }
- TR0=0;
- break;
- default: break;
- }
- switch (P3){
- case 0xfe: delay_ms(10);
- if (P3==0xfe)
- {
- for (i=0;Music_hzcb[i]!=0xff;i++)
- {
- sth=yinfu1[(Music_hzcb[i]%100)/10-1][((Music_hzcb[i]%10)-1)*2];
- stl=yinfu1[(Music_hzcb[i]%100)/10-1][((Music_hzcb[i]%10)-1)*2+1];
- i++;
- TR0=1;
- delay_ms(4*500/length[Music_hzcb[i]%10]);
- TR0=0;
- }
- for (;;)
- {
- while(P3==0xfe);
- delay_ms(10);
- if(P3==0xfe) continue;
- else break;
- }
- }
- break;
- case 0xfd: delay_ms(10);
- if (P3==0xfd)
- {
- for (i=0;Music_tyshg[i]!=0xff;i++)
- {
- sth=yinfu1[(Music_tyshg[i]%100)/10-1][((Music_tyshg[i]%10)-1)*2];
- stl=yinfu1[(Music_tyshg[i]%100)/10-1][((Music_tyshg[i]%10)-1)*2+1];
- i++;
- TR0=1;
- delay_ms(4*500/length[Music_tyshg[i]%10]);
- TR0=0;
- }
- for (;;)
- {
- while(P3==0xfd);
- delay_ms(10);
- if(P3==0xfd) continue;
- else break;
- }
- }
- break;
- case 0xfb: delay_ms(10);
- if (P3==0xfb)
- {
- for (i=0;Music_Code[i]!=0xff;i++)
- {
- sth=yinfu1[(Music_lzhhd[i]%100)/10-1][((Music_lzhhd[i]%10)-1)*2];
- stl=yinfu1[(Music_lzhhd[i]%100)/10-1][((Music_lzhhd[i]%10)-1)*2+1];
- i++;
- TR0=1;
- delay_ms(4*500/length[Music_lzhhd[i]%10]);
- TR0=0;
- }
- for (;;)
- {
- while(P3==0xfb);
- delay_ms(10);
- if(P3==0xfb) continue;
- else break;
- }
- }
- break;
- default: break;
- }
- }
- }
- void delay_ms(unsigned int k)
- { // 12M
- unsigned int i0;
- unsigned char i,j;
- for(i0=0;i0<k;i0++)
- for(i=5;i>0;i--)
- for(j=97;j>0;j--);
- }
- void t0init(void)
- { // 定时1 定时0
- TMOD=0x01; //选择方式 gate c/t M1 M0 gate c/t M1 M0
- TH0=sth; // 赋初值
- TL0=stl;
- ET0=1;
- EA=1;
- TR0=0;
- }
- void t0(void) interrupt 1 using 0
- {
- TR0=0;
- TH0= sth;
- TL0= stl;
- P27=!P27;
- TR0=1;
- }
复制代码
所有资料51hei提供下载:
简易电子琴设计.rar
(453.6 KB, 下载次数: 19)
|