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

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

?? yampp3.c

?? fat文件系統的源碼 老外寫的FAT32文件系統 還是有用的
?? C
?? 第 1 頁 / 共 3 頁
字號:
					*dst++ = ' ';
				lcd_puts(timestr);		// display track number, x= 0 - 4
#if (LCD_LINE_LENGTH != 16)
				lcd_putchar(' ');		// space
#endif
				lcd_puts(randstr);		// display random status, x= 6 - 10
#if (LCD_LINE_LENGTH != 16)
				lcd_putchar(' ');		// space
#endif
				lcd_puts(loudstr);		// display loudness status, x= 12 - 16
#if (LCD_LINE_LENGTH != 16)
				lcd_putchar(' ');		// space
				lcd_putchar(1);			// speaker sign
#endif

#endif  //(LCD_LINES == 4)

//--------------------------------------------------------------------------------------------------------------------
				lcd_putchar(0);			// Volume indicator on last position
#endif  //ENABLE_LCD
				nDispUpd = 0;
/*
#if ! ((F_VS1001 == (6144 + 0x8000)) || (F_VS1001 == 12288) || defined(OLD_VS1001))
				if (vs1001_read(VS1001_CLOCKF) != F_VS1001)	// check for self reset of vs1001
					vs1001_reset(bLoudness);		// soft resetting for right CLOCKF set
#endif
*/
			} // if update time display
		} // if (bPlaying)
	} // while (true)

#endif // if not SETUP_REMOTE_CODES

}




// Auxillary functions definitions

// converts 16 bit unsigned integer to string
// str[] should be 6 bytes at least. Function can return value != str
// and you have to use it as a output value start
u08* unsigned2str(u16 track, u08 *str)
{
	register u08 i=5;
	udiv_t divt;

	while(i--) *str++ = ' ';
	*str = '\0';
	divt.quot = track;
	do {
		divt = udiv(divt.quot, 10u);
		*(--str) = '0' + (u08)divt.rem;
	} while (divt.quot);
	return str;
}

#ifdef ENABLE_NUMERIC
u16 Numb2Int()				// Convert selected song number from string to integer
{
register u08 i;
u16 res = 0;
u16 p   = 1;
	for (i = pNum-number ; i>0 ;  i--)
	{
		res += p * (number[i-1]-'0');
		p *=10;
	}
	return res;
}
#endif

#ifdef OLD_VS1001
void BadHeadStrip(void)		// Special MP3 header patch to strip all invalid headers 
				// not needed for VS1001K chip
{
u16 j;
	for (j = 0; j < BUFFER_SIZE - 1; j++)
		if ((*(u16*)&BUFFER1P[j] & 0xfeff) != 0xfaff)
			BUFFER1P[j] = 0;
		else
			break;
	// End of special header patch
}
#endif


#ifdef ENABLE_SERIAL
typedef struct pairUART				// auxilliary structure for making
{						//  of pairs table for select operator
	u08 code, action;
} pairUART;

pairUART TableUART[] = { 
	{ 0, EV_IDLE }, 
	{ 'g', EV_PLAY },	{ 'G', EV_STOP }, 
	{ 'p', EV_PREV },	{ 'n', EV_NEXT }, 
	{ 'P', EV_PREV10 },  	{ 'N', EV_NEXT10 },
	{ 'V', EV_VOLUP },	{ 'v', EV_VOLDN },
	{ 'd', EV_NEXTD },	{ 'D', EV_PREVD },
#ifdef ENABLE_NAVL
	{ 'l', EV_NEXTL },	{ 'L', EV_PREVL },
#endif
#ifdef FFWD_SEARCH
	{ 'f', EV_FFWD },
#endif
#ifdef FREW_SEARCH
	{ 'F', EV_FREW },
#endif
	{ 'r', EV_RANDOM },	{ 'b', EV_LOUDNESS},
	{ 't', EV_REMAIN} 
};


u08 get_char_event(void)
{
#ifdef HEXDUMP
	static u32 dwLbaSector = 0;
	static u32 dwTempAcc = 0;
#endif

	register u08 i;
	register u08 code = UART_ReceiveByte();

	for (i = 0; i < sizeof(TableUART) / sizeof(TableUART[0]); i++)
		if (TableUART[i].code == code)
			return TableUART[i].action;
#ifdef HEXDUMP
	if (code >= '0' && code <= '9')
		dwTempAcc = dwTempAcc * 10 + code - '0';
	if (code == 0x0d)		// Enter
	{
		sectordump(dwLbaSector = dwTempAcc);
		dwTempAcc = 0;
	}
	if (code == '+')
		sectordump(++dwLbaSector);
	if (code == '-')
		sectordump(--dwLbaSector);
#endif	// HEXDUMP

    return EV_IDLE;
}

