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

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

?? mp3_player_06.c

?? MG64+VS1003+SDCARD+nokia5110 之多的MP3
?? C
?? 第 1 頁 / 共 4 頁
字號:
									}
									part = 0;	/* clear the part count */
									if(FAT_LoadPartCluster(p,part,buffer))
									{
										#if DEBUG
											printf_P(PSTR("\r\nERROR: Faild to load a sector"));
										#endif
										free(buffer);
										return 1;
									}
								}
								else 	/* else just read the next part of the cluster */
								{
									part ++;	/* part ++ */
									if(FAT_LoadPartCluster(p,part,buffer))
									{
										#if DEBUG
											printf_P(PSTR("\r\nERROR: Faild to load a sector"));
										#endif
										free(buffer);
										return 1;
									}
								}
								sector ++;	/* sector count +=1 */
								j = 0;		/* loop value clear to 0*/
							}
							/********************************************************/											  
							min = 0;		/* clear the temp variable for time to 0 */
							sec = 0;
							ms = 0;
							i = 0;		/* for tag use, to ditermin tag like [XX:XX] & [XX:XX:XX] */
							while(1)
							{
								temp = buffer[j++];

								#if DEBUG
									USART_putchar(temp);
								#endif
														  
								/**********************************************************/
								if(sector == totalsect && j == leftbytes + 1) goto end;	/* file end */
								if(j == 512)		/* need to read next sector */
								{
									if(part == (SectorsPerClust - 1))	/* if need to read next cluster */
									{
										//p=FAT_NextCluster_NEW(p);//讀下一簇數據			//read next cluster
										p=FAT_NextCluster(p);
										if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))//如果無后續簇則結束,	//no more cluster  
										{
											#if DEBUG
												printf_P(PSTR("\r\nNo next cluster or read next cluster error"));
											#endif
											goto end;
										}
										part = 0;	/* clear the part count */
										if(FAT_LoadPartCluster(p,part,buffer))
										{
											#if DEBUG
												printf_P(PSTR("\r\nERROR: Faild to load a sector"));
											#endif
											free(buffer);
											return 1;
										}
									}
									else 	/* else just read the next part of the cluster */
									{
										part ++;	/* part ++ */
										if(FAT_LoadPartCluster(p,part,buffer))
										{
											#if DEBUG
												printf_P(PSTR("\r\nERROR: Faild to load a sector"));
											#endif
											free(buffer);
											return 1;
										}
									}
									sector ++;	/* sector count +=1 */
									j = 0;		/* loop value clear to 0*/
								}
								/***********************************************/														  
								if((temp < '0' || temp > '9') && temp != ':' && temp != '.')break;	/* end or not a leagal ch*/
								if(temp == ':'){i=1;continue;}
								if(temp == '.'){i=2;mscnt = 0;continue;}

								/* calculate the value  */
								if(i==0)min = min*10 + (temp-0x30);
								else if(i==1)sec = sec*10 + (temp-0x30);
								else 
								{
									if(mscnt == 0)
										ms += (temp-0x30)*100;
									else if(mscnt == 1)
										ms += (temp - 0x30)*10;
									else ms += temp-0x30;
									mscnt ++;
								}							 
							}
							
							if(temp == ']')	/* if tag end */
							{
							
								#if DEBUG
									printf_P(PSTR("  found time tag: "));
									printf_P(PSTR("min = %d; "),min);
									printf_P(PSTR("sec = %d; "),sec);
									printf_P(PSTR("ms = %d; \r\n"),ms);
								#endif
													  
								if(LrcStruct_p == 0)
								{
								//	printf_P(PSTR("\r\nWARNING: Sorry! no more space for the rest tag, som lryic can't display!"));
									goto end;
								}

								/* set time value without offset */
								LrcStruct_p->time = (uint32)(min*60 + sec)*1000 + ms;
													  
								#if DEBUG
									printf_P(PSTR("\r\noffset : %d "),LrcStructHead.offset);
									printf_P(PSTR("  total  = %ld; "),LrcStruct_p->time);
								#endif

								/* recalculate the time, use offset */
								if(LrcStructHead.sign)
								{
									if(LrcStruct_p->time<LrcStructHead.offset)LrcStruct_p->time = 0;
									else LrcStruct_p->time -= LrcStructHead.offset;
								}
								else LrcStruct_p->time += LrcStructHead.offset;
													  
								#if DEBUG
									printf_P(PSTR("\r\nafter calculate total  = %ld; "),LrcStruct_p->time);
								#endif

								/* node operation, pointer to next node, and set address */
								LrcStruct_p->eeaddr = lrcaddr;
								temp = buffer[j];
								LrcStruct_p = LrcStruct_p->next;
                                                      
                                                      
								if(temp == '[');	/* if two tag share one lyric, just jump and next loop it will process it */
								else			/* this is a sigle time tag */
								{
									while(1)
									{
										temp = buffer[j++];
                                                                    
										#if DEBUG
											USART_putchar(temp);
										#endif

										/*************************************************************/
										if(sector == totalsect && j == leftbytes + 1) goto end;	/* file end */
                                                                    
										if(j == 512)	/* need to read next sector */
										{
											if(part == (SectorsPerClust - 1))	/* if need to read next cluster */
											{
												//p=FAT_NextCluster_NEW(p);//讀下一簇數據			//read next cluster
												p=FAT_NextCluster(p);
												if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))//如果無后續簇則結束,	//no more cluster  
												{
													#if DEBUG
														printf_P(PSTR("\r\nNo next cluster or read next cluster error"));
													#endif
													goto end;
												}
												part = 0;	/* clear the part count */
												if(FAT_LoadPartCluster(p,part,buffer))
												{
													#if DEBUG
														printf_P(PSTR("\r\nERROR: Faild to load a sector"));
													#endif
													free(buffer);
													return 1;
												}
											}
											else 	/* else just read the next part of the cluster */
											{
												part ++;	/* part ++ */
												if(FAT_LoadPartCluster(p,part,buffer))
												{
													#if DEBUG
														printf_P(PSTR("\r\nERROR: Faild to load a sector"));
													#endif
													free(buffer);
													return 1;
												}
											}
											sector ++;	/* sector count +=1 */
											j = 0;		/* loop value clear to 0*/
										}
										/****************************************************************/
										 
										if(temp == 0x0d || temp == 0x0a)	/* one lyric end, when meet next line*/
										{
											if(lrcaddr<MAXLRCDATSIZE)	/* if lrcdatbuf is not full */
											{
												lrcdatbuf[lrcaddr++] ='\0';
											}
											else						/* otherwise use the eeprom */
												eeprom_write_byte(lrcaddr++ - MAXLRCDATSIZE,'\0');
											break;
										}
										else 				/* else normal data */
										{
											if(lrcaddr == MAXLRCDATSIZE)	/* if ram buffer run out, show some messages */
											{
											//	printf_P(PSTR("\r\n\r\nInternal RAM is not enough, some data will be stored at EEPROM!"));
											//	printf_P(PSTR("\r\nThis may take little longer time. U know 8.4ms/Byte, pls wait!......"));
											}
											#if FIX_DIRECTORY
											if(lrcaddr == MAXLRCDATSIZE + 2048)
											#else
											if(lrcaddr == MAXLRCDATSIZE + RECORD_ADDR_START)
											#endif
											{
											//	printf_P(PSTR("\r\n\r\nWow! The lyric is so long, EEPROM is run out, sorry!\r\n"));
												goto end;
											}
											else
											{
												if(lrcaddr<MAXLRCDATSIZE)		/* use ram */
												{
													lrcdatbuf[lrcaddr++] = temp;
												}
												else							/* use epprom */
													eeprom_write_byte(lrcaddr++ - MAXLRCDATSIZE,temp);
											}
										}
									}
								} 
							}
						}
					}
					else j++;	/**/
				}
				sector ++;	/**/
			}
			p=FAT_NextCluster(p);
			//p=FAT_NextCluster_NEW(p);//讀下一簇數據			//read next cluster
			if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))//如果無后續簇則結束,	//no more cluster  
			{
				#if DEBUG
					printf_P(PSTR("\r\nNo next cluster or read next cluster error"));
				#endif
				break;
			}
		}
	
