本设计采用STC89C51/52(与AT89C51/52、AT89S51/52通用,指定单片机请留言)单片机做为主控制器
矩阵键盘输入,16个弹奏按键,另有两个按键切换弹奏模式还是播放模式,播放模式时,按下数字键可以播放内置音乐
数码管显示当前弹奏的音符
本设计采用STC89C51/52(与AT89C51/52、AT89S51/52通用,指定单片机请留言)单片机做为主控制器
矩阵键盘输入,16个弹奏按键,另有两个按键切换弹奏模式还是播放模式,播放模式时,按下数字键可以播放内置音乐
数码管显示当前弹奏的音符
2.1系统设计要求
本系统分为两个部分,音乐播放和音乐的弹奏。
- 要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。
- 用键盘作出电子琴的按键,每个键代表一个音符。
- 各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。
- 固定音乐播放有按键控制:“播放”、“弹奏/停止”。
- 弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。
2.2系统框图
单片机因体积小、功能强、价格低而得到诪泛应用。本系统只要以51单片机为主控核心,扩展一组矩阵键盘、扬声器、LED显示管模块和一组发光二极管来指示电子琴的工作状态一起组合而成。
void main(void) //Ö÷º¯Êý
{
SPK=0;
LED1=1;
LED2=0; //¿ª»úĬÈϵ¯×àģʽ
P0=0xc0; //ÊýÂë¹ÜÏÔʾ0
IE=0x87; //¶¨ÒåÍⲿÖжϿØÖÆÆ÷
TMOD=0x01; //¶¨Ò嶨ʱÆ÷0µÄ¹¤×÷·½Ê½
IT0=1; //ÍⲿÖжÏ0ΪϽµÑØ´¥·¢
IT1=1; //ÍⲿÖжÏ1ΪϽµÑØ´¥·¢
while(1) //½øÈëËÀÑ»·
{
P1=0xf0; //P1¿Ú¸³Öµ
if((P1&0xf0)!=0xf0) //ÅжÏP0¿ÚÊÇ·ñÓб仯
{
anjian(); //¶ÁÈ¡¼üÖµ
P0=DSY_CODE[k]; //ÏÔʾ¼üÖµ£¬Ò²¾ÍÊÇÏÔʾÒô·û
if(FY==0) //Èç¹ûÊǵ¯×àģʽ
{
STH0 = tab[k]/256;
STL0 = tab[k]%256; //¸ù¾ÝkµÄÖµ¸³³õÖµ¸øT0
TR0 = 1; //´ò¿ª¶¨Ê±Æ÷ÓÃÓÚ¶¨Ê±²úÉúƵÂÊ·¢Éú
while ((P1&0xf0)!=0xf0); //°´¼ü²»ËÉ¿ªµÄ»°£¬T0¾ÍÒ»Ö±²úÉúƵÂÊ
TR0=0; //°´¼üËÉ¿ªºó¹Ø±ÕT0¼Æʱ£¬ÆµÂÊÍ£Ö¹
}
else //Èç¹ûÊDz¥·Åģʽ£¨ÉÏÃæµÄifÓï¾ä²»³ÉÁ¢¾ÍÖ´ÐÐelse£©
{
while (FY==1) //½øÈë²¥·Åģʽ
{
if(Song[k][Tone_Index]==-1) //Ò»Êײ¥·ÅÍêÍ˳ö
{
Tone_Index=0;
SPK=0;
break;
}
STH0=(tab[Song[k][Tone_Index]])/256;
STL0=(tab[Song[k][Tone_Index]])%256; //½«ÄÚÖÃÒôÀÖÊý×éµÄÊý¾Ý¸³¸ø¶¨Ê±Æ÷×öΪ³õÖµ¼Æʱ
// P0=DSY_CODE[Song[k][Tone_Index]]; //ÏÔʾ²¥·ÅµÄÒô·û
TR0 = 1; //´ò¿ª¶¨Ê±Æ÷¶¨Ê±¿ª¹Ø
delay1(300*Len[k][Tone_Index]); //½ÚÅÄÊý×éÑÓʱ
Tone_Index++; //±äÁ¿¼Ó×¼±¸²¥·ÅÏÂÒ»¸öÒô·û
TR0=0; //Í£Ö¹¶¨Ê±Æ÷
anjian(); //ɨÃè°´¼ü
P0=DSY_CODE[k]; //ÏÔʾÒôÀÖÐòºÅ
while((P1&0xf0)!=0xf0);
}
}
}
}
}