#endif // ENABLE_SERIAL


#ifdef ENABLE_IR

// get a remote control event

u16 TableIR[] = {IR_PLAY, IR_STOP, IR_NEXT, IR_PREV, IR_NEXT10, IR_PREV10, IR_VOLUP, IR_VOLDN, IR_NEXTD, 
		IR_PREVD, IR_FFWD, IR_FREW, IR_LOUDNESS, IR_RANDOM, IR_REMAIN, IR_NEXTL, IR_PREVL};

#ifdef ENABLE_NUMERIC
 u16 NumTab[] = {IR_0, IR_1, IR_2, IR_3, IR_4, IR_5, IR_6, IR_7, IR_8, IR_9};
#endif

u08 ir_event(void)
{
	static u16 Lcod;
	u08 i;
	u16 code = get_rec80();

	if (Lcod == code && nKeyTime <= DOUBLE_TRAP)		// Trap for some IR transmitters that fast repeat
		return EV_IDLE;					// code of pressed key

	for (i = 0; i < (sizeof TableIR / sizeof TableIR[0]); i++)
		if (TableIR[i] == code)
		{
			LastEvent = i+1;				// Save last event
RET_LAST:		nKeyTime = 0;
			Lcod = code;
			return LastEvent;
		}

	if (code == IR_RESET)
	{
		wdt_enable(0x01);
		while(true);					// Reset player by watchdog
	}

#ifdef ENABLE_AUTOREPEAT
	if ((nKeyTime >= 2) && (LastEvent == EV_VOLUP || LastEvent == EV_VOLDN || 
				LastEvent == EV_FFWD  || LastEvent == EV_FREW))		// Autorepeat feature on some keys
		goto RET_LAST;
#endif

#ifdef ENABLE_NUMERIC
	for (i=0; i<10; i++)
		if (NumTab[i] == code)			// Check for numeric keypress code
		{
			*pNum++ = i+'0';		// Add numeric key ascii character to string
			*pNum = 0;			// String end flag
			LastEvent = EV_NUMBER;
			goto RET_LAST;
		}
			
#endif
	return EV_IDLE;
}

#else
 #define ir_event() EV_IDLE
#endif // ENABLE_IR


// get a keyboard event - edhanced by MIS

#ifdef ENABLE_LOCAL_KBD
u08 TableKbdShort[] = KBD_SHORT;	// Key definitions moved to "Constants.h" file !!!
u08 TableKbdLong[] = KBD_LONG;
#endif

u08 get_key_event(void)
{
	u08 event = EV_IDLE;
#ifdef ENABLE_LOCAL_KBD
	static u08 keydown = 0;
	register u08 i;
	disable_ram();			// disable ExtRAM
	outp(0xff, PORTA-1);		// set port as output
	outp(0, PORTA);			// set all pins to 0
	asm volatile("nop");		// allow time for port to activate

	if (keydown)			// if a key was pressed earlier
	{
		// see if it has been released
		if (bit_is_set(PIND, PD3))				// check bit
		{
			// no key is down, return last key seen
			if (nKeyTime < 8 && nKeyTime > 0)		// max 0.8 sec for shortpress
				event = TableKbdShort[keydown];		// short keypress event
			keydown = 0;
		}
		else
			if ((nKeyTime & 0x7F) >= 8)			// long keypress ? 
			{
				event = TableKbdLong[keydown];		// long keypress event
				if (event == EV_VOLUP || event == EV_VOLDN || 
				    event == EV_FFWD  || event == EV_FREW)
					nKeyTime = 0x86;		// 0.2 sec repeat time for volume and fast forward
				else
					nKeyTime = 0x82;		// 0.6 sec repeat time
			}	


	}
	else
	{	
		if (bit_is_clear(PIND, PD3))	// check if a key is down
		{
			// a key is active, check which one
			for (i = 0; i < 8; i++)
			{
				outp(~(1 << i), PORTA);			// write bit mask
				asm volatile("nop");			// wait a while
				asm volatile("nop");
				if (bit_is_clear(PIND, PD3)) 		// this bit ?
				{
					keydown = i + 1;		// store the key
					nKeyTime = 0;			// clear keypress timer
					break;				// and exit
				}
			}
		}
	}

	enable_ram();							// enable ExtRAM
#endif
	return event;
}

