标题:
自己在51单片机开发板上弄得七音电子琴程序
[打印本页]
作者:
934253430
时间:
2019-6-6 16:49
标题:
自己在51单片机开发板上弄得七音电子琴程序
大致功能为在一定的按键时间内记一次数,并且会发出音符。记录20个播放该段音乐。
单片机源程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
uint a,b;
uchar key,shu[20];
int i=-1;
uint code Freqtab[] = {
64580,64684,64777,
64820,64898,64968,65030};
uchar code table[]={
0x00,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void send(uchar x)
{
SBUF=x;
while(!TI);
;
TI=0;
}
void display(uchar num)
{
dula=1;
P0=table[num];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
}
uchar matrixkeyscan()
{
uchar temp;
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=1;
// beep=1;
a=Freqtab[0]/256;
b=Freqtab[0]%256;
TR0=1; i++;
shu[i]=1;
delay(150);
send(key);
break;
case 0xdb:
key=2;
// beep=1;
a=Freqtab[1]/256;
b=Freqtab[1]%256;
TR0=1; i++;
shu[i]=2;
delay(150);
send(key);
break;
case 0xbb:
key=3;
TR0=1;
// beep=1;
a=Freqtab[2]/256;
b=Freqtab[2]%256; i++;
shu[i]=3;
delay(150);
send(key);
break;
case 0x7b:
key=4;
// beep=1;
a=Freqtab[3]/256;
b=Freqtab[3]%256;
TR0=1; i++;
shu[i]=4;
delay(150);
send(key);
break;
}
display(key);
}
}
/* switch(i)
{
case 0:shu[i]=0;break;
case 1:shu[i]=1;break;
case 2:shu[i]=2;break;
case 3:shu[i]=3;break;
case 4:shu[i]=4;break;
case 5:shu[i]=5;break;
case 6:shu[i]=6;break;
}
*/
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=5;
// beep=1;
a=Freqtab[4]/256;
b=Freqtab[4]%256;
TR0=1;
shu[i]=5;
delay(150);
i++;
send(key);
break;
case 0xd7:
key=6;
// beep=1;
a=Freqtab[5]/256;
b=Freqtab[5]%256;
TR0=1; i++;
shu[i]=6;
delay(150);
send(key);
break;
case 0xb7:
key=7;
// beep=1;
a=Freqtab[6]/256;
b=Freqtab[6]%256;
TR0=1; i++;
shu[i]=7;
delay(150);
send(key);
break;
/* case 0x77:
wela=1;
P0=0x00;
wela=0;
break;*/
}
display(key);
}
}
/* switch(i)
{
case 0:shu[i]=0;break;
case 1:shu[i]=1;break;
case 2:shu[i]=2;break;
case 3:shu[i]=3;break;
case 4:shu[i]=4;break;
case 5:shu[i]=5;break;
case 6:shu[i]=6;break;
}
*/
P3=0x0f;
temp=P3;
temp=temp&0xf0;
switch(temp)
{
case 0x00:
beep=1;
TR0=0;
break;
}
return key;
}
/*
uchar keyscan()
{
uchar temp;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=1;
break;
case 0xde:
key=2;
break;
case 0xbe:
key=3;
break;
case 0x7e:
key=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=5;
break;
case 0xdd:
key=6;
break;
case 0xbd:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return key;
}
*/
void main()
{
uint j;
TMOD |= 0x01;
EA=1;
ET0=1;
TMOD |= 0x20;
SCON=0x40;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
// k=matrixkeyscan();
while(1)
{
matrixkeyscan();
if(i==19)
break;
}
for(i=0;i<20;i++)
{
j=shu[i];
switch(j)
{
case 0:
a=Freqtab[0]/256;
b=Freqtab[0]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 1:
a=Freqtab[1]/256;
b=Freqtab[1]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 2:
a=Freqtab[2]/256;
b=Freqtab[2]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 3:
a=Freqtab[3]/256;
b=Freqtab[3]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 4:
a=Freqtab[4]/256;
b=Freqtab[4]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 5:
a=Freqtab[5]/256;
b=Freqtab[5]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
case 6:
a=Freqtab[6]/256;
b=Freqtab[6]%256;
TR0=1;
delay(350);
display(j);
TR0=0;
delay(30);
beep=1;
break;
}
}
}
void T0_time() interrupt 1
{
TH0=a;
TL0=b;
beep=~beep;
}
复制代码
所有程序51hei提供下载:
程序.docx
(17.07 KB, 下载次数: 7)
2019-6-6 16:48 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-6-7 01:46
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1