求 可以播放音乐的4*4单片机电子琴的程序 ,最好是C语言的,用P37接喇叭,p1口和44矩阵键盘连接, 20

邮箱619594898@qq.com... 邮箱 619594898@qq.com 展开
 我来答
天池卧龙
2011-05-30 · TA获得超过952个赞
知道小有建树答主
回答量:184
采纳率:100%
帮助的人:72.6万
展开全部
#include <AT89X51.H> //电子琴的程序
#define keyport P1 //矩阵键盘接口
#define speaker P3_7//蜂鸣器
#define segdisplay P0 //数码管显示
unsigned char code table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,
0x10 ,0x08 ,0x03,0x46,0x21,0x06 ,0x0e //共阳极数码管0到9编码带小数点
};
sbit seg=P1^0; //数码管显示开关,注意下载程序时候不要连接P1口
unsigned char temp;
unsigned char key; //按键的键值0到15
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178
};

void delay()
{ unsigned char i,j;
for(i=50;i>0;i--)
for(j=200;j>0;j--);

}
void main(void)
{
TMOD=0x01;
ET0=1;
EA=1;
seg=0;

while(1)
{
keyport=0xff;
keyport=0xef; //P2.4给低电平
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
delay();
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=0;
break;
case 0x0d:
key=1;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=3;
break;
}
temp=keyport;
speaker=~speaker;
segdisplay =table[key];

STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
}
TR0=0;
}
}

keyport=0xff;
keyport=0xdf; //P2.5低电平
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
delay();
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=4;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=7;
break;
}
temp=keyport;
speaker=~speaker;
segdisplay =table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
}
TR0=0;
}
}

keyport=0xff;
keyport=0xbf; //P2.6给低电平
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
delay();
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=8;
break;
case 0x0d:
key=9;
break;
case 0x0b:
key=10;
break;
case 0x07:
key=11;
break;
}
temp=keyport;
speaker=~speaker;
segdisplay =table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
}
TR0=0;
}
}

keyport=0xff;
keyport=0x7f; //P2.7给低电平
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
delay();
temp=keyport;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=12;
break;
case 0x0d:
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
temp=keyport;
speaker=~speaker;
segdisplay =table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=keyport;
temp=temp & 0x0f;
}
TR0=0;
}
}
}
}
void t0(void) interrupt 1 using 0
{
TH0=STH0;
TL0=STL0;
speaker=~speaker;
}
这个是程序我已经测试成功的 希望对你有帮助 我是接了个数码管显示了一下 其实你也可以不接
坏坏丶王朝
2011-05-31
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
这个有点难》》》
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式