#ifdef PWR_BEEPS
void send_sinewave_beeps(void)
{
	static u08 buf[] = {0x53,0xEF,0x6E,0x30,0x45,0x78,0x69,0x74};
	register u08 i, j = 3;

	while (j-- != 0)
	{
		for (i = 0; i < 4; i++)
			vs1001_send_data(buf[i]);
		vs1001_nulls(4);
		delay10(10000);		// delay 100ms

		for (/*i = 4*/; i < 8; i++)
			vs1001_send_data(buf[i]);
		vs1001_nulls(4);
		delay10(10000);
	}	
}
#endif

#ifdef ENABLE_LCD
void defchar(u08 dat)
{
	register u08 i=5;
	lcd_data(0x1f);
	while (i--)
		lcd_data(dat);
	lcd_data(0x1f);
	lcd_data(0x00);				// cursor line
}
#endif

void setvolume(u08 v)
{
	vs1001_setvolume(v, v);
	eeprom_wb(EEPROM_VOLUME, v);

#ifdef ENABLE_LCD

	register u08 i;
#ifndef PROGRESBAR_II
	static u08 data[] = { 0x10, 0x18, 0x1C, 0x1E, 0x1F };
#endif
	lcd_command(0x40);
	for (i = 0; i < 8; i++)
	{
		if (v <= i * (VOL_STEP*(NUM_VOL_STEPS/8)))
#if (LCD_LINE_LENGTH == 16)
			lcd_data((1 << ((10 - i) / 2)) - 1);		// Volume idicator mod
#else
			lcd_data(0x1f << ((i+1)*5 / 10));		// Volume idicator mod (reversed)
#endif
		else
			lcd_data(0);
	}

#if (LCD_LINE_LENGTH != 16)
	static u08 vsc[] = {0x03, 0x05, 0x19, 0x19, 0x19, 0x05, 0x03, 0x00};	// speaker sign
	for (i=0; i < 8; i++)
		lcd_data(vsc[i]);					// load to CG_RAM char 1
#endif

#ifdef PROGRESBAR_II
	lcd_command(0x80);
#else
	lcd_command(0x50);
	for (i = 0; i < 40; i++)
		if ((i % 8) < 7) 
			lcd_data(data[i >> 3]);			// eight times send each value
		else
			lcd_data(0);
#endif

#endif // ENABLE_LCD
}

#ifdef PROGRESBAR_II
void lcd_frame(void)
{
	register u08 i = (LCD_STEPS / 5) - 1;
	lcd_command(0x58);			// start definition of CG-RAM from char code 3
	defchar(0x1f);				// full  bar (3)
	defchar(0x00);				// empty bar (4)
	defchar(0x01);				// ended bar (5)
	lcd_gotoxy(0, LCD_LINES / 4 + 1);
	while (i--)
		lcd_putchar(4);	
	lcd_putchar(5);	
}
#endif


u08 barcalc(u08 dummy)				// assembler optimized function to calculate progressbar position
{
// (u08)(LCD_STEPS * (dwPlayed>>8) / (dwFileSize>>8));

	asm volatile ("mov r18, r24");
	asm volatile ("clr r19");
	asm volatile ("clr r20");
	asm volatile ("clr r21");
	asm volatile ("lds r22,(dwPlayed)+1");
	asm volatile ("lds r23,(dwPlayed)+2");
	asm volatile ("lds r24,(dwPlayed)+3");
	asm volatile ("clr r25");
#ifdef YAMPP3USB
	asm volatile ("call __mulsi3");
#else
	asm volatile ("rcall __mulsi3");
#endif
	asm volatile ("lds r18,(dwFileSize)+1");
	asm volatile ("lds r19,(dwFileSize)+2");
	asm volatile ("lds r20,(dwFileSize)+3");
	asm volatile ("clr r21");
#ifdef YAMPP3USB
	asm volatile ("call __udivmodsi4");
#else
	asm volatile ("rcall __udivmodsi4");
#endif
	asm volatile ("mov r24,r18");
	return dummy;
}

