亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mp3.c

?? mcu: AT89C51SND1
?? C
字號(hào):

#include "AT89C51SND1_REG.H"
#include "MCU_KEYPAD.H"
#include "MP3_PLAYER.H"
#include "FILE_SYS.H"
void main()
{     
void main()
{     
	 //MP3 Player
	 /*初始化*/
	 MP3player_Init(); //解碼器初始化
	 Mutestate(1);//初始化為聲狀態(tài)                                                 
	 P1 = 0x0f;
	 KBCON = 0x00;
	 IEN1 |=EKB;	  //按鍵初始化                                            
	 EA = 1;      //中斷使能  
	/*獲得曲目數(shù)量*/   
	Number_Song = GetMP3NUM(); 
	/*處理播放曲目程序*/ 
	Playingflag= 0;                
	while(1) //循環(huán)
	 {
	 if(Number_Song != 0)//如果存在MP3文件
	 {
	 PlayInit(&SONG[11 * Playingflag]);			
	 Mutestate(0);//有聲模式
	 PlayMP3(&SONG[11 * Playingflag]);//播放指定MP3文件
	 Mutestate(1);
	 }
	if(Playingflag ==Number_Song)//循環(huán)播放 
	{	
	 Playingflag= 0;
	}
    } 
  }
}


}
//-----------------------------------------------------------------------
void MP3player_Init(void)
{
	MP3VOR = 0x0a;//右聲道控制寄存器
	MP3VOL = 0x0a;//左聲道音量控制寄存器
	MP3BAS = 0x10;//低音控制寄存器
	MP3MED = 0x10;//媒介控制寄存器
	MP3TRE = 0x10;

	MP3CON &= (~MSKREQ);	                          //Clear to allow the 
	                                                  //MPREQ flag to generate a MP3 interrupt.
	MP3CON |= MPEN;	                                  //使能MP3解碼.
}
//------------------------------------------------------------------------
void Mutestate(unsigned char sw)
{ 
    static char volume;	
    
	if(sw)
	    { 
		  volume = MP3VOL;
		  MP3VOR = 0x00;
	      MP3VOL = 0x00;
		  AUDCON1 &= (~0x01);
		  MP3CON &= (~MPEN);
    	 }
    else
	    { 
		  MP3VOR = volume;
	      MP3VOL = volume;
		  AUDCON1 |= 0x01;
		  MP3CON |= MPEN;
		 }
}
//---------------------------------------------------------------------------
unsigned char GetMP3NUM(void)
{
	unsigned char i = 0, j = 0, l = 0;
	int k = 0;
	unsigned char MP3[3] = {'M', 'P', '3'};
    GetFATInfo();
	k = BootSector + RsdSector + 2 * SectorofFatSize;
	ReadPage(k / 32, k % 32, Page_Buf);
 	while (Page_Buf[0] != 0)
	{
	for (j=0; j<16; j++)
	{
	 if (!Page_Buf[j * 32]) break;
	 if (Page_Buf[j * 32] == 0xE5) continue;
	 if (!memcmp(MP3, &Page_Buf[j * 32 + 8], 3))					  
	   {
		for (i=0; i<11; i++) 
		{
		SONG[l * 11 + i] = Page_Buf[j * 32 + i];
		 }
			l++;
		   }
		 }
		 k++;
		 ReadPage(0 + k / 32, k % 32, Page_Buf);
	}
	return l;
}
//----------------------------------------------------------------------
void GetFATInfo(void)
{

	ReadPage(Begin_Cluster, 0, Page_Buf);

	if (!(Page_Buf[0] == 0xeb && Page_Buf[2] == 0x90))	
	{
		
		BootSector = Page_Buf[454] + Page_Buf[455] * 256 + Page_Buf[456] * (256 * 256) + Page_Buf[457] * (256 * 256 * 256);
	}
	else 
	{
		BootSector = 0;
	}


	ReadPage(Begin_Cluster, BootSector, Page_Buf);
	RsdSector = Page_Buf[14] + Page_Buf[15] * 256;
	SecPerClus = Page_Buf[13];

	BytesPerSec = Page_Buf[12] * 256 + Page_Buf[11];

	TotalSector = (Page_Buf[20] * 256 + Page_Buf[19]);
	TotalCapacity = TotalSector * BytesPerSec;
	TotalCluster = TotalSector / SecPerClus; 

	SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
	RootEntry = (Page_Buf[18] * 256 + Page_Buf[17]);
 
	FirstDataSec = BootSector + RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / BytesPerSec);

	if (TotalCluster > 65525)
	{               
		FAT_TYPE = FAT32;

		if (TotalSector == 0) 
		{
			TotalSector = (Page_Buf[32] + Page_Buf[33] * 256 + Page_Buf[34] * 256 * 256 + Page_Buf[35] * 256 * 256 * 256);
		}
		TotalCapacity = TotalSector * BytesPerSec;
		TotalCluster = TotalSector / SecPerClus;

		SectorofFatSize = (Page_Buf[36] + Page_Buf[37] * 256 + Page_Buf[38] * 256 * 256 + Page_Buf[39] * 256 * 256 * 256);
		if (SectorofFatSize > (TotalCluster * 16 / 512))
		{
			SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
		}
		RootEntry = (Page_Buf[44] * 256 + Page_Buf[43]);
		FirstDataSec = BootSector+RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / BytesPerSec);
		
	}
	else if ((TotalCluster > 0) && (TotalCluster < 4085)) 
	{
		FAT_TYPE = FAT12;
	}
	else
	{	
		FAT_TYPE = FAT16;
	}
}
//-------------------------------------------------------
char PlayInit(unsigned char *SongName)
{
		int i = 0, j = 0, f = 0;
		int k = 0;
		unsigned int total_size;
		RDCOUNT = Read_Sector(SongName, Page_Buf);      
		/*判斷ID3V2*/
		if (Page_Buf[0] == 0x49)
		if ((Page_Buf[1] == 0x44) && (Page_Buf[2] == 0x33))
		{
		/*獲得MP3標(biāo)簽長(zhǎng)度*/
	  total_size = (Page_Buf[6] & 0x7F) * 0x200000 + (Page_Buf[7] & 0x7F) * 0x4000 + (Page_Buf[8] & 0x7F) * 0x80 + (Page_Buf[9] & 0x7F);
		while (total_size > 512)
		{
		Read_Sector(SongName, Page_Buf);
		total_size -=512;
		}
		i = total_size;
	  }
	  /*MP3幀頭*/
	if (Page_Buf[i] != 0xFF)i += 10;				 
	  /*獲得MP3文件的信息*/			                                                                 
	if ((Page_Buf[i] == 0xFF) && (Page_Buf[i + 1] & 0xF0 == 0xF0))
	{
		MP3_Framehead[0] = Page_Buf[i];
		MP3_Framehead[1] = Page_Buf[i + 1];
		MP3_Framehead[2] = Page_Buf[i + 2];
		MP3_Framehead[3] = Page_Buf[i + 3];
	}
	    /*設(shè)置MP3解碼器和AUDIO接口的時(shí)鐘*/
	  if (MP3_Framehead[1] & 0x08) 
	  {
	  switch ((MP3_Framehead[2] & 0x0C) >> 2) 
	  {
	  case 0x00 : MP3FsInit(24, 126, 3, 5); break;          //Fs=44.1kHz
	  case 0x01 : MP3FsInit(124, 575, 3, 4); break;         //Fs=48kHz
	  case 0x02 : MP3FsInit(124, 511, 3, 9); AUDCON0 = 0x76; break;//Fs=32kHz
	  default : break;
	  }
	  } 
	else 
	  {
	  switch ((MP3_Framehead[2] & 0x0C) >> 2)
	  {
	  case 0x00 : MP3FsInit(24, 126, 3, 11); break;         //Fs=22.05kHz
	  case 0x01 : MP3FsInit(124, 575, 3, 9); break;         //Fs=24kHz
	  case 0x02 : MP3FsInit(124, 511, 3, 19); AUDCON0 = 0x76; break;  //Fs=16kHz
	  default : break;
	  }
	}						
	  DataRead = 0;
	  return 1; 
}
//-------------------------------------------------------------------------------
int ReadSector(unsigned char *Name, unsigned char *databuff)
{
	  int i, k, Page;
	  unsigned  long CurrentSector;
	  if (DataRead == 0) 
	  {
	   Page = BootSector + RsdSector + 2 * SectorofFatSize;//文件目錄表地址
	   ReadPage(Page / 32, Page % 32, databuff);    //讀取文件目錄表內(nèi)容
	   while (databuff[0] != 0)//文件目錄表有內(nèi)容
		{
		for (i=0; i<16; i++)
		{
		if (!memcmp(Name, &databuff[i * 32], 11))//比較文件名
		{
		//獲得文件所在簇號(hào)
		Current_Cluster = databuff[32 * i + 27] * 256 + databuff[32 * i + 26];
		for (k=31; k>27; k--) 
		{
		DataRemain = (DataRemain << 8) | databuff[i * 32 + k];
		}
		//文件所在邏輯扇區(qū)號(hào)
		CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
		//讀取一個(gè)扇區(qū)的文件內(nèi)容
		ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);
		DataRead += 512;
		DataRemain -= 512;
		if (DataRemain < 0) 
		{
		DataRead = 0;
		return (DataRemain + 512);
		}
		else
		{
		return (512);
		}
		}
		}
		Page++;
		ReadPage(0 + Page / 32, Page % 32, databuff);
		}
		return (0);
		}
		else
		{
		Current_Cluster++;
		CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
		ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);
		DataRead += 512;
		DataRemain -= 512;
		if (DataRemain < 0) 
		{
		DataRead = 0;
		return (DataRemain + 512);
		}
		else return (512);
		}
}