end:
		/* in case that some lyc file don not have empty line at the last */
		if(lrcaddr<MAXLRCDATSIZE)
		{
			lrcdatbuf[lrcaddr++] = '\0';
		}
		else
			eeprom_write_byte(lrcaddr++ - MAXLRCDATSIZE,'\0');

		/* end the node  */
		LrcStruct_p = LrcStruct_p - 1;
		LrcStruct_p->next = 0;

		/* free the buffer  */
		free(buffer);

		/* below is a debug message */
		/************************************************************/
		#if DEBUG
			printf_P(PSTR("\r\nLyric data stored completed!"));

			printf_P(PSTR("\r\nThe data stored in RAM & EEPROM:\r\n"));
			for(j=0;j<lrcaddr;j++)
			{
				if(j<MAXLRCDATSIZE)USART_putchar(lrcdatbuf[j]);
				else USART_putchar(eeprom_read_byte(j - MAXLRCDATSIZE));
			}
                        
			printf_P(PSTR("\r\nNo sorted data is : \r\n"));
			LrcStruct_p = LrcStructHead.header;
			while(1)
			{
				lrcaddr = LrcStruct_p->eeaddr;
				while(1)
				{
					if(lrcaddr<MAXLRCDATSIZE)temp = lrcdatbuf[lrcaddr++];
					else temp = eeprom_read_byte(lrcaddr++ - MAXLRCDATSIZE);
					if(temp == 0)break;
					USART_putchar(temp);
				}
				printf_P(PSTR("\r\n"));
				if(LrcStruct_p->next == 0)break;
				LrcStruct_p = LrcStruct_p->next;
			}
		#endif

		#if DEBUG
			printf_P(PSTR("\r\nSort begining ......"));
		#endif
                     
		#if DEBUG
			temp = 0;
			LrcStruct_p = LrcStructHead.header;
			while(1)
			{
				temp++;
				if(LrcStruct_p->next == 0)break;
				LrcStruct_p = LrcStruct_p->next;
			}
			printf_P(PSTR("\r\ntotal %s time tags"),temp);
		#endif
		/***************************************************************/

		/* tag sort */		   
		LrcStruct_p_header = LrcStruct_p = LrcStructHead.header;
		while(1)
		{
			LrcStruct_p_header = LrcStruct_p;
			LrcStruct_p = LrcStruct_p->next;
			if(LrcStruct_p == 0)break;
			if(LrcStruct_p_header->time > LrcStruct_p->time)
			{
				LrcStruct_p_temp = LrcStructHead.header;
				j = 0;
				while(1)
				{   
					j++;
					if(LrcStruct_p_temp->time < LrcStruct_p->time)	/* do not need to insert node */
					{
						LrcStruct_p_up = LrcStruct_p_temp;
						LrcStruct_p_temp = LrcStruct_p_temp->next;
						LrcStruct_p_down = LrcStruct_p_temp->next;
					}
					else										/* need insert */
					{
                                                   
						#if DEBUG
							printf_P(PSTR("\r\nLrcStruct_p_up->time = %ld"),LrcStruct_p_up->time);
							printf_P(PSTR("\r\nLrcStruct_p_temp->time = %ld"),LrcStruct_p_temp->time);
							printf_P(PSTR("\r\nLrcStruct_p_down->time = %ld"),LrcStruct_p_down->time);
							printf_P(PSTR("\r\nLrcStruct_p->time = %ld \r\n"),LrcStruct_p->time);
						#endif
                                                    
						if(j == 1)	/* if the first need to replace */
						{
							LrcStructHead.header = LrcStruct_p;
							LrcStruct_p_header->next = LrcStruct_p ->next;
							LrcStruct_p ->next = LrcStruct_p_header;
							LrcStruct_p = LrcStruct_p_header;
						}
						else		/* other normal condition */
						{
							LrcStruct_p_header->next = LrcStruct_p->next;
							LrcStruct_p_up->next = LrcStruct_p;
							LrcStruct_p->next = LrcStruct_p_temp;
							LrcStruct_p = LrcStruct_p_header;
                                                             
							#if DEBUG
								printf_P(PSTR("\r\nLrcStruct_p->time = %ld \r\n\r\n"),LrcStruct_p->time);
							#endif
						}
						break;
					}
				}
			}
		}
	//	printf_P(PSTR("\r\n\r\nAnalyze complete!\r\n\r\nCode written by Bozai - 章其波"));
	//	printf_P(PSTR("\r\n*****************************************************\r\n"));

		/* debug message, show sorted data */
		#if DEBUG
			printf_P(PSTR("\r\nSort completed!"));
			printf_P(PSTR("\r\nData after sort is : \r\n"));
			printf_P(PSTR("\r\n\r\nLrc Data:\r\n\r\n"));
			LrcStruct_p = LrcStructHead.header;
			while(1)
			{
				lrcaddr = LrcStruct_p->eeaddr;
				while(1)
				{
					if(lrcaddr<MAXLRCDATSIZE)temp = lrcdatbuf[lrcaddr++];
					else temp = eeprom_read_byte(lrcaddr++ - MAXLRCDATSIZE);
					if(temp == 0)break;
					USART_putchar(temp);
				}
				printf_P(PSTR("\r\n"));
				if(LrcStruct_p->next == 0)break;
				LrcStruct_p = LrcStruct_p->next;
			}
		#endif

	}
	else lrc = 0;
}

