标题:
基于单片机的简易电子琴设计
[打印本页]
作者:
wangzikai
时间:
2019-5-20 21:51
标题:
基于单片机的简易电子琴设计
简易电子琴八个摁键
还可以存入歌曲
电路原理图如下:
0.png
(24.74 KB, 下载次数: 15)
下载附件
2019-5-21 00:50 上传
单片机源程序如下:
#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)
2019-5-20 21:51 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1