//-----------------------------------------------------------------
void PlayMP3(unsigned char *SongName)
{
	int i =0,m =0;

	while (1)
		{   
 			RDCOUNT = ReadSector(SongName, Page_Buf); 
			for (i=0; i<RDCOUNT; i++) 
			{
				while (!(MP3STA1 & MPBREQ)) 
					while (!PlayState);
 
				MP3DAT = Page_Buf[i]; 
			}
			if (ChangeSong) 
			{ 
				DataRead = 0;
				ChangeSong = 0;
				m =1;
			}

			if (RDCOUNT < 512) 
			{
				NowPlaying++;
				MP3InitFlag = 1;
				m =1;
			}

			if(m)
 			 {  
			    while(MP3STA1 & MPFREQ)
			      MP3DAT = 0x00;
				return;
			  }
		}
	
}
//-------------------------------------------------
void key_interrupt() interrupt 11
{
  unsigned char i,j,k;
  /*屏蔽MP3中斷*/
  EA = 0;	
  IEN1 &= (~EKB);	           
  k=KBSTA & 0x0f;
  for(j=0;j<10;j++)		   
  for(i=0;i<100;i++);
  if(k==(~P1 & 0x0f))
  /*中斷任務(wù)處理*/
  switch (k)
  {		                                                     
  case 1 : Func(); break;	//		
  case 2 : Next(); break;
  case 4 : Previous(); break;
  case 8 : PlayPause(); break;//播放暫停
  default : break;
  }
  /*使能MP3中斷*/
  IEN1 |= EKB;	          
  EA = 1;	
  k=KBSTA;	                                                  
  return;
}

