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

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

?? main.c

?? butterfly MP3源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**	@file	main.c	@brief	Butterfly MP3 main	@author	Nick Lott 	@date	November 2004	Copyright (C) 2004 Nick Lott <brokentoaster@sf.net>	http://butterflymp3.sf.net/		This is a simple MP3 player based around the AVR Butterfly.It currently 	uses a VS1001 mp3 decoder, MMC card and Nokia LCD. It has been heavily 	influenced by the Yampp system by Jesper Hansen <jesperh@telia.com>.		This program is free software; you can redistribute it and/or	modify it under the terms of the GNU General Public License	as published by the Free Software Foundation; either version 2	of the License, or (at your option) any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	You should have received a copy of the GNU General Public License	along with this program; if not, write to the Free Software Foundation, 	Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.		Target(s)...: ATmega169	Compiler....: AVR-GCC 3.3.1; avr-libc 1.2	**/#include <avr/io.h>#include <avr/pgmspace.h>#include <avr/interrupt.h>#include "main.h"#include "types.h"#include "uart.h"#include "delay.h"#include "vs1001.h"#include "mmc.h"#include "avrfat16.h"#include "timer0.h"#include "button.h"#include "eeprom.h"#include "lcdgraphics.h"#include "power.h"#include "ADC.h"#include "utils.h"// tag rom with verion infoconst char  VERSIONINFO1[] PROGMEM = "ButterflyMP3_sf_net V0.5 ";const char  VERSIONINFO2[] PROGMEM = __DATE__ __TIME__ ;#ifdef NOKIAextern	uint8 fbXY[];		// LCD position array#endif// player option variablesuint8 	gmusic_vol	=5;		// initial music volume.uint8 	gbass_boost	=0;		// bass boost off.// player state variablesuint8 	gMode		=0;		// mode of player, idle, playing, off, etcBOOL 	gLCD_Refresh;		// Update LCD//TODO: move these into file structuint32 	gFAT_entry 	=0; 	// global current entry number in FAT table. (aka file number)uint32 	gSector; 			// current sector (cluster) in songuint32 	gFileSectorSize; 	// size of current file in complete sectors.uint32	gFileSectorsPlayed; // number of full sectors played. (aka position)BOOL   	gFile_good; 		// File has been read from Fat and ready to go.char	cluster_pos=0;		// position in cluster char	buff_pos=16;		// position in buffer//volatile uint16 gBatteryVoltage;	// last ADC battery Voltage readingvolatile uint16	gPlayTimeSeconds;	// # of seconds current file has been playing.uint8	gDisplayTimeOut=0; // # of seconds+1 before changing display;	//  setup volume levels				0	1	2	3	4	5	6	7	8	9const uint8	__attribute__ ((progmem)) volume_val[10] = {160,128,112, 96, 80, 64, 48, 32, 16, 0};// internal Function Prototypes//uint8	FAT_readRoot(uint32 filenumber);void 	flush_decoder(char reset_type);void 	cue_file(void);void 	streaming (void);void 	handle_interface(void);void 	update_LCD(void);void	mainTimer(void);uint8 	init_mmc_fat(void);uint8	handle_mmc(uint8 MMC_present);void DumpGlobals(void){#ifdef ALPHA	extern volatile signed char gScroll;	extern volatile char gScrollMode;#endif		UART_Printfu08(gmusic_vol);EOL();	UART_Printfu08(gbass_boost);EOL();	UART_Printfu08(gMode);EOL();	UART_Printfu08(gLCD_Refresh);EOL();	UART_Printfu08(gFile_good);EOL();	UART_Printfu08(gDisplayTimeOut);EOL();#ifdef ALPHA	UART_Printfu08(gScroll);EOL();	UART_Printfu08(gScrollMode);EOL();#endif	UART_Printfu16(gPlayTimeSeconds);EOL();		UART_Printfu32(gFAT_entry);EOL();	UART_Printfu32(gSector);EOL();	UART_Printfu32(gFileSectorSize);EOL();	UART_Printfu32(gFileSectorsPlayed);EOL();}/***   init_HW*	@return		none	**	Initialize basic hardware for the butterfly.**/void 	init_HW(void){	// boost IntRC to 8Mhz 	//OSCCAL_calibration();	CLKPR = (1<<CLKPCE);        // set Clock Prescaler Change Enable	CLKPR = (0<<CLKPS1)|(0<<CLKPS0); // set prescaler = 1, Internal RC 8Mhz       // Disable Analog Comparator (power save)    ACSR = (1<<ACD);		// Disable Analog to Digital converter (power save)	//ADCSRA = 0;    // Disable Digital input on PF0-7 (power save)    DIDR1 = 0xFF; #ifdef PWR_CHK_INTERVAL	Power_Init();		// init power monitoring 	// abort power up if battery is low.	if (Power_check()<PWR_MIN_V) { 		//Jump to Bootloader		WDTCR = (1<<WDCE) | (1<<WDE);     //Enable Watchdog Timer to give reset		while(1);   	}#endif		// setup IO	UART_Init();		// init RS-232 link	SpiInit();			// init spi pins (mmc & VS1001)	vs1001_init_io();	// init IO pins	vs1001_init_chip();	// Reset Chip	Timer0_Init();		// setup timers for debounce and scroll	Button_Init(); 		// setup joystick.	LCD_Initialize();	// SETUP lcd			//register  timer routine 	Timer0_RegisterCallbackFunction(mainTimer);		// Read settings (volume and stuff from eeprom or flash)	load_player_options();	vs_1001_setvolume(pgm_read_byte(volume_val+gmusic_vol), pgm_read_byte(volume_val+gmusic_vol));		// say hello on Serial   	PRINT("AVR ButterflyMP3 Player  "__DATE__" "__TIME__);EOL();			// set up the FAT variables	FAT_buffer = mmc_sbuf; 	// 512 byte buffer for sector reads/writes	FAT_scratch = mmc_scratch; 	FAT_read = MMC_Read; // pointer to read block function 	FAT_write = MMC_Write;// pointer to write block function 	FAT16_entryMAX =-1;	FAT16_entryMIN = 0;} void mainTimer(void){	static uint8 timeout_count=0; 	static uint8 second_timer=100;#ifdef PWR_CHK_INTERVAL	static uint8 power_timer=PWR_CHK_INTERVAL;	uint16 batteryVoltage;#endif	extern unsigned char gButtonTimeout;  	// Variable from "button.c" to prevent button-bouncing				/**************** Button timeout for the button.c, START ****************/    if(!gButtonTimeout)    {        timeout_count++;                if(timeout_count > 20)         {            gButtonTimeout = TRUE;            timeout_count = 0;			//long_timeout_count=0;        }		    }   // RA Sewell - other half a second   if (second_timer == 50)   {      gLCD_Refresh = TRUE;   }   	if (!second_timer--){/// do stuff every second in here		second_timer=100;		if (gMode != MODE_PLAY){			gPowerSaveTimer++;			//UART_Printfu08(gPowerSaveTimer);EOL();		}else{			gPlayTimeSeconds++;					}      gLCD_Refresh = TRUE;#ifdef PWR_CHK_INTERVAL		if (!power_timer--){			power_timer = PWR_CHK_INTERVAL;			batteryVoltage = Power_check();			if (batteryVoltage>PWR_GOOD_V){				//PRINT("Battery GOOD");				//EOL();			}else if (batteryVoltage>PWR_AVG_V){				//PRINT("Battery OK");				//EOL();			}else if (batteryVoltage>PWR_MIN_V){				//PRINT("Battery LOW");				//EOL();			}else if (batteryVoltage>PWR_ABS_MIN_V){				//PRINT("Battery FLAT");				//EOL();			}else {				PRINT("LOW BATTERY PWR DWN");				EOL();				// stop playing and power down				gMode = MODE_PAUSE;				// save everything to eeprom				//save current settings				save_player_options();								//TODO: Write MMC Serial Number to EEPROM								//write current song to EEPROM				save_player_state();												gPowerSaveTimer=AUTOPOWEROFF_TIMEOUT;			}		}#endif		if(gDisplayTimeOut){			if (gDisplayTimeOut==1){				#ifdef ALPHA				// Display back to normal				LCD_FileName(TRUE);				#endif					gDisplayTimeOut = 0;			}else{ 				// continue the count down				gDisplayTimeOut--;			}		}			}	/*	 if(!gButtonLongTimeout){ // start the hold down timer		 long_timeout_count++;		 		 if(long_timeout_count > 1000){			 gButtonLongTimeout = TRUE;			 KEY_SHIFT=TRUE;			 KEY_VALID=TRUE;			 timeout_count = 0;			 long_timeout_count=0;		 }		 	 }*/		/**************** Button timeout for the button.c, END ******************/}/***	restore_player*	@return		MMC Card Status**	Restore the player state from eeprom if possible**/uint8 restore_player(void){	uint8	MMC_present,mode;	uint16	time;	uint32	file,sector,played;		mode=0; file=0;	sector=0;	played=0;	time=0;	// check for an mmc on startup	MMC_present = handle_mmc(FALSE);		if (!MMC_present){ //Can't restore no MMC  		//PRINT("NO MMC. Rstre abortd");EOL();		return MMC_present; 	}		// read last song details from EEPROM	load_player_state(&mode,&file,&sector,&played,&time);		// Debug loading info//		PRINT("Loaded from EEPROM");EOL();//		UART_Printfu08(mode);EOL();//		UART_Printfu32(file);EOL();//		UART_Printfu16(time);EOL();//		UART_Printfu32(sector);EOL();//		UART_Printfu32(played);EOL();		if ((mode != MODE_PAUSE)&&( mode != MODE_IDLE)){ // nothing to restore		//PRINT("MODE != PAUSE");EOL();		return MMC_present;	}		// todo: check if mmc is same mmc		// check song is available	if ( FAT_getNextSong(file-1,FAT16_dir_first_cluster) == file){ // song found		gFAT_entry = file; // select file		cue_file(); // load the file into memory		gMode = mode;		gSector = sector; // move to last played position		gFileSectorsPlayed = played;		gPlayTimeSeconds = time;		gLCD_Refresh=TRUE;	}else{ // song not found		gFAT_entry =FAT16_entryMIN;	}	return MMC_present;}uint8 open_Dir(uint32 directory){	uint8 files =0;		// display mode on LCD	LCD_Scanning();	files=FAT_scanDir(directory);		gFAT_entry= FAT16_entryMIN;	cue_file(); // load the file into memory		// Display back to normal	LCD_FileName(TRUE);		//PRINT("1ST FLE @ ");UART_Printfu16(FAT16_entryMIN);	//PRINT("  LST FLE @ ");UART_Printfu16(FAT16_entryMAX);	//UART_Printfu08(files);PRINT("files");EOL();		return files;}/***   init_mmc_fat*	@return		error from MMC or fat initialization or 0 for everything okay**	initialize the mmc and read fat/partition details from the disk.*	Needs to be run everytime MMC is changed.**/uint8 	init_mmc_fat(void){ 	uint8 result;		//DumpGlobals();	gFAT_entry = 0;	FAT16_entryMIN = 0;	FAT16_entryMAX = -1;		result =  MMC_Reset();				// init mmc	if (result) return result;		result = FAT_initFat16();	if (result) return result; // abort on non-zero reply 		result = open_Dir(FAT16_root_dir_first_cluster);		//return 0 if files found, 1 if 0 files	return !result;}/***   flush_decoder*	@return		none

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
8v天堂国产在线一区二区| 欧美视频在线不卡| 亚洲影院久久精品| 欧美xxxx在线观看| 91免费国产在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 成人动漫视频在线| 日韩激情在线观看| 亚洲欧洲国产日韩| 91麻豆福利精品推荐| 国产中文字幕一区| 图片区小说区国产精品视频| 欧美日韩一区二区三区四区 | 日韩亚洲欧美综合| 99re成人精品视频| 国产精品一二三| 日韩不卡在线观看日韩不卡视频| 欧美一区二区福利在线| 六月丁香综合在线视频| 亚洲国产视频一区| 亚洲特黄一级片| 久久天天做天天爱综合色| 欧美久久久久久久久| 久久99精品久久久久久国产越南 | 久久久久久久久久美女| 在线播放一区二区三区| 91成人看片片| 91丝袜美女网| 99久久精品国产一区二区三区| 亚洲精品乱码久久久久久| 中文字幕国产精品一区二区| 99精品视频在线播放观看| 国产高清亚洲一区| 亚洲精品中文在线观看| 中文字幕一区二区视频| 国产三区在线成人av| 亚洲精品在线电影| 日韩欧美激情四射| 日韩一级完整毛片| 欧美一区二区不卡视频| 欧美美女视频在线观看| 欧美四级电影网| 国产乱色国产精品免费视频| 久久精品噜噜噜成人av农村| 欧美aⅴ一区二区三区视频| 国产婷婷色一区二区三区四区| 99麻豆久久久国产精品免费优播| 天堂av在线一区| 国产色产综合色产在线视频| www一区二区| 久久中文字幕电影| 日本一区二区成人| 国产精品久久久久一区二区三区 | 欧美性欧美巨大黑白大战| 狠狠色综合日日| 亚洲一区二区三区爽爽爽爽爽| 久久婷婷国产综合精品青草| 久久精品视频一区二区| 中文字幕国产精品一区二区| 国产精品视频线看| 日韩一区二区在线观看视频| 日韩精品专区在线影院重磅| 久久久噜噜噜久久中文字幕色伊伊| 91色在线porny| 精品亚洲成a人在线观看 | 2022国产精品视频| 国产日韩欧美高清| 成人欧美一区二区三区小说| 日韩欧美123| 久久久久久久久久久电影| 国产精品狼人久久影院观看方式| 精品欧美久久久| 国产欧美一区二区精品秋霞影院| 日韩亚洲欧美综合| 欧美国产日韩一二三区| 亚洲视频一二区| 日本中文字幕一区二区视频| 国产一区在线精品| 男人操女人的视频在线观看欧美| 亚洲自拍另类综合| 亚洲欧美激情小说另类| 欧美国产成人在线| 午夜精品一区二区三区免费视频 | 日韩精品一区二区三区四区 | 国产日韩欧美综合在线| 亚洲少妇30p| 国产精品乱码妇女bbbb| 亚洲一区二区三区四区不卡| 狠狠色丁香久久婷婷综合丁香| 日韩av中文字幕一区二区三区| 午夜在线成人av| 国产精品一线二线三线| 在线视频观看一区| 欧美在线视频你懂得| 精品毛片乱码1区2区3区| 日韩亚洲欧美综合| 亚洲人精品一区| 麻豆国产精品777777在线| 成人18视频日本| 欧美电影免费提供在线观看| 亚洲欧美一区二区久久| 亚洲欧美日本韩国| 亚洲激情综合网| 国产麻豆日韩欧美久久| 欧美久久一二三四区| 国产精品进线69影院| 青青草国产成人av片免费| 色哟哟日韩精品| 久久蜜桃香蕉精品一区二区三区| 久久久久亚洲综合| 日韩国产高清在线| 色综合久久综合网欧美综合网| 91久久人澡人人添人人爽欧美| 在线观看国产91| 国产精品免费视频一区| 久久99精品国产麻豆婷婷 | 天天色图综合网| 一道本成人在线| 日本一区二区三区国色天香| 亚洲欧洲精品一区二区三区| 亚洲综合视频在线观看| 不卡一区二区三区四区| 久久久久久亚洲综合影院红桃 | 亚洲一区免费视频| 不卡大黄网站免费看| 久久免费看少妇高潮| 久久国产精品99久久人人澡| 3d成人h动漫网站入口| 一区二区高清在线| 一本大道av伊人久久综合| 欧美精品成人一区二区三区四区| 4438x亚洲最大成人网| 亚洲第一福利视频在线| 欧美在线制服丝袜| 亚洲国产一区二区a毛片| 色综合欧美在线视频区| 亚洲靠逼com| 激情都市一区二区| 欧美mv和日韩mv的网站| 久久99精品久久久久久久久久久久| www.综合网.com| 欧美韩日一区二区三区四区| 国产91精品精华液一区二区三区| 欧美日本韩国一区二区三区视频| 久久一留热品黄| 国产在线日韩欧美| 久久综合九色综合欧美亚洲| 黑人巨大精品欧美一区| 26uuu另类欧美| 国产福利91精品一区| 国产欧美视频在线观看| 丁香啪啪综合成人亚洲小说| 欧美精彩视频一区二区三区| 午夜欧美2019年伦理| 欧美一级二级在线观看| 美女脱光内衣内裤视频久久网站| 欧美一区二区观看视频| 日本aⅴ精品一区二区三区 | 亚洲老妇xxxxxx| 欧美日韩高清一区二区不卡| 日韩精品乱码免费| www国产精品av| 99久久婷婷国产精品综合| 亚洲精品乱码久久久久久黑人 | 日韩久久久久久| 国产宾馆实践打屁股91| 国产精品久久毛片| 7777精品伊人久久久大香线蕉的| 中文字幕第一区综合| av电影天堂一区二区在线| 国产精品对白交换视频| 91老师国产黑色丝袜在线| 国产视频一区二区三区在线观看| 亚洲国产wwwccc36天堂| 宅男在线国产精品| 老司机精品视频一区二区三区| 欧美三级视频在线观看| 日韩**一区毛片| www成人在线观看| 日本欧美一区二区三区| av在线不卡网| 天天做天天摸天天爽国产一区| 97精品电影院| 国产嫩草影院久久久久| 久久精品国产秦先生| 国产精品区一区二区三| 欧美日韩一二区| 久久精品72免费观看| 26uuu成人网一区二区三区| 91成人国产精品| 精久久久久久久久久久| 欧美一区二区日韩一区二区| 午夜视频一区在线观看| 色美美综合视频| 青草av.久久免费一区| 欧美激情在线看| 一本久久精品一区二区| 日韩精品视频网站| 久久久久国产精品麻豆| 不卡区在线中文字幕|