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

📄 exam(chiese).txt

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 TXT
📖 第 1 页 / 共 4 页
字号:
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
	
//  <-- BYTE4 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE5 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE6 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE7 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
				
	r3-=1;
	jz  F_DMA_D12toNF_64B_Exit
	goto F_DMA_D12toNF_64B_Rep
F_DMA_D12toNF_64B_Exit:	
	pop r1,r3 from [sp]
	retf
	.endp
	
	
#include "..\\spce061\\061reg.h"
#include "..\\uart\\uart.h"
#include "keyboard.h"
unsigned int keyStatus;
unsigned int keyTimes;
unsigned int lastKey;

unsigned int lastAD;
unsigned int adTimes;

extern unsigned int mp3PlayTime;
void F_2Hz_Isr(void)
{
}

void F_KEY_Isr(void)
{
	keyTimes++;
}

// 2MS Timer
unsigned int oldKey, newKey, valueKey;
#define SCAN_STATUS		0x00
#define TINGLE_STATUS 	0x01
void F_AD_Isr(void)
{
	unsigned int scanKeyTime=0x00;
	unsigned int scanKeyStatus=SCAN_STATUS;
	
	if(scanKeyStatus == SCAN_STATUS)
	{
	}
	else
	{	
	}
	scanKeyTime++;
}

void InitAD()
{
	*P_ADC_MUX_Ctrl=C_ADC_CH1; //LINE_IN-------IOA0
	*P_ADC_Ctrl= C_ADCE; //ADC enable
}	

unsigned int GetAD(void)
{
	unsigned int uiData;
	while(!(*P_ADC_MUX_Ctrl&0x8000)); //wait,until ADC complete
	uiData=*P_ADC_LINEIN_Data;
	return(uiData&0xffc0);
}

void InitKey()
{
	asm("INT OFF");
	*P_TimeBase_Setup=0; //timebase=8Hz
	*P_INT_Ctrl=C_IRQ6_TMB2; //Setup interrupt
	keyTimes=0x00;
	asm("INT IRQ");
}

unsigned int ScanKey()
{
	unsigned int max, min, k, i;
	InitAD();
	do
	{		
		//Set Max & Min 
	 	max= 0x0000;
	 	min= 0xFFFF;
	 		 
	 	for(k= 0; k < 3; k++) 
	   	{
	   		*P_Watchdog_Clear=C_WDTCLR;
	   		i = GetAD();			   	
	   		i >>= 4;	
	    	if(i > max) max= i;
	    	if(i < min) min= i;
	   	}
	}	   
	while( (max-min) > 0x020);

    i= ((max + min) / 2) + 1;    

if(adTimes<0x0a)
	return(KEY_NONE);	
adTimes=0x00;	

	if(lastAD>i)
	{
		min=i;
		max=lastAD;
	}
	else
	{
		min=lastAD;
		max=i;
	}
	
lastAD=i;	
if( (max-min) > 0x20)
	{
		return(KEY_NONE);	
	}	
// */			
    i<<=4;	
// Case KEY_NONE    
if(i > KEY_NONE_VALUE)	
{
//	INT_OFF();		//Close Interrupt
	if( (lastKey != KEY_NONE) && (keyStatus == KEY_1ST_FUNC) )
	{
		k=lastKey;
		lastKey=KEY_NONE;
		return k;
	}
	keyStatus=KEY_1ST_FUNC;
	lastKey=KEY_NONE;
	return(KEY_NONE);
}	

// Case KEY_VOLUME_INC
if(i > KEY_VOLUME_INC_VALUE)
{
	if(lastKey != KEY_VOLUME_INC)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_VOLUME_INC;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_1ST_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_VOLUME_INC);
			}
			
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_VOLUME_INC);				
			} 
			
		return(KEY_NONE);					
	}	    // */
}	

// Case: Volume Dec 
if(i > KEY_VOLUME_DEC_VALUE)
{
	if(lastKey != KEY_VOLUME_DEC)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_VOLUME_DEC;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_1ST_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_VOLUME_DEC);
			}
			
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_VOLUME_DEC);				
			} 
			
		return(KEY_NONE);					
	}	    // */
}

//Case Key FF
if(i > KEY_FF_VALUE)
{
	if(lastKey != KEY_NEXT)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_NEXT;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_1ST_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_FF);
			}
			
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_FF);				
			} 
			
		return(KEY_NONE);					
	}	    // */
}

//Case Stop Key
if(i > KEY_STOP_VALUE)
{
	if(lastKey != KEY_STOP)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_STOP;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_1ST_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_REC);
			}
			
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_REC);				
			} 
			
		return(KEY_NONE);					
	}	    // */
}

// Case FR Key
if(i > KEY_FR_VALUE)
{
	if(lastKey != KEY_LAST)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_LAST;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_1ST_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_FR);
			}
			
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_FR);				
			} 
			
		return(KEY_NONE);					
	}	    // */
}

