⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main4.c

📁 基于at89c51单片机的mp3键盘中断实验代码
💻 C
字号:
#include "AT89C51SND1_REG.H"
#include "MCU_UART.H"

#define LED	     P3_5

#define EKB		0x10

#define SLESONG 1
#define VOLUME  2
#define TONE    3
unsigned char CurrentFun = SLESONG;
unsigned char NowPlaying = 1;
unsigned char RegVolume = 15;
unsigned char RegTone = 15;

unsigned char flag = 0;

void KeyBoardInit()
{
	P1 |= 0x0f;
	KBCON = 0x00;
	IEN1 |=EKB;	
}

void Next()
{
	switch (CurrentFun)
		{
		 case SLESONG: NowPlaying++;
		               if(NowPlaying>10)
					      NowPlaying=1;
					   flag=2;
					   break;
		 case VOLUME : RegVolume++;
		               if(RegVolume>31)
					      RegVolume=31;
					   flag=3;
					   break;
		 case TONE   : RegTone++;
					   if(RegTone>31)
					      RegTone=31;
					   flag=4;
					   break;
		}
}

void Prev()
{
	switch (CurrentFun)
		{
		 case SLESONG: NowPlaying--;
		               if(NowPlaying==0)
					      NowPlaying=10;
					   flag=2;
					   break;
		 case VOLUME : if(RegVolume!=0)
					      RegVolume--;
					   flag=3;
					   break;
		 case TONE   : if(RegTone!=0)
					      RegTone--;
					   flag=4;
					   break;
		}
}


void key_interrupt() interrupt 11
{
	unsigned char i,j,k;
	k = KBSTA&0x0f;
	for(i=0;i<50;i++)
	  for(j=0;j<200;j++);
	if(k==(~P1&0x0f))
		switch (k)
		  {		                                                     
			case 1 : CurrentFun++;
			         if(CurrentFun>3)
					    CurrentFun=1;
					 flag = 1;
					 break;	
			case 2 : Next(); 
					 break;
			case 4 : Prev(); 
					 break;
			case 8 : LED = ~LED; 
					 break;
			default : break;
		  }
    k = KBSTA;
	return;
}

main()
{
	KeyBoardInit();
	EA = 1;
	init_uart();
	printu("JMBIE MP3 EXP4: KeyPad Interrupt.\n");
	printu("Please press the Key on the MP3 Board.\n");
	while(1)
	{
	 switch(flag)
	 	{
		 	case 0 : break;
			case 1 : printuf("Current Function is 0x%x\n",CurrentFun);
			         flag= 0;
					 break;
			case 2 : printuf("Now play the song No.%d\n",NowPlaying);
			         flag= 0;
					 break;
			case 3 : printuf("The volume is %d\n",RegVolume);
			         flag= 0;
					 break;
			case 4 : printuf("The tone is %d\n",RegTone);
			         flag= 0;
					 break;
		}	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -