207 基于51单片机八音盒电子琴音乐播放器设计

八音盒DIY制作具体功能:

  • 功能1.八个按键对应“都瑞咪发嗖拉稀逗”,同时数码管可以显示对应音阶
  • 功能2.可以实现音乐播放“荷塘月色”、“挥着翅膀的女孩”、“国际歌”,可以切歌,也可以自行在代码中加入喜欢的歌曲
  • 功能3.功能1和功能2之间可以切换

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/15RJTtNqdy5jamMXvNQa1VQ?pwd=8888

部分代码展示

设计(论文)题目	51单片机的琴  八音盒音乐盒设计

注:STC89C52RC 使用11.0592M晶振
=============================================================*/
#include <STC89.H>
#include"stdio.H"
#include"intrins.H"


typedef	unsigned char uchar;                                                            /* 类型定义 */
typedef unsigned int  uint; 

sbit    BeepIO = P3^4;                                                                  /* 定义喇叭输出管脚 */
sbit    Mode   = P3^3;                                                                  /* 定义模式选择管脚 */

uchar 	Sound_Temp_TH0,Sound_Temp_TL0;													/* 定时器初值 */
uchar   SpeedTime;																		          /* 一拍时间 */	
uchar   Music_num = 0;

uchar code table[10]={0xe7,0x21,0xcb,0x6b,0x2d,0x6e,0xee,0x23,0xef,0x6f,};              //数码管编码

/******************************** 音阶频率表 ************************************/
/* 四个八度的28个频率数据 */

uchar code FREQH[ ] = {                                                                 /* 音阶频率表 高八位 */
						            0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,                        		  /* 低音 1,2,3,4,5,6,7 */
                        0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,                             /* 中音 1,2,3,4,5,6,7 */
                        0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF                              /* 高音 1,2,3,4,5,6,7 */
                      } ;
                         
uchar code FREQL[ ] = {                                                                 /* 音阶频率表 低八位 */
						            0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,                        		  /* 低音 1,2,3,4,5,6,7 */
                        0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,                             /* 中音 1,2,3,4,5,6,7 */
                        0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16                              /* 高音 1,2,3,4,5,6,7 */
                      };

/********************************** 歌曲表1 *************************************/

/* “送别”数据表 */
uchar code MUSIC1[ ] = {	5,2,2,  3,2,1,  5,2,1,  1,3,4,  6,2,2,  1,3,2,  5,2,4,
													5,2,2,  1,2,1,  2,2,1,  3,2,2,  2,2,1,  1,2,1,  2,2,4,
													5,2,2,  3,2,1,  5,2,1,  1,3,3,  7,2,1,  6,2,2,  1,3,2,
													5,2,4,  5,2,2,  2,2,1,  3,2,1,  4,2,3,  7,1,1,  1,2,4,
													6,2,2,  1,3,2,  1,3,4,  7,2,2,  6,2,1,  7,2,1,  1,3,4,
													6,2,1,  7,2,1,  1,3,1,  6,2,1,  6,2,1,  5,2,1,  3,2,1,
													1,2,1,  2,2,4,  5,2,2,  3,2,1,  5,2,1,  1,3,3,  7,2,1,
													6,2,2,  1,3,2,  5,2,4,  5,2,2,  2,2,1,  3,2,1,  4,2,3,
													7,1,1,  1,2,4,  5,2,2,  3,2,1,  5,2,1,  1,3,4,  6,2,2,
													1,3,2,  5,2,4,  5,2,2,  1,2,1,  2,2,1,  3,2,2,  2,2,1,
													1,2,1,  2,2,4,  5,2,2,  3,2,1,  5,2,1,  1,3,3,  7,2,1, 
													6,2,2,  1,3,2,  5,2,4,  5,2,2,  2,2,1,  3,2,1,  4,2,3, 
													7,1,1,  1,2,4,  0,0,0 };
