用单片机做一个简易电子琴 应该按照什么样的步骤啊 首先应该做什么啊 我一团糟 球高手

用单片机做一个简易电子琴 应该按照什么样的步骤啊 首先应该做什么啊 我一团糟 球高手,第1张

第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矩阵键盘连接,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9284591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存