void dispbar(void)
{
#ifdef ENABLE_LCD

	register u08 i, a, nSteps;

#ifdef PROGRESBAR_II
	nSteps = barcalc(LCD_STEPS-1);
	a = i = nSteps / 5;					// # of full bars
	static u08 data[] = { 0x10, 0x18, 0x1C, 0x1E, 0x1F };

	lcd_command(0x50);
	defchar(data[nSteps % 5] | (a == (LCD_STEPS / 5) - 1));

	lcd_gotoxy(0,LCD_LINES / 4 + 1);

	while (i--)
		lcd_putchar(3);					// print full bars

	if (a <= (LCD_STEPS / 5) - 1)				// jman to fix display overwrite
		lcd_putchar(2);	

#else // PROGRESBAR_II

	nSteps = barcalc(LCD_STEPS);
	a = i = nSteps / 5;					// # of full bars
	lcd_gotoxy(0, LCD_LINES / 4 + 1);			// line 2 or 3
	while(i--)
		lcd_putchar(6);

	if (a <= (LCD_STEPS / 5) - 1)				// jman to fix display overwrite
	{
		lcd_putchar(2 + nSteps % 5);	

#ifdef FREW_SEARCH
		if ( a < LCD_STEPS / 5)
			 lcd_putchar(32);			// space
#endif
	}
#endif // PROGRESBAR_II
#endif // ifdef ENABLE_LCD
}


void eeprom_ww(u08 address, u16 value)
{
	union u16convert Data;
	Data.value = value;
	eeprom_wb(address, Data.bytes.low);
	eeprom_wb(address + 1, Data.bytes.high);
}



#ifdef HEXDUMP

void HexDump(u08 *buffer, u16 len)
{
    u16 i, j, k;

    EOL();
    for (i = 0, k = 0; i < len / 16; i++, k += 16)
    {
        UART_Printfu16(k);
        UART_SendByte(' ');
        for (j = 0; j < 16; j++)
        {
            UART_Printfu08(buffer[i * 16 + j]);	
            UART_SendByte(' ');
        }
        PRINT("    ");
        for(j =0 ; j < 16; j++)
        {
            if (buffer[i * 16 + j] >= 0x20)
                UART_SendByte(buffer[i * 16 + j]);
            else
                UART_SendByte('.');
        }
        EOL();
    }
}