void Func()
{
  if (function < 3)
	{
	function++;
	}
  else if (function == 3)
	{
	function = 1;
	}
}
void Next()
{
	switch (function)
	{		
	   case SELECT_MP3	:
	   if (Playing == (number_mp3 - 1))
		   Playing = 0; 
	   else 
		   Playing++;	
		   MP3InitFlag = 1;
		   ChangeSong = 1;	
		break;
		case VOLUME	:
		if (MP3VOR > 0x00) 
		{
		   MP3VOR -= 0x01;
		   MP3VOL -= 0x01; 
		}
		break;
		case EFFECT : 
		if (MP3BAS > 2)
		{
		MP3BAS -= 2;
		MP3TRE += 2;
		}
		break;
	  default: break;
	}
  }

void Previous()
{
	switch (function)
	{		
	   case SELECT_MP3	: 
	 	  if (Playing > 0)
		     Playing--; 
		  else 
		     Playing = number_mp3 - 1;
		      MP3InitFlag = 1;
			 ChangeSong = 1;	
	   break;
	   case VOLUME :
		  if (MP3VOR < 0x1f)
	         {
		      MP3VOR += 0x01; 
		      MP3VOL += 0x01; 
	         }
	         break;
		  case EFFECT: 
	         if (MP3BAS < 0x1e)
	           {
			   MP3BAS += 2;
			   MP3TRE -= 2;
	           }
	         break;
		  default:      break;
	}
}

