main4.c

来自「基于at89c51单片机的mp3键盘中断实验代码」· C语言 代码 · 共 120 行

C
120
字号
#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 + =
减小字号Ctrl + -
显示快捷键?