// Case AB Key
if( i > KEY_AB_VALUE)
{
	if(lastKey != KEY_AB)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey = KEY_AB;
		//INT_IRQ();
		return(KEY_NONE);		
	}
}	

// Case Power Key
if( (i>0x2000) && (i<0x3000) )//i > KEY_POWER_VALUE)
{
	if(lastKey != KEY_PAUSE)
	{//First Press Volume + Key
		keyTimes=0x00;
		keyStatus = KEY_1ST_FUNC;
		lastKey=KEY_PAUSE;
		INT_IRQ();
		return(KEY_NONE);		
	}
	else
	{//After First,Press Volume +
		if( (keyStatus == KEY_1ST_FUNC) && (keyTimes >= KEY_POWER_TIME) )	//> 2 Sec
			{
			 keyStatus = KEY_2ND_FUNC;
			 keyTimes = 0x00;
			 return(KEY_POWER_OFF);
			}
				
		if( (keyStatus == KEY_2ND_FUNC) && (keyTimes >= KEY_2ND_TIME) )  //> 1 Sec
			{
			 keyTimes = 0x00;
			 return(KEY_POWER_OFF);				
			}
			 								
		return(KEY_NONE);					
	}	    // */
}
	return(KEY_NONE);
}	   	  	


void KEYProc()
{
unsigned int keyValue,i;	 

keyValue=ScanKey();
	
if(	mp3Status & 0x8000)
{//*** RECORD(.WAV) MODE
	switch(keyValue)
	{
	  case KEY_NONE:
	  		return;
	  		break;
	  case KEY_VOLUME_DEC:
	  		MP3_VolumeDec();
	  		break;
	  case KEY_VOLUME_INC:		
	  		MP3_VolumeInc();
	  		break;
	  case KEY_PLAY:
	  		if(mp3Status != WAV_PLAY)
	  			mp3Status=WAV_PLAY;		
	  		else
	  		    mp3Status=WAV_PAUSE;
	  		 break;
	  case KEY_STOP:
	  		 	mp3Status=WAV_IDLE;
	  		 	FAT_FileReWind();
	  		 	FAT_Open("*.WAV");
	  		 	MP3VolumeLevel(mp3Volume);
	  		 	break;
	  case KEY_NEXT:
	  			MA8201InitialPlaySong();
	  			FAT_FileFindNext("*.WAV");	  
	  			break;
	  case KEY_LAST:
	  			MA8201InitialPlaySong();
	  			FAT_FileFindPrev("*.WAV");	  	  
	  			break;				
	  case KEY_FF:
	  			break;
	  case KEY_FR:
	  			break;
	  case KEY_POWER_OFF:
	  			break;										 			    	
	  default:
	  		break;		
	 }
}
else
{//*** MP3 (.MP3) MODE ***	
	switch(keyValue)
	{
	  case KEY_NONE:
	  		return;
	  		break;
	  case KEY_VOLUME_DEC:
	  		MP3_VolumeDec();
	  		break;
	  case KEY_VOLUME_INC:		
	  		MP3_VolumeInc();
	  		break;
	  case KEY_PLAY:
	  		
	  	    *P_INT_Ctrl=0x0008 | 0x0004 | 0x0010; //Setup interrupt
	  		if(mp3Status != MP3_PLAY)
	  			mp3Status=MP3_PLAY;		
	  		else
	  		    mp3Status=MP3_PAUSE;
	  		 break;
	  case KEY_STOP:
	  			MA8201InitialPlaySong();
	  			mp3PlayTime=0x0000;
	  		 	mp3Status=MP3_IDLE;
	  		 	FAT_FileReWind();
	  		 	FAT_Open("*.MP3");
	  		 	MP3VolumeLevel(mp3Volume);
	  		 	break;
	  case KEY_NEXT:
	  			MA8201InitialPlaySong();
	  			FAT_FileFindNext("*.MP3");	  
	  			break;
	  case KEY_LAST:
	  			MA8201InitialPlaySong();
	  			FAT_FileFindPrev("*.MP3");	  	  
	  			break;				
	  case KEY_FF:
	  			break;
	  case KEY_FR:
	  			break;
	  case KEY_POWER_OFF:
	  			break;										 			    	
	  default:
	  		break;		
	 }
}
	  			
}

		i=mpegHeader.mpegHead.syncword;
		i=mpegHeader.mpegHead.ID;
		i=mpegHeader.mpegHead.layer;
		i=mpegHeader.mpegHead.protection_bit;
		i=mpegHeader.mpegHead.bitrate_index;
		i=mpegHeader.mpegHead.sampling_frequency;
		i=mpegHeader.mpegHead.padding_bit;
		i=mpegHeader.mpegHead.private_bit;
		i=mpegHeader.mpegHead.mode;
		i=mpegHeader.mpegHead.mode_extension;
		i=mpegHeader.mpegHead.copyright;
		i=mpegHeader.mpegHead.original;
		i=mpegHeader.mpegHead.emphasis;		

⌨️ 快捷键说明

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