/* 荷塘月色数据表 */
uchar code MUSIC2[ ] = {	1,2,3,  5,2,1,  1,2,1,  5,2,1,  1,2,1,  2,2,1,  
													3,2,8,  1,2,3,  5,2,1,  1,2,1,  5,2,1,  1,2,1,  
													2,2,1,  2,2,8,  1,2,3,  5,2,1,  1,2,1,  5,2,1,  
													2,2,1,  1,2,1,  6,1,4,  6,1,1,  5,1,1,  1,2,1,  
													2,2,1,  1,2,3,  5,2,1,  1,2,1,  5,2,1,  1,2,1,  
													6,1,1,  1,2,8,  1,2,1,  1,2,2,  6,1,1,  5,1,2,  
													6,1,2,  1,2,2,  1,2,1,  2,2,1,  3,2,4,  2,2,1,  
													2,2,2,  1,2,1,  2,2,2,  2,2,1,  5,2,1,  5,2,1,  
													3,2,1,  3,2,1,  2,2,1,  3,2,4,  1,2,1,  1,2,2,  
													6,1,1,  5,1,2,  5,2,2,  3,2,1,  2,2,1,  3,2,1,  
													2,2,1,  1,2,4,  2,2,1,  2,2,2,  1,2,1,  2,2,1,  
													2,2,2,  3,2,1,  2,2,1,  1,2,1,  6,1,1,  2,2,1,  
													1,2,4,  1,2,1,  1,2,2,  6,1,1,  5,1,2,  6,1,2,  
													1,2,1,  1,2,2,  2,2,1,  3,2,4,  2,2,1,  2,2,2,  
													1,2,1,  2,2,2,  2,2,1,  5,2,1,  5,2,1,  3,2,1,  
													3,2,1,  2,2,1,  3,2,4,  1,2,1,  1,2,1,  1,2,1,  
													6,1,1,  5,1,2,  5,2,2,  3,2,1,  2,2,1,  3,2,1,  
													2,2,1,  1,2,4,  2,2,1,  2,2,2,  1,2,1,  2,2,1,  
													2,2,2,  3,2,1,  2,2,1,  1,2,1,  6,1,1,  2,2,1,  
													1,2,4,  3,2,1,  5,2,2,  5,2,1,  5,2,2,  5,2,2,
													6,2,1,  5,2,1,  3,2,1,  2,2,1,  1,2,4,  6,2,1,  
													1,3,1,  6,2,1,  5,2,1,  3,2,1,  2,2,1,  1,2,1,  
													6,1,1,  2,2,2,  2,2,1,  3,2,1,  3,2,1,  2,2,3,  
													3,2,1,  5,2,2,  5,2,1,  5,2,2,  5,2,2,  6,2,1,  
													5,2,1,  3,2,1,  2,2,1,  1,2,4,  6,1,1,  1,2,1,  
													6,1,1,  5,1,1,  2,2,2,  3,2,2,  1,2,4,  6,1,1,  
													1,2,1,  6,1,1,  5,1,1,  2,2,2,  3,2,2,  1,2,4,  
													0,0,0	};

/* 挥着翅膀的女孩数据表 */
uchar code MUSIC3[ ] = {	  3,2,2, 3,2,1, 4,2,1, 5,2,2, 1,2,1, 2,2,1, 3,2,1,
														3,2,1, 3,2,1, 4,2,1, 5,2,2, 2,2,1, 3,2,1, 4,2,2,
														4,2,1, 3,2,1, 1,2,2, 4,2,1, 3,2,1, 4,2,2, 6,1,1,
														1,2,1, 2,2,2, 1,2,1, 2,2,1, 3,2,2, 3,2,1, 4,2,1,
														5,2,2, 6,2,1, 7,2,1, 1,3,1, 1,3,1, 3,2,1, 4,2,1,
														5,2,2, 2,2,1, 3,2,1, 4,2,1, 3,2,1, 4,2,1, 1,3,1,
														1,3,1, 2,2,1, 3,2,1, 4,2,1, 3,2,1, 4,2,1, 2,3,1,
														2,3,2, 1,3,1, 7,2,1, 1,3,3, 2,3,1, 3,3,2, 2,3,1,
														1,3,1, 7,2,1, 1,3,3, 1,3,1, 7,2,1, 5,2,1, 5,2,1,
														1,2,1, 6,2,3, 6,2,1, 5,2,1, 1,2,1, 1,2,1, 3,2,1,
														2,2,3, 3,2,1, 4,2,1, 4,2,1, 5,2,1, 1,3,1, 7,2,1,
														1,3,3, 2,3,1, 3,3,1, 2,3,1, 1,3,1, 7,2,1, 1,3,3,
														1,3,1, 7,2,1, 5,2,1, 5,2,1, 1,2,1, 6,2,3, 6,2,1, 
														5,2,1, 5,2,1, 1,3,1, 7,2,1, 1,3,4, 6,2,1, 6,2,1,
														6,2,1, 7,2,1, 7,2,1, 6,2,1, 5,2,1, 5,2,1, 3,2,1,
														1,2,1, 2,2,1, 3,2,1, 4,2,1, 3,2,1, 4,2,1, 4,2,1, 
														3,2,1, 4,2,1, 4,2,3, 3,2,1, 4,2,1, 3,2,1, 4,2,1, 
														2,3,1, 2,3,1, 1,3,1, 7,2,1, 1,3,3, 2,3,1, 3,3,1, 
														2,3,1, 1,3,1, 7,2,1, 1,3,3, 1,3,1, 7,2,1, 7,2,1, 
														5,2,1, 5,2,1, 1,2,1, 6,2,3, 6,2,1, 5,2,1, 1,2,1, 
														1,2,1, 3,2,1, 2,2,3, 3,2,1, 4,2,1, 4,2,1, 5,2,1, 
														1,3,1, 7,2,1, 1,3,3, 2,3,1, 3,3,1, 2,3,1, 1,3,1, 
														7,3,1, 1,3,3, 1,3,1, 7,2,1, 5,2,1, 5,2,1, 1,2,1, 
														6,2,3, 6,2,1, 5,2,1, 5,2,1, 1,3,1, 7,2,1, 1,3,4, 
														4,2,2, 4,2,1, 6,2,1, 5,2,1, 1,2,1, 1,2,2, 4,2,3, 
														1,2,1, 2,2,3, 3,2,2, 1,2,4, 0,0,0};