void PlayPause()
{
	PlayState = !PlayState;
	player_state(!PlayState);	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆视频一区二区| 亚洲一区二区在线观看视频| 国产精品综合视频| 国产日韩精品一区| 成人sese在线| 亚洲444eee在线观看| 欧美视频中文字幕| 免费高清不卡av| 久久亚洲精华国产精华液| 国产不卡高清在线观看视频| 国产精品久久久久久久蜜臀| 欧美综合亚洲图片综合区| 日韩黄色在线观看| 国产三级欧美三级日产三级99| 国产成人8x视频一区二区| 中文字幕一区二区不卡| 欧美乱妇15p| 国产成人亚洲精品青草天美| 伊人婷婷欧美激情| 欧美刺激脚交jootjob| 国产成人av福利| 亚洲国产精品一区二区久久恐怖片| 日韩一区二区在线看| 成人av电影观看| 日本一区中文字幕| 中国色在线观看另类| 欧美日韩精品欧美日韩精品一综合| 久久99精品久久久久婷婷| 国产精品视频线看| 欧美一级高清大全免费观看| 成人国产一区二区三区精品| 午夜亚洲福利老司机| 国产人久久人人人人爽| 欧美午夜视频网站| 成人亚洲精品久久久久软件| 亚洲成人av福利| 国产精品日韩精品欧美在线| 7777精品伊人久久久大香线蕉的 | 高清不卡在线观看| 亚洲r级在线视频| 国产日韩欧美精品一区| 91精品国产综合久久香蕉麻豆| caoporen国产精品视频| 老司机午夜精品| 亚洲精选免费视频| 国产女人18毛片水真多成人如厕 | 日韩免费高清电影| 欧洲一区在线电影| 成人免费看黄yyy456| 蜜桃视频一区二区三区| 亚洲一区二区三区四区五区中文| 国产视频不卡一区| 久久先锋影音av| 欧美精品久久一区二区三区| 色一区在线观看| 成人午夜精品在线| 国产精品中文欧美| 九九在线精品视频| 天堂av在线一区| 亚洲成人在线免费| 一区二区高清在线| 中文字幕一区二区三| 国产精品每日更新| 国产日韩一级二级三级| 欧美精品一区二区在线观看| 日韩欧美国产综合一区| 欧美精品日韩一区| 欧美精品第一页| 欧美日韩国产一级片| 欧洲精品一区二区三区在线观看| 91免费观看视频在线| 99re在线精品| 91欧美一区二区| 91色在线porny| 色诱亚洲精品久久久久久| 91免费版在线| 色综合天天狠狠| 91网站在线播放| 91福利社在线观看| 欧美日韩一区二区三区在线| 欧美日韩在线不卡| 91精品国产高清一区二区三区蜜臀 | 黄色小说综合网站| 美女尤物国产一区| 久久成人18免费观看| 国产精品一区免费视频| 国产精品一区二区在线播放 | 波多野结衣亚洲| 不卡视频在线看| 91丨九色丨蝌蚪丨老版| 91福利视频在线| 在线观看91精品国产麻豆| 日韩欧美你懂的| 国产视频在线观看一区二区三区| 国产精品免费看片| 亚洲精品中文在线| 免费成人小视频| 岛国一区二区三区| 91看片淫黄大片一级在线观看| 色94色欧美sute亚洲线路一ni| 欧美性大战久久| 精品美女在线观看| 中文字幕在线观看不卡视频| 一区二区三区在线视频免费观看| 亚洲bt欧美bt精品777| 久久99久久99精品免视看婷婷 | 国产精品中文字幕日韩精品| 成人性生交大片免费| 日本乱码高清不卡字幕| 欧美丰满少妇xxxxx高潮对白 | 日韩午夜电影在线观看| 久久精品欧美一区二区三区不卡| 亚洲图片欧美激情| 日本在线播放一区二区三区| 成人性生交大片免费看中文网站| 欧美优质美女网站| 久久综合九色综合97_久久久| 亚洲欧美另类在线| 美洲天堂一区二卡三卡四卡视频| 成人性生交大片| 6080午夜不卡| 亚洲国产岛国毛片在线| 日韩中文字幕91| 99这里都是精品| 精品国内二区三区| 一区二区三区四区五区视频在线观看| 久久99精品视频| 91福利视频网站| 国产精品每日更新| 精品亚洲国内自在自线福利| 在线观看成人小视频| 中文字幕的久久| 久久se精品一区二区| 在线观看日产精品| 国产精品免费视频一区| 久久狠狠亚洲综合| 欧美专区亚洲专区| 国产精品欧美精品| 精品一区二区三区在线播放 | 国产精品―色哟哟| 国产精品一级二级三级| 欧美日韩一区精品| 亚洲日本一区二区三区| 国产91精品免费| 日韩欧美久久一区| 免费观看成人鲁鲁鲁鲁鲁视频| 在线视频一区二区三区| 国产精品久久综合| 国产91对白在线观看九色| 精品嫩草影院久久| 久久精品国产一区二区三区免费看| 色婷婷狠狠综合| 亚洲三级视频在线观看| proumb性欧美在线观看| 国产天堂亚洲国产碰碰| 国产一区免费电影| 精品处破学生在线二十三| 日韩av网站在线观看| 欧美一区二视频| 亚洲国产日韩一级| 9191国产精品| 日本午夜精品一区二区三区电影 | 免费在线看成人av| 欧美精品成人一区二区三区四区| 一区二区三区国产精品| 欧美性受极品xxxx喷水| 亚洲综合激情另类小说区| 在线观看一区二区视频| 夜夜精品视频一区二区| 欧美午夜影院一区| 日韩中文欧美在线| 日韩欧美亚洲国产另类 | 成人综合婷婷国产精品久久蜜臀 | 亚洲最大成人综合| 欧美午夜精品理论片a级按摩| 午夜成人免费视频| 日韩亚洲欧美中文三级| 久久超级碰视频| 欧美国产1区2区| 99久久综合国产精品| 成人免费在线视频观看| 91久久国产最好的精华液| 亚洲电影一级黄| 日韩欧美成人午夜| 成人免费av资源| 一区二区三区蜜桃| 欧美一级在线视频| 国产成人精品亚洲777人妖 | 高清不卡在线观看| 亚洲欧美日韩国产中文在线| 欧美主播一区二区三区美女| 日日摸夜夜添夜夜添亚洲女人| 2021久久国产精品不只是精品| 国产成人午夜视频| 亚洲一区二区三区不卡国产欧美| 欧美一区二区三区视频| 国产不卡高清在线观看视频| 亚洲自拍都市欧美小说| 久久综合九色综合97婷婷女人| 99久久综合精品|