0013基于单片机电子琴控制系统设计

文件下载地址!!!!!!!!!!!!!!!!!!!!!!

单片机原理教程--初级(视频,源仿真源代码)

本设计采用STC89C51/52(与AT89C51/52AT89S51/52通用,指定单片机请留言)单片机做为主控制器

矩阵键盘输入,16个弹奏按键,另有两个按键切换弹奏模式还是播放模式,播放模式时,按下数字键可以播放内置音乐

数码管显示当前弹奏的音符

本设计采用STC89C51/52(与AT89C51/52AT89S51/52通用,指定单片机请留言)单片机做为主控制器

矩阵键盘输入,16个弹奏按键,另有两个按键切换弹奏模式还是播放模式,播放模式时,按下数字键可以播放内置音乐

数码管显示当前弹奏的音符

 2.1系统设计要求

本系统分为两个部分,音乐播放和音乐的弹奏。

  1. 要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。
  2. 用键盘作出电子琴的按键,每个键代表一个音符。
  3. 各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。
  4. 固定音乐播放有按键控制:“播放”、“弹奏/停止”。
  5. 弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。

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);
				}
			}
		}
	}
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈晨电子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值