/* 国际歌数据表 */
uchar code MUSIC4[ ] = { 5,2,2,  1,3,3,  7,2,1,  2,3,1,  1,3,1,  5,2,1,  3,2,1,
                         6,2,3,  6,2,1,  4,2,2,  6,2,1,  2,3,3,  1,3,1,  7,2,1,
												 6,2,1,  5,2,1,  4,2,1,  3,2,6,  5,2,2,  1,3,3,  7,2,1,
												 2,3,1,  1,3,1,  5,2,1,  3,2,1,  6,2,4,  4,2,1,  6,2,1,
												 2,3,1,  1,3,1,  7,2,2,  2,3,2,  4,3,2,  7,2,2,  1,3,4,
												 1,3,1,  3,3,1,  2,3,1,  7,2,4,  6,2,1,  7,2,1,  1,3,1,
												 6,2,1,  7,2,4,  5,2,1,  5,2,1,  4,2,1,  5,2,1,  6,2,3,
												 6,2,1,  2,3,3,  1,3,1,  7,2,4,  7,2,1,  2,3,2,  2,3,3,
												 7,2,1,  5,2,1,  5,2,1,  4,2,1,  5,2,1,  3,3,4,  1,3,1,
												 6,2,1,  7,2,1,  1,3,1,  7,2,2,  2,3,2,  1,3,2,  6,2,2,
												 5,2,4,  5,2,1,  3,3,1,  2,3,1,  1,3,4,  5,2,3,  3,2,1,
												 6,2,4,  4,2,1,  2,3,3,  1,3,1,  7,2,4,  6,2,2,  5,2,2,
												 5,2,4,  5,2,1,  5,2,2,  3,3,4,  2,3,2,  5,2,2,  1,3,4,
												 7,2,3,  7,2,1,  6,2,3,  5,2,1,  6,2,2,  2,3,2,  2,3,4,
												 2,3,1,  3,3,3,  2,3,1,  1,3,4,  5,2,3,  3,2,1,  6,2,4,
												 4,2,1,  2,3,3,  1,3,1,  7,2,4,  6,2,2,  5,2,2,  3,3,6,
												 3,3,2,  5,3,4,  4,3,2,  3,3,2,  2,3,3,  3,3,1,  4,3,2,
												 4,3,1,  3,3,3,  3,3,1,  2,3,3,  2,3,1,  1,3,6,  0,0,0};
	
/*******************************************************************************
* 函  数  名      : DelayMs
* 描      述      : 毫秒延时.
* 输      入      : UINT16 Us:
*                   要延时的Ms时间.
* 返      回      : 无.
*******************************************************************************/
void DelayMs( uint Ms )
{
	uint i;
  	
	while( Ms-- )
	{
		for ( i = 0; i < 114; i++ );													/* 延时1毫秒 */
	}
}
/**************************************************
                节拍延时函数
 各调1/4节拍时间:
 调4/4  125ms
 调2/4  250ms
 调3/4  187ms
**************************************************/
void Delay(uchar t)
{
    uchar i;
	for(i=0;i<t;i++)
	    DelayMs(250);
 }
/*******************************************************************************
* 函  数  名      : BeepTimer0
* 描      述      : 定时器T0,蜂鸣器中断.
* 输      入      : 无.
* 返      回      : 无.
*******************************************************************************/
void BeepTimer0() interrupt 1
{
 	BeepIO = !BeepIO;
 	TH0 = Sound_Temp_TH0;																/* 重新赋定时器初值 */
 	TL0 = Sound_Temp_TL0;
}

/*******************************************************************************
* 函  数  名      : PlayMusic
* 描      述      : 播放音乐.
* 输      入      : 无.
* 返      回      : 无.
*******************************************************************************/
void PlayMusic( uchar *Sound )
{
 	uint  i = 0,j;
	uint SoundLength;																	/* 歌曲长度 */

	SoundLength = 0;
	while( Sound[ SoundLength++ ] != 0x00 );                                            /* 计算歌曲长度 */	

	while( i < SoundLength )
	{
		j = Sound[ i ] +  7 * ( Sound[ i + 1 ] - 1 ) - 1;      		
		Sound_Temp_TH0 = FREQH[ j ];													/* 音符频率 */
	    Sound_Temp_TL0 = FREQL[ j ];
	    SpeedTime = Sound[ i + 2 ];														/* 该音符时常 */  
	
		TH0 = Sound_Temp_TH0;
		TL0 = Sound_Temp_TL0;
		TR0 = 1;
		i += 3;   	
        Delay(SpeedTime);
		TR0 = 0;
		BeepIO = 0;
		if( !Mode )                             //检测模式选择
			break;	
		if(!P32)                                //检测切换歌曲按键
		{
			DelayMs( 1 );
			if(!P32)
			{
				break;
			}
		}		
	}	
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值