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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atmel mp3.c

?? 在C51上 mp3 開發程序 32M MP3 MP3功能的測試源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
--------------------------------------------
*/


static void PllInit(void);
static void MP3Init(void);
static void AudioInit();

void MP3_Init();
void PlayInit(unsigned char *SongName);

void Func();
void Next();
void Previous();
void PlayPause();
void PlayMP3(unsigned char *SongName);
void KeyBoardInit();


void MP3FsInit(unsigned char NDIV, unsigned int RDIV, unsigned char MPCD, unsigned char AUCD)
{
	PLLNDIV = 0;
	PLLRDIV = 0;
	MP3CLK = 0;
	AUDCLK = 0;
                                                     //PLL時鐘的頻率計算方法
	                                                 //PLLclk=(OSCclk*(RDIV+1))/(int)(NDIV+1);
	                                                 //set PLL CLK
	PLLNDIV	= 0x7f&NDIV;                             //set NDIV
	PLLCON	|= (0x3&RDIV) << 6;                      //set RDIV
	PLLRDIV	= (0x3ff&RDIV) >> 2;
                                                     //MP3時鐘頻率的計算方法
	                                                 //MP3CLK=PLLCLK/(int)(MPCD+1)負反饋
	MP3CLK |= MPCD;                                  //0000 0010 MPCD=2	
	                                                 //必須通過計算得到最小 MP3CLK 24M
                                                     //AUDCLK計算公式
	                                                 //AUDCLK=PLLCLK/(int)(AUCD+1)負反饋
	AUDCLK  |= AUCD;	                             //AUCD=4   必須通過計算得到 AUDCLK=12.288MHz              

}

void PllInit(void)
{
	if (FirstStart)
	{
		AUXR1 = 0xf2;	                             //這兩個寄存器的值在用Start Application和直接上電時
		                                             //不一樣,前一種情況下MP3解碼器才工作,
		PLLCON = 0;	                                 //這里強制將其置為與用Start Application按鈕時一致
		FirstStart = 0;
	}
	                                                 //鎖相環時鐘及MP3解碼器時鐘設置
	CKCON |= X2;		                             //0000 0001使能X2模式,增加處理速度,
	                                                 //每個機器周期變成6個振蕩周期即3個時鐘周期

	PLLCON &= (~PLLRES);                             //Enable PLL
	PLLCON |= PLLEN;
}

void MP3Init(void)
{
	                                                  //MP3音量及音效初始值
	MP3VOR = 0x0a;                                    //0000 1111下同
	MP3VOL = 0x0a;
	MP3BAS = 0x0f;
	MP3MED = 0x0f;
	MP3TRE = 0x0f;

	                                                  //MP3CON自動上電為0011 1111
	MP3CON &= (~MSKREQ);	                          //允許產生MP3中斷Clear to allow the 
	                                                  //MPREQ flag to generate a MP3 interrupt.
	MP3CON |= MPEN;	                                  //使能MP3解碼器Set to enable the MP3 decoder.
}

void AudioInit()
{	
    unsigned char i = 10;
	AUDCON0 = 0x77;                                    //0111 0110
	AUDCON1 &= (~0xB0);                                //SRC=0,MSREQ=0,MUDRN=0
	AUDCON1 |= 0x01;
	while (i)i--;
	AUDCON1 |= 0x40;
}

void MP3_Init(void)
{
	PllInit();
	MP3Init();
	AudioInit();
}

