204 基于51单片机LM386功放电子琴设计

本设计是《基于51单片机的电子琴设计》,该设计采用AT89S52作为主控芯片,可是现电子琴模式和音乐模式自由切换,通过LM386功放电路将声音信号放大,输出的扬声器中。

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

https://pan.baidu.com/s/1Rn7sK_RxBOP6VxYDo9kAmQ?pwd=8888

部分代码展示

/**************************************************************
程序名称:8键琴
**************************************************************/ 
#include<reg51.h>	    //定义头文件

#include"dian_zi_qin.h"	   

#define key P2				//琴按键

sbit buzzer=P3^4;			//扬声器管脚

sbit LED1=P1^0;				//琴指示灯
sbit LED2=P1^1;			    //音乐播放指示灯
	
sbit qiehuan=P0^2;		    //功能切换
sbit shanyiqu=P0^1;			//播放上一曲歌曲
sbit xiayiqu=P0^0;			//播放下一曲歌曲

unsigned char m,n; 

unsigned char keys,mode=0,mode1=0;			  	//定义变量
unsigned char tone_H;				//定义变量
unsigned char tone_L;				//定义变量
unsigned char code tone[]={115,102,91,86,77,68,61,57};		//歌曲音调  

void delay8um(unsigned char);				
void sound(unsigned char);				
void delay(unsigned char p);
void pause();
void keycan();
void delays(unsigned char x);

/**************************************************************
函数功能:主函数。。。。。。。。。。。。
**************************************************************/  
void main()						//主函数
{	
	unsigned char i=0,i2=0,i3=0,i4=0,i5=0;
	
	buzzer=1; 					//初始化蜂鸣器
	TMOD=0x01;					//设置定时器模式  定时器0工作在方式1	
	EA=1;						    //打开定时总中断
	ET0=1;						//打开定时器0中断
	while(1)					//主循环
	{ 
		
			keycan();
			if(mode1==0)
			{
				  LED1=0;
			    LED2=1;
					key=0xff;
					keys=~key;
					switch(keys)				//进入键盘选择
					{
						
							 case 0x01:sound(0);break;	 //如果键盘1被按下发音do,
							 case 0x02:sound(1);break;	 //如果键盘2被按下发音ruai,
							 case 0x04:sound(2);break;	 //如果键盘3被按下发音mi,
							 case 0x08:sound(3);break;	 //如果键盘4被按下发音fa,
							 case 0x10:sound(4);break;	 //如果键盘1被按下发音,
							 case 0x20:sound(5);break;	 //如果键盘2被按下发音,
							 case 0x40:sound(6);break;	 //如果键盘3被按下发音,
							 case 0x80:sound(7);break;	 //如果键盘4被按下发音,
					}
					keycan();
		 }
		else
		{
			  LED1=1;
			  LED2=0;
				if(mode==1)    //播放 青花瓷
				{
							m=music[i][0];
							n=music[i][1]; 
							if(m==0x00)
							{
									 TR0=0;
									 delay(n);
									 i++;
							} 
							else if(m==0xFF)
							{
									 TR0=0;
									 delay(30);
									 i=0;
							} 
							else if(m==music[i+1][0]) 
							{
									 TR0=1;
									 delay(n);
									 TR0=0;
									 pause();
									 i++;
							}
							else
							{
									 TR0=1;
									 delay(n);
									 i++;
							}
								keycan();
				 }
				if(mode==2)  //播放 两只蝴蝶
				{
					 
							m=music2[i2][0];
							n=music2[i2][1]; 
							if(m==0x00)
							 {
									 TR0=0;
									 delay(n);
									 i2++;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值