第1章 绪论(电子琴概述及技术状况,本设计要求)
第2章 总体方案与特征(电子琴系统组成,各部分模块,系统总体组成框图)
第3章 硬件设计(单片机AT89C51,矩阵式键盘显示及识别,LED数码管,硬件设计)
第4章 软件设计(使用的仪器仪表,整体程序流程图,I/O并行口驱动LED显示,音乐播放设计,放歌子程序流程图)
第5章 系统的调试与测试结果分析(Proteus,Keil,进行的调试)
总结
参考文献
附录1:完整源程序
附录2:电子琴仿真图
你首先要保证你的单片机外围电路要正常,他们是单片机工作的前提,我给你提点你查查,看看复位电路是否接好,最好用上电复位电路,再观察你的晶振电路是否正常,最好用示波器观察。不知道你用的是哪个型号的单片机,如果是40管脚的51系列,那你就再看看31管脚是否接的是高电平!就那个VPP,这个很多人就忽视了。检查完以后如果一切都正常,那要用软件测试的办法了,你写一个小程序,烧写进去,看看是否运行,如果可以的话,那就不是硬件的问题了,而是你的软件问题了,行了就说这么多了,如果 还有问题可以交流!祝你成功!!
#include <AT89X51H> //电子琴的程序
#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; //P24给低电平
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; //P25低电平
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; //P26给低电平
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; //P27给低电平
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;
}
这个是程序我已经测试成功的 希望对你有帮助 我是接了个数码管显示了一下 其实你也可以不接
以上就是关于用单片机做一个简易电子琴 应该按照什么样的步骤啊 首先应该做什么啊 我一团糟 球高手全部的内容,包括:用单片机做一个简易电子琴 应该按照什么样的步骤啊 首先应该做什么啊 我一团糟 球高手、用单片机做电子琴的问题、求 可以播放音乐的4*4单片机电子琴的程序 ,最好是C语言的,用P37接喇叭,p1口和44矩阵键盘连接,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)