void sectordump(u32 sector)
{
	if (ATA_ReadLBA0(sector, 1, TMP_SECTOR) == 0)
	{
		UART_Printfu32(sector);
		HexDump(TMP_SECTOR, BPS);
	}
	else
		PRINT_p(PSTR("Dump failed\n"));
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品在线一区| 91国在线观看| 自拍偷拍国产精品| 欧美一区二区久久久| 99久久99久久综合| 天天av天天翘天天综合网色鬼国产 | 91黄色免费网站| 久久成人综合网| 亚洲国产精品嫩草影院| 国产精品家庭影院| 久久美女高清视频| 欧美久久久久久蜜桃| 91色porny蝌蚪| 懂色av一区二区夜夜嗨| 精品亚洲国内自在自线福利| 亚洲国产精品久久久久秋霞影院| 国产亚洲综合av| 久久亚洲欧美国产精品乐播| 欧美日韩在线不卡| 在线一区二区观看| 蜜臀av一级做a爰片久久| 一区二区欧美在线观看| 日韩一区日韩二区| 亚洲人成7777| 亚洲卡通欧美制服中文| 伊人夜夜躁av伊人久久| 伊人色综合久久天天人手人婷| 一区在线中文字幕| 亚洲精品视频免费观看| 亚洲三级小视频| 亚洲成av人片在www色猫咪| 亚洲成人免费观看| 亚洲成av人片一区二区三区| 免费精品视频在线| 激情久久五月天| 成人精品一区二区三区四区 | 欧美精品vⅰdeose4hd| 欧美老女人第四色| 久久综合色8888| 国产日本欧美一区二区| 亚洲视频综合在线| 午夜精品福利一区二区蜜股av| 秋霞电影网一区二区| 国产综合一区二区| 99精品视频在线免费观看| 91黄色免费看| 欧美日韩视频不卡| 国产亚洲美州欧州综合国| 中文字幕一区av| 日韩成人免费电影| 99热在这里有精品免费| 51精品视频一区二区三区| 日本一区二区三区在线不卡| 亚洲午夜精品17c| 高清国产一区二区| 欧美一卡2卡3卡4卡| 国产精品成人午夜| 久草在线在线精品观看| 色偷偷久久人人79超碰人人澡| 久久综合色之久久综合| 日本在线播放一区二区三区| 成人黄页毛片网站| 久久欧美中文字幕| 久久99精品国产| 欧美人与禽zozo性伦| 亚洲免费观看高清完整版在线观看熊 | 99精品欧美一区| www国产成人| 麻豆91在线观看| 欧美色中文字幕| 亚洲美女少妇撒尿| av亚洲精华国产精华| 国产欧美日韩综合| 国内久久婷婷综合| 久久综合网色—综合色88| 久久99久久99小草精品免视看| 日韩欧美中文字幕精品| 麻豆91在线播放免费| 日韩精品一区二区三区在线观看 | 91免费看片在线观看| 韩国午夜理伦三级不卡影院| 久久久久久久久97黄色工厂| 韩国av一区二区三区在线观看| 日韩欧美国产成人一区二区| 亚洲成人一区在线| 欧美一区二区在线免费播放| 久久精品国产99久久6| 久久久久久久网| 91美女片黄在线| 喷水一区二区三区| av一二三不卡影片| 亚洲黄色免费网站| 91.xcao| 东方欧美亚洲色图在线| 亚洲色图色小说| 国产凹凸在线观看一区二区| 久久精品欧美日韩| 色94色欧美sute亚洲13| 麻豆成人久久精品二区三区红 | 精品日韩一区二区三区| 成人一区二区视频| 午夜精品一区在线观看| 精品成人在线观看| 91福利社在线观看| 国产最新精品精品你懂的| 亚洲欧美视频在线观看视频| 欧美va亚洲va在线观看蝴蝶网| 96av麻豆蜜桃一区二区| 免费av成人在线| 一区二区免费在线播放| 久久亚洲综合色| 日韩一区二区三区免费看 | 国产不卡视频在线播放| 天堂久久一区二区三区| 欧美激情一区二区三区四区| 日韩视频永久免费| 欧美日韩精品电影| 在线免费一区三区| 91亚洲国产成人精品一区二三 | 亚洲日本在线a| 国产精品视频一二| 国产欧美一区二区精品久导航 | 欧美日韩一级二级| 色综合久久88色综合天天| 成人丝袜高跟foot| 成人午夜伦理影院| 成人一道本在线| 91在线视频网址| 在线观看欧美日本| 欧美日韩大陆在线| 精品国产精品一区二区夜夜嗨| 7777精品伊人久久久大香线蕉超级流畅| 在线观看国产一区二区| 91久久精品网| 91精品国产丝袜白色高跟鞋| 日韩欧美激情在线| 精品99999| 亚洲丝袜自拍清纯另类| 亚瑟在线精品视频| 麻豆国产精品777777在线| 国产99久久久国产精品潘金| 91蝌蚪porny| 日韩一区二区三区在线观看| 国产丝袜欧美中文另类| 日韩一区二区在线看片| 91香蕉视频在线| 日韩一二在线观看| 国产精品久久久久三级| 亚洲美女一区二区三区| 麻豆久久久久久| 另类综合日韩欧美亚洲| 成人免费视频在线观看| 91麻豆精品91久久久久久清纯 | 日本精品视频一区二区| 七七婷婷婷婷精品国产| 中文字幕日韩欧美一区二区三区| 欧美性三三影院| 国产 日韩 欧美大片| 图片区日韩欧美亚洲| 国产精品日韩精品欧美在线| 制服.丝袜.亚洲.另类.中文| 成人av资源在线| 国产成人免费在线视频| 日本在线播放一区二区三区| 亚洲卡通欧美制服中文| 国产精品污网站| 久久只精品国产| 日韩欧美国产高清| 欧美麻豆精品久久久久久| 色婷婷久久99综合精品jk白丝| 国产一区二区三区国产| 久久黄色级2电影| 日韩电影一区二区三区| 亚洲第一成年网| 调教+趴+乳夹+国产+精品| 亚洲永久精品大片| 亚洲欧美日本在线| 亚洲一区二区三区中文字幕| 亚洲女同ⅹxx女同tv| 最新成人av在线| 亚洲国产精品久久不卡毛片| 亚洲综合久久久久| 午夜天堂影视香蕉久久| 亚洲h动漫在线| 麻豆91在线播放免费| 国产乱色国产精品免费视频| 国产成人在线看| 91免费视频网址| 欧美一区二区三区免费观看视频| 日韩欧美国产系列| 国产精品久久三区| 天堂午夜影视日韩欧美一区二区| 蜜臀99久久精品久久久久久软件| 精品伊人久久久久7777人| 国内精品免费**视频| 欧美中文字幕一区| 久久久影院官网| 三级成人在线视频| 成人在线视频一区二区| 欧美影院精品一区|