#if 0
/*  put the time and lyric info to the teminal, for speed consideration we did not use printf_P() */
/*  format: [XX:XX] XXXXXXXXXXXXXXXX                                                              */
void putsLrc(unsigned char * time,unsigned char * lrcbuffer)
{
	USART_putchar(0x0d);
	USART_putchar(0x0a);
	USART_putchar('[');
	while(*time)	/* time */
	{
		USART_putchar(*time++);
	}
	USART_putchar(']');
	USART_putchar(0x20);
	while(*lrcbuffer)	/* lyric */
	{
		USART_putchar(*lrcbuffer++);
	}
}
#endif

uint8 PlayMusicwithKey()//播放音樂函數,一旦執行不會退出
{
	uint16 keylen;			//用于鍵處理		//for key processing
	uint16 count;			//數據計數			//data counting
	uint8 i;				//循環變量			//loop variable
	uint16 j;				//循環變量			//loop variable
	DWORD p;				//簇指示值			//cluster
	DWORD totalsect;		//文件擁有的扇區數	//cotain the total sector number of a file
	uint16 leftbytes;		//剩余字節			//cotain the left bytes number of a file //the last cluster usually not fully occupied by the file
	uint8 *buffer;			//緩沖				//buffer
	DWORD sector;			//扇區				//recor the current sector to judge the end sector
	uint8 flag;				//播放/暫停標志		//flag of pause
	uint16 vol= DEFAULT_VOLUME;//初始音量,應與vs1003函數里的初始音量相同	//default volume
	uint8 vol_temp;
	uint16 songs=1;			//默認放第一首歌	//play the fist songs by default
	uint16 songs_cnt = 0;					//how many songs have been played
	uint8 mode=0;			//單曲重復			//repet all by default
	unsigned long rand_val;
	
	uint8 total[6];	/* for total songs indication */
	uint8 current[12];	/* Current songs number */
	uint16 temp = totalsongs;

	uint8 time[6];
	uint16 decodetime;

	uint8 volume[3];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费视频网| 97久久精品人人爽人人爽蜜臀 | 久久不见久久见中文字幕免费| 国产精品一线二线三线| 欧美日韩在线三级| 国产欧美精品一区二区色综合| 天天影视网天天综合色在线播放| 99精品视频中文字幕| 欧美精品一区二区三区久久久| 亚洲一区二区在线观看视频| 成人一级片网址| 精品国产乱码91久久久久久网站| 亚洲一二三区在线观看| 91色九色蝌蚪| 中文字幕在线视频一区| 国产精品自在在线| 欧美tickling挠脚心丨vk| 偷拍亚洲欧洲综合| 欧美日韩中文另类| 亚洲国产精品久久久久秋霞影院 | 欧美美女bb生活片| 悠悠色在线精品| 97精品国产97久久久久久久久久久久| 精品捆绑美女sm三区| 精品一区二区三区视频在线观看 | 99国产精品久久| 亚洲 欧美综合在线网络| 国产精品你懂的| 欧美久久久影院| 91女神在线视频| 国产suv一区二区三区88区| 日本中文在线一区| 人人精品人人爱| 欧美va在线播放| 精品制服美女久久| 日韩一级片在线观看| 日韩国产一二三区| 日韩亚洲电影在线| 韩国视频一区二区| 久久人人97超碰com| 国产一区二区三区在线观看免费 | 狠狠色丁香婷综合久久| 日韩欧美电影在线| 激情五月激情综合网| 久久女同精品一区二区| 国产精品18久久久久久久久久久久| 久久综合久久综合久久综合| 国产成人午夜99999| 国产精品成人一区二区三区夜夜夜 | 国产成人在线色| 国产精品美女久久久久久久久久久| av亚洲精华国产精华精华| 亚洲摸摸操操av| 欧美精品xxxxbbbb| 另类中文字幕网| 欧美国产精品一区| 色婷婷久久久综合中文字幕| 亚洲成a人v欧美综合天堂下载| 欧美一卡二卡三卡| 成人av资源在线| 午夜免费久久看| 精品国产一区二区三区av性色| 成人在线视频首页| 日韩精品三区四区| 亚洲国产精品av| 7777精品久久久大香线蕉| 国产精品99久久久久久宅男| 一区二区三区高清| 精品国产乱码久久久久久久久| 99久久婷婷国产综合精品| 亚洲h动漫在线| 国产成人精品一区二区三区四区| 成人免费福利片| 亚洲美女视频在线观看| 风间由美一区二区三区在线观看| 欧美在线视频全部完| 国产嫩草影院久久久久| 久久 天天综合| 一本一本大道香蕉久在线精品| 91精品国产乱| 日本一道高清亚洲日美韩| 99在线视频精品| 中文成人综合网| 视频一区欧美精品| 国产网站一区二区| 欧美一区二区三区思思人| 91免费观看视频在线| 国模无码大尺度一区二区三区| 亚洲国产精品一区二区www在线| 欧美国产欧美综合| 精品国产91洋老外米糕| 精品视频在线视频| 91亚洲男人天堂| 成人午夜电影久久影院| 卡一卡二国产精品 | 午夜伦理一区二区| 亚洲精品成人悠悠色影视| 欧美韩国日本综合| 国产欧美一区二区在线观看| 日韩欧美精品在线| 3d成人h动漫网站入口| 在线亚洲+欧美+日本专区| www.亚洲色图.com| 粗大黑人巨茎大战欧美成人| 国产美女精品在线| 九九热在线视频观看这里只有精品| 婷婷久久综合九色国产成人| 亚洲女子a中天字幕| 最近中文字幕一区二区三区| 国产精品国产a| 亚洲丝袜自拍清纯另类| 国产精品久久久久国产精品日日| 国产视频一区在线播放| 国产亚洲一二三区| 久久婷婷成人综合色| 久久综合九色欧美综合狠狠| 26uuu欧美| 国产欧美视频一区二区| 国产亚洲福利社区一区| 国产精品私房写真福利视频| 国产精品看片你懂得| 中文字幕亚洲欧美在线不卡| 亚洲欧洲av一区二区三区久久| 国产精品超碰97尤物18| 亚洲日本韩国一区| 亚洲愉拍自拍另类高清精品| 婷婷国产在线综合| 精品一区二区三区在线观看国产 | 日本大胆欧美人术艺术动态 | 91麻豆精品91久久久久同性| 精品国产青草久久久久福利| 欧美在线视频全部完| 91视频在线看| 欧美系列亚洲系列| 在线精品视频免费播放| 91影视在线播放| 欧美艳星brazzers| 欧美性xxxxxx少妇| 在线成人午夜影院| 26uuu久久综合| 极品尤物av久久免费看| 亚洲一区二区av在线| 日韩不卡一区二区| 国产精品一级片| 色视频欧美一区二区三区| 91精品国模一区二区三区| 久久亚洲一区二区三区四区| 自拍偷拍欧美精品| 免费看日韩精品| 97精品视频在线观看自产线路二| 欧美色老头old∨ideo| 精品国产成人系列| 亚洲精品成a人| 国产麻豆成人传媒免费观看| 欧美性猛片aaaaaaa做受| 精品卡一卡二卡三卡四在线| 尤物av一区二区| 国产美女视频一区| 666欧美在线视频| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产成人av好男人在线观看| 国产成人一区二区精品非洲| 欧美三级资源在线| 国产精品丝袜一区| 美女视频黄免费的久久| 日本久久精品电影| 欧美激情一区二区三区在线| 日韩电影在线观看电影| 日本韩国欧美在线| 中文字幕精品一区二区三区精品| 日韩不卡在线观看日韩不卡视频| 色欲综合视频天天天| 国产午夜精品福利| 久久精品99国产国产精| 欧美日韩激情一区二区| 综合激情网...| 国产不卡视频一区| 久久只精品国产| 热久久国产精品| 欧美日韩精品欧美日韩精品一| 亚洲人成精品久久久久久| 国产精品18久久久| 精品成人一区二区| 免费日韩伦理电影| 91精品国产免费| 日本午夜精品视频在线观看| 欧美日韩一区二区在线观看视频| 一区二区成人在线视频| 91在线观看一区二区| 国产精品美女久久久久久| 国产不卡一区视频| 日本一区二区综合亚洲| 国产99久久久国产精品潘金网站| 久久先锋影音av鲁色资源网| 毛片基地黄久久久久久天堂| 欧美一级国产精品| 捆绑变态av一区二区三区| 色婷婷亚洲一区二区三区| 亚洲人成在线播放网站岛国| 一区二区三区精品久久久|