void PlayInit(unsigned char *SongName)
{
		int i = 0, j = 0, f = 0;
		int k = 0;
		unsigned int total_size;
/*		分析MP3信息,可能會比較長,但是沒有別的辦法	
		先要讀出一部分文件內容,大小不能確定			*/
		m = ReadSector(SongName, Page_Buf);                               //先讀出512字節
/*		when the first 3 bytes are 49 44 33 the next can be 03,this means ID3 V2.3  */
			if (Page_Buf[0] == 0x49)
				if ((Page_Buf[1] == 0x44) && (Page_Buf[2] == 0x33))
				{
/**********		 search the 7th-10th bytes,use the formular to calculate ***********/
					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)
					{
						ReadSector(SongName, Page_Buf);
						total_size -=512;
					}

					i = total_size;
				}
			                                                    //如果接下來是FFF則為MP3幀頭,如果
																//不是則為擴展標簽頭,需要加10個字節的量
			if (Page_Buf[i] != 0xFF)
				i += 10;

			                                                                 
			if ((Page_Buf[i] == 0xFF) && (Page_Buf[i + 1] & 0xF0 == 0xF0))//get MP3 information from FF FX XX XX 4bytes,
			                                                              //and show that
			{
				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];
			}

			if (MP3_Framehead[1] & 0x08) 
			{
				MP3_Init();
				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 
			{
				MP3_Init();
				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;                                                 //這句一定要加上
}

void PlayMP3(unsigned char *SongName)
{
	int i =0;
	
		while (MP3STA1&MPFREQ)
		{   
		                                                                  //MP3解碼器請求數據塊
			m = ReadSector(SongName, Page_Buf);                           //從當前歌曲中讀取512字節
			for (i=0; i<m; i++) 
			{
				while (!(MP3STA1 & MPBREQ)) 
				{                                                         //MP3解碼器請求數據字節
					while (!PlayState);                                   //暫停播放
					if (ChangeSong) 
					{                                                     //發生選曲
						DataRead = 0;
						ChangeSong = 0;
						return;
					}
				} 
				MP3DAT = Page_Buf[i];                       //向MP3解碼器數據寄存器送入一個數據字節
			}

			if (m < 512) 
			{                                               //如果從歌曲中讀出的數據不足512個字節則結束本歌曲播放
				NowPlaying++;
				MP3InitFlag = 1;
				return;
			}
		}
	
}


void KeyBoardInit()
{
	P1 = 0x0f;	                                             //將端口1的低四位,即鍵盤對應的4位置1
	KBCON = 0x00;                                            //設置鍵盤有效模式為低電平有效,并使能
	                                                         //中斷Low Level,Enable Interrupt
	IEN1 = IEN1 | EKB;	                                     //使能鍵盤中斷Enable KeyBoard Interrupt

}

void Func()
{
		if (CurrentFun < 3)
		{
			CurrentFun++;                                     //在選曲/音量調節/音效調節三者間切換
		}
		else if (CurrentFun == 3)
		{
			CurrentFun = 1;
		}
}


void Next()                                                   //按下"下一首/音量減小"鍵時的處理
{

	switch (CurrentFun)
	{                                                         //如果當前處于音量調節功能
		case VOLUME	:
			{
				if (MP3VOR > 0x00)                            //當前音量沒有達到最小時
				{
					MP3VOR -= 0x01;                           //右聲道音量增大一檔
					MP3VOL -= 0x01;                           //左聲道音量增大一檔
				}

				break;
			}
		case EFFECTION :                                      //如果處于音效調節功能
			{
				if (MP3BAS > 7)
				{                                              //降低重音效果
					MP3BAS -= 7;
					MP3MED = 0x0f;	
					MP3TRE += 7;
				}
				break;
			}
		case SELECTSONG	:                                      //如果處理MP3選取功能
			{
				if (NowPlaying == (NumofSong - 1))
				{ 
					NowPlaying = 0;                            //如果已經處于最后一首了,則指向第一首
					MP3InitFlag = 1;
				}
				else 
				{ 
					NowPlaying++;	                           //否則,指向下一首
					MP3InitFlag = 1;
				}
			ChangeSong = 1;		                               //置選曲標志位

				break;
			}
		default : break;
	}
		
}


void Previous()                                                //按下"上一首/音量增大"鍵時的處理
{
	switch (CurrentFun)
	{
		case VOLUME :                                          //如果當前處于音量調節功能
			{
				if (MP3VOR < 0x1f)                             //當前音量沒有達到最大時
				{
					MP3VOR += 0x01;                            //右聲道音量增大一檔
					MP3VOL += 0x01;                            //左聲道音量增大一檔
				}

				break;
			}

		case EFFECTION :                                       //如果處于音效調節功能
			{
				if (MP3BAS < 0x1e)
				{                                              //增加重音效果
					MP3BAS += 5;
					MP3MED = 0x0f;	
					MP3TRE -= 5;
				}
				break;
			}

		case SELECTSONG	:                                      //如果處理MP3選取功能
			{
				if (NowPlaying > 0)
				{
					NowPlaying--;                              //如果當前播放歌曲不為第一首,則指向上一首
					MP3InitFlag = 1;
				}
				else 
				{
					NowPlaying = NumofSong - 1;                //如果當前已經到達第一首,則指向最后一首
					MP3InitFlag = 1;
				}
				ChangeSong = 1;				                   //置選曲標志位

				break;
			}
		default:break;
	}
	
}


void PlayPause()
{
	PlayState = !PlayState;	                                    //按一下播放鍵時,改變播放狀態

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频精品在线| 日韩久久一区二区| 亚洲视频小说图片| 久久精品久久久精品美女| 99精品欧美一区二区三区综合在线| 欧美日韩国产精选| 亚洲欧美激情插| 国产精品1区2区| 日韩一区和二区| 午夜欧美电影在线观看| 日本道免费精品一区二区三区| 精品国产乱码久久久久久夜甘婷婷 | 欧美三区在线观看| 国产精品网曝门| 亚洲色欲色欲www| 欧美性受xxxx黑人xyx性爽| 久久99精品久久只有精品| 亚洲欧美怡红院| 欧美剧在线免费观看网站| 久久先锋资源网| www.欧美色图| 亚洲资源中文字幕| 99久久99久久综合| 成人app软件下载大全免费| 国产不卡视频在线观看| 亚洲精品日日夜夜| ...xxx性欧美| 大桥未久av一区二区三区中文| 欧美在线三级电影| 亚洲人成精品久久久久| 亚洲一区精品在线| 精品国产乱码久久久久久久久| 国产精品女人毛片| 精品一二三四区| 国产精品久久久久一区 | 欧美精品乱码久久久久久按摩| 日本欧美一区二区三区乱码| 亚洲一区二区五区| 日本女人一区二区三区| 国产精品一区一区三区| 成人综合婷婷国产精品久久免费| 极品瑜伽女神91| 麻豆成人在线观看| 免费观看在线色综合| 亚洲欧洲色图综合| 亚洲欧美偷拍三级| 国产欧美久久久精品影院| 欧美日产在线观看| 日韩视频在线观看一区二区| 日韩欧美国产一区二区在线播放 | 色悠悠久久综合| 国产在线视频不卡二| 日本在线播放一区二区三区| 国产精品久久久久婷婷| 欧美激情一区不卡| 国产日韩欧美一区二区三区综合| 精品日韩一区二区| 91精品午夜视频| 91一区二区三区在线播放| 欧美高清一级片在线| 26uuu国产日韩综合| 亚洲图片另类小说| 国产传媒欧美日韩成人| 欧美三级日韩三级国产三级| 欧美综合亚洲图片综合区| 日韩欧美一区电影| 日本aⅴ亚洲精品中文乱码| 国产电影精品久久禁18| 亚洲bt欧美bt精品777| 欧美一卡二卡三卡四卡| 国产成人综合在线| 亚洲精品国产无天堂网2021| 日韩一区二区三区电影在线观看 | 欧美日韩一区二区电影| 狠狠久久亚洲欧美| 一区二区三区在线免费观看 | 在线观看免费一区| 国内精品视频666| 一区二区三区欧美日| 国产日本一区二区| 日韩欧美电影一二三| 欧美亚洲综合另类| 成人激情文学综合网| 久久精品国产亚洲a| 亚洲一区二区精品视频| 中文字幕av免费专区久久| 日韩视频在线永久播放| 欧美在线free| av网站一区二区三区| 国产在线看一区| 日韩激情中文字幕| 一区二区在线看| 国产精品国产三级国产有无不卡| 日韩欧美的一区| 欧美精品 日韩| 欧美色男人天堂| 日本韩国欧美一区| av激情亚洲男人天堂| 国产成人a级片| 精品在线免费观看| 久久精品国产第一区二区三区| 亚洲一区中文日韩| 一区二区三区波多野结衣在线观看 | 日韩精品欧美成人高清一区二区| 亚洲视频免费在线| 国产精品久久久久久久裸模| 久久亚洲二区三区| 精品日韩一区二区三区| 欧美不卡视频一区| 精品日韩成人av| 久久综合久色欧美综合狠狠| 精品蜜桃在线看| 欧美变态凌虐bdsm| 久久精品亚洲一区二区三区浴池 | 18欧美亚洲精品| 国产精品欧美极品| 日韩一区在线免费观看| 国产精品乱码人人做人人爱| 国产精品国产三级国产| 亚洲精品中文字幕在线观看| 亚洲激情自拍视频| 亚洲国产日韩在线一区模特| 午夜视频久久久久久| 蜜桃av噜噜一区| 国产精品一区不卡| 99re视频这里只有精品| 色哟哟精品一区| 欧美日韩国产系列| 久久综合九色综合欧美就去吻| 麻豆国产一区二区| 国产一区二区三区在线观看免费| 精品一区二区免费在线观看| 国产麻豆视频一区二区| 成人av网站免费| 欧美日韩一区二区三区四区五区 | 欧美日韩国产一区二区三区地区| 欧美日韩国产在线观看| 欧美刺激脚交jootjob| 中文字幕免费观看一区| 一区二区三区视频在线看| 调教+趴+乳夹+国产+精品| 国产一区二区三区在线观看免费 | av在线免费不卡| 欧美精品777| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲精品国产无天堂网2021| 亚洲成人免费在线观看| 国产剧情一区二区| 在线视频一区二区免费| 欧美精品一区二区三区很污很色的 | 中文字幕av资源一区| 亚洲国产日产av| 久久9热精品视频| 成人综合婷婷国产精品久久| 欧美这里有精品| 久久综合色播五月| 亚洲一区av在线| 国产成人精品综合在线观看 | 欧美日韩五月天| 91精品啪在线观看国产60岁| 三级不卡在线观看| 蜜臀久久99精品久久久久宅男| 欧美在线一二三四区| 看片网站欧美日韩| 色又黄又爽网站www久久| 久久精品人人做人人综合| 免费看精品久久片| 亚洲va韩国va欧美va| 欧美亚洲国产一区二区三区va | 成人性色生活片免费看爆迷你毛片| 久久夜色精品国产欧美乱极品| 国产一区二区导航在线播放| 亚洲欧美视频一区| 欧美电影免费提供在线观看| www.欧美日韩| 热久久久久久久| 一区二区三区成人| 久久奇米777| 欧美综合色免费| 国产69精品一区二区亚洲孕妇| 婷婷六月综合亚洲| 国产精品久久夜| 日韩欧美卡一卡二| 91福利视频网站| 国产精品99精品久久免费| 国产精品热久久久久夜色精品三区| 欧美主播一区二区三区| jlzzjlzz欧美大全| 国产凹凸在线观看一区二区| 亚洲夂夂婷婷色拍ww47| 亚洲国产精品v| 国产亚洲短视频| 日本精品一级二级| 国产盗摄女厕一区二区三区| 五月综合激情网| 亚洲欧洲综合另类在线| 国产欧美久久久精品影院| 91精品国产综合久久国产大片| 99综合电影在线视频| 欧美三级蜜桃2在线观看|