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

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

?? mp3player2_c.txt

?? 在高檔AVR單片機ATmega8上實現MP3播放功能
?? TXT
?? 第 1 頁 / 共 3 頁
字號:

	if (BattVolt < BATT_SHUTDOWN){
		sbi(PORTB, SPI_CS);		// SPI CS=H
		beep(4, BEEP_LOW);
		cli();	// 充哈み敦賄
		if (RunningTimeH){
			write_eeprom(EEPROM_RUNNING_TIME_OLD_M, RunningTimeM);
			write_eeprom(EEPROM_RUNNING_TIME_OLD_H, RunningTimeH);
			RunningTimeM = 0;
			RunningTimeH = 0;
		}

		shutdown(0);	// シャットダウン
	}

	return BattVolt;
}


//*********************************************************
//	シャットダウン
//	flag != 0 の眷圭は EEPROM今き哈みを乖わずに排富を磊る
//*********************************************************
void shutdown(char flag){

	cli();	// 充哈み敦賄
	sbi(PORTB, SPI_CS);		// SPI CS=H
	cbi(PORTB, MUTE);		// 不蘭ミュ〖ト
	MP3_command(0, 0x0010);	// VS1001k powerdown
	if (!flag){
		write_eeprom(EEPROM_VOLUME, Volume);
		write_eeprom(EEPROM_MUSIC, PlayMusic);
		write_eeprom(EEPROM_CLUSTER_L, Cluster);
		write_eeprom(EEPROM_CLUSTER_H, Cluster>>8);
		write_eeprom(EEPROM_REMAIN1, RemainSec);
		write_eeprom(EEPROM_REMAIN2, RemainSec>>8);
		write_eeprom(EEPROM_REMAIN3, RemainSec>>16);
		write_eeprom(EEPROM_SIZE1, MusicSize);
		write_eeprom(EEPROM_SIZE2, MusicSize>>8);
		write_eeprom(EEPROM_SIZE3, MusicSize>>16);
		write_eeprom(EEPROM_SIZE4, MusicSize>>24);
		write_eeprom(EEPROM_RUNNING_TIME_M, RunningTimeM);
		write_eeprom(EEPROM_RUNNING_TIME_H, RunningTimeH);
	}
	for(;;){				// 痰嘎ル〖プ
		cbi(PORTC, POWER);	// Power down
		WDR;
		SLEEP;
	}
}


//*******************************************************
//	EEPROM 今き哈み
//*******************************************************
void write_eeprom(uchar adrs, uchar data){

	// 票じ柒推なら今き哈み瓢侯を乖わない
	if (read_eeprom(adrs) != data){
		while(inp(EECR) & (1<<EEWE));
		outp(adrs >> 8, EEARH);
		outp(adrs, EEARL);
		outp(data, EEDR);
		sbi(EECR, EEMWE);
		sbi(EECR, EEWE);
	}
}


//*******************************************************
//	EEPROM 粕み哈み
//*******************************************************
uchar read_eeprom(uchar adrs){

	while(inp(EECR) & (1<<EEWE));
	outp(adrs >> 8, EEARH);
	outp(adrs, EEARL);
	sbi(EECR, EERE);
	return inp(EEDR);
}


//****************************************
//	BEEP
//	苞眶¨	n	棠瓢攙眶
//			err	!= 0 ならエラ〖不(你い不)
//	充り哈み釣材にすることに廟罷
//****************************************
void beep(uchar n, char err){
	char	i;

	cli();	// MP3_init()借妄面に不翁拇淚されたら氦るので充哈み敦賄
	MP3_init();
	sei();	// 充り哈み釣材
	for (; n > 0; --n){
		if (err){
			MP3_sin(ErrorBeep);
		} else {
			MP3_sin(BeepData);
		}

		// 箕粗略ち。この粗が BEEPの不の墓さになる
		for (i=0; i < 10*2; i++){	// 腆100ms
			SLEEP;
		}

		MP3_sin(BeepStop);
	
		// BEEPの不粗
		for (i=0; i < 3*2; i++){	// 腆30ms
			SLEEP;
		}
	}

	MP3_sin(BeepStop);	// 箕」賄まらないことがあるのでもう辦攙
}


//****************************************
//	EasyMP3 介袋步
//****************************************
void MP3_init(void){

	MP3_command(0, 0x0004);			// Soft Reset
	InitWait();
	MP3_command(0, 0x0000);
	while(!(inp(PIND)&(1<<MP3_DREQ)));

	MP3_command(11, ((uint)Volume << 8)|((uint)Volume));	// 不翁肋年
	MP3_command(3, 0x8000 + (uint)((VS1001_CLOCK)/2000));		// Clock
	InitWait();
}


//****************************************
//	EasyMP3 テスト脫賴腹僑叫蝸
//****************************************
void MP3_sin(PGM_VOID_P data){
	uchar	i;
	uchar	bit;
	uchar	c;

	for (i=0; i < 8; i++){
		c = (uchar)PRG_RDB(data++);
		sbi(PORTD, MP3_BSYNC);
		for (bit=0; bit<8; bit++){
			if (c & 0x80){
				sbi(PORTD, MP3_SI);
			} else {
				cbi(PORTD, MP3_SI);
			}
			sbi(PORTD, MP3_DCLK);
			c <<= 1;
			cbi(PORTD, MP3_DCLK);
			cbi(PORTD, MP3_BSYNC);
		}
		sbi(PORTD, MP3_SI);
	}
}


//****************************************
//	EasyMP3 コマンド叫蝸
//****************************************
void MP3_command(uchar addr, uint arg){

	cbi(PORTD, MP3_CS);
	MP3_com_write(2);
	MP3_com_write(addr);
	MP3_com_write(arg >> 8);
	MP3_com_write(arg);
	sbi(PORTD, MP3_CS);
}


//****************************************
//	EasyMP3 コマンド掐蝸	踏蝗脫
//****************************************
/*
uint MP3_command_read(uchar addr){
	char	i;
	uint	r = 0;

	cbi(PORTD, MP3_CS);
	MP3_com_write(3);
	MP3_com_write(addr);
	for(i=0; i<16; i++){
		sbi(PORTD, MP3_SCLK);
		r <<= 1;
		if (inp(PINB) & (1<<MP3_SO)){
			r |= 1;
		}
		cbi(PORTD, MP3_SCLK);
	}
	sbi(PORTD, MP3_CS);
	return r;
}
*/


//****************************************
//	EasyMP3 コマンド 1byte叫蝸
//****************************************
void MP3_com_write(uchar data){
	char	i;

	for (i=0; i<8; i++){
		if (data & 0x80){
			sbi(PORTD, MP3_SI);
		} else {
			cbi(PORTD, MP3_SI);
		}
		sbi(PORTD, MP3_SCLK);
		data <<= 1;
		cbi(PORTD, MP3_SCLK);
	}
	sbi(PORTD, MP3_SI);
}


//****************************************
//	MMC/SDカ〖ドから 32byteを粕んで DataBuffに呈羌
//****************************************
void read_32(ulong addr){
	uint		i, b;

	if (SPI_read_open(addr & 0xFFFFFE00))	return;
	b = (uint)addr & 0x01FF;
	for (i=0; i < 512; i++){
		if (i == b){
			int	n;
			for (n = 0; n < 32; n++){
				DataBuff[n] = SPI_in();
				i++;
			}
		} else {
			SPI_in();
		}
	}
	SPI_read_close();
}


//****************************************
//	介袋步箕のクロックウエイト
//****************************************
void InitWait(void){
	uchar	i;

	for(i=0; i< 255; i++){
		NOP;
	}
}


//****************************************
//	MMC/SDカ〖ド粕み哈みオ〖プン
//****************************************
uchar SPI_read_open(ulong adrs){
	uint	i;
	uchar	r;
	uchar	retry;

	// カ〖ドによってはリトライが澀妥のようだ
	for (retry = 0; retry < 100; retry++){
		cbi(PORTB, SPI_CS);		// SPI CS=L
		r = SPI_command(17, adrs);
		if (r == 0){
			for (i = 0; i < 2000; i++){	// ものすごく略つ眷圭がある
				r = SPI_in();
				if (r == 0xFE){
					return 0;	// 啪流倡幌マ〖ク
				}
			}
		} else if (r == 0xFE){
			return 0;	// 賴撅オ〖プン
		}
		sbi(PORTB, SPI_CS);		// SPI CS=H
		if (Debug){
			WriteHex(r);
			WriteCom(' ');
		}
//		InitWait();
	}

	return 1;	// オ〖プンできなかった
}


//****************************************
//	MMC/SDカ〖ド粕み哈みクロ〖ズ
//	1byteのずれがあっても丹にしない
//****************************************
void SPI_read_close(void){
	uint	i;

	SPI_in();	// CRC
	SPI_in();	// CRC
	// BUSYチェック
	for (i = 0; i < 1000; i++){
		if (SPI_in() == 0xFF)	break;
	}
	sbi(PORTB, SPI_CS);		// SPI CS=H
}


//****************************************
//	MMC/SD SPIコマンド叫蝸
//****************************************
uchar SPI_command(uchar com, ulong arg){
	uint	i;
	uchar	r;

	// BUSYチェック 絲家のカ〖ドでは澀寇みたい
	for (i = 0; i < 1000; i++){
		r = SPI_in();
		if (r == 0xFF)	break;
	}
	if (r != 0xFF)	return 1;

	SPI_out(com|0x40);
	SPI_out(arg >> 24);
	SPI_out(arg >> 16);
	SPI_out(arg >> 8);
	SPI_out(arg);
	SPI_out(0x95);		// 介袋步コマンドのCRC

	for(i = 0; i < 1000; i++){
		r = SPI_in();
		if (r == 0xFE)		break;
		if (!(r & 0x80))	break;
	}
	return r;
}


//****************************************
//	MMC/SD SPIデ〖タ叫蝸
//****************************************
void SPI_out(uchar data){

	outp(data, SPDR);
	while(!(inp(SPSR) & 0x80));
}


//****************************************
//	MMC/SD SPIデ〖タ掐蝸
//****************************************
uchar SPI_in(void){

	outp(0xFF, SPDR);
	while(!(inp(SPSR) & 0x80));
	return inp(SPDR);
}


//****************************************
//	MMC/SD SPIクロック姜位略ち
//	SPDRをアクセスしてない眷圭は
//	SPIF=0になって痰嘎ル〖プする眷圭があることに廟罷
//****************************************
void SPI_wait(void){
	while(!(inp(SPSR) & 0x80));
}	


//****************************************
//	1セクタ〖粕み哈んで山績する
//****************************************
void print_sector(ulong sec){
	uchar	r;
	int		i;

	sec *= 512; 
	r = SPI_read_open(sec);
	WriteHex(r);
	WriteCom('\n');
	for (i=0; i<512; i++){
		r = SPI_in();
		WriteHex(r);
		if ((i & 31) == 31){
			WriteCom('\n');
		} else if (i & 1){
			WriteCom(' ');
		}
	}
	SPI_read_close();
}


//****************************************
//	シリアル掐蝸。掐蝸があるまで略つ
//****************************************
uchar	ReadCom(void){

	do {
		WDR;
	} while(!(inp(UCSRA)&(1<<RXC)));
	return inp(UDR);
}

//****************************************
//	シリアル叫蝸
//****************************************
void WriteCom(uchar data){

	do {
		;
	} while(!(inp(UCSRA)&(1<<UDRE)));
	outp(data, UDR);
}


//****************************************
//	1byteを16渴眶で山績
//****************************************
void WriteHex(uchar data){
	uchar	c;

	c = (data>>4) + '0';
	if (c > '9'){	c += 7; }
	WriteCom(c);

	c = (data & 0x0f) + '0';
	if (c > '9'){	c += 7; }
	WriteCom(c);
}


//****************************************
//	intを 10渴矢機誤恃垂
//****************************************
/*
void ItoStr(uint i, uchar str[]){
	char	*p;

	if (i >= 10000){
		p = &str[5];
	} else if (i >= 1000){
		p = &str[4];
	} else if (i >= 100){
		p = &str[3];
	} else if (i >= 10){
		p = &str[2];
	} else {
		p = &str[1];
	}
	*p-- = 0;

	do {
		*p-- = (i % 10) + '0';
		i /= 10;
	} while(i);
}
*/


//****************************************
//	蓋年矢機誤叫蝸
//	蝗脫毋¨
//		char *s;
//		s = PSTR("Message OK.\n");
//		WriteComMsg(s);
//****************************************
void WriteComMsg(PGM_VOID_P msg){
	char	i;
	uchar	c;

	i = 0;
	while((c = (uchar)PRG_RDB(msg++)) != 0){
		WriteCom(c);
		i++;
	}
}

//****************************************
//	バッファ矢機誤叫蝸
//****************************************
void WriteComStr(uchar *msg){
	char	i;
	uchar	c;

	i = 0;
	while((c = (uchar)(*msg++)) != 0){
		WriteCom(c);
		i++;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产系列| 国产精品久久久久影院亚瑟 | 欧美性大战久久久| 欧美mv和日韩mv国产网站| 综合久久综合久久| 麻豆91精品视频| 欧美日韩精品免费观看视频| 中文字幕在线一区二区三区| 久久9热精品视频| 欧美精品一二三区| 亚洲精品视频免费看| 国产盗摄视频一区二区三区| 日韩一级大片在线观看| 亚洲图片欧美色图| 色综合天天综合网天天狠天天| 国产亚洲成av人在线观看导航 | 中文字幕在线不卡一区二区三区| 久久国产精品色| 欧美一二三区精品| 日本女优在线视频一区二区| 欧美伊人久久久久久午夜久久久久| 日本一区二区三区视频视频| 国产在线精品一区二区夜色| 日韩一区二区三区四区五区六区| 亚洲国产日产av| 欧美亚洲一区三区| 亚洲一线二线三线久久久| 色婷婷久久久亚洲一区二区三区| 国产精品女同一区二区三区| 成人夜色视频网站在线观看| 中文字幕免费一区| 成人h动漫精品| 中文字幕日本不卡| 成人理论电影网| 亚洲三级电影网站| 91国偷自产一区二区开放时间| 亚洲人精品一区| 欧美在线视频日韩| 尤物在线观看一区| 欧美日韩精品一区二区三区四区 | 欧美久久一区二区| 日本欧美一区二区在线观看| 日韩欧美国产wwwww| 国产乱码字幕精品高清av| 久久精品亚洲乱码伦伦中文 | 欧美肥胖老妇做爰| 日韩高清不卡一区二区| 欧美成人一级视频| 成人午夜视频在线| 一级做a爱片久久| 欧美日本在线观看| 极品美女销魂一区二区三区免费| 久久久精品欧美丰满| www.色精品| 亚洲va欧美va人人爽午夜| 欧美一区二区视频在线观看2020| 久久99国产精品免费网站| 国产精品视频线看| 欧美老女人在线| 国产成人在线观看| 亚洲午夜私人影院| 久久久久久久综合日本| 91日韩精品一区| 午夜一区二区三区视频| 2021久久国产精品不只是精品| 成人黄动漫网站免费app| 日韩一区二区三区免费看| 日韩亚洲欧美综合| 国产成人亚洲综合色影视| 亚洲精选视频免费看| 日韩视频免费观看高清完整版| 国产剧情av麻豆香蕉精品| 亚洲美女屁股眼交3| 日韩免费高清视频| 欧美午夜一区二区三区| 国产一区视频网站| 亚洲国产精品久久不卡毛片 | 波多野结衣欧美| 日本va欧美va瓶| 亚洲视频综合在线| 久久亚洲综合色一区二区三区| 色哟哟一区二区在线观看| 韩国欧美一区二区| 天天色天天操综合| 亚洲欧美色综合| 国产欧美一区二区三区沐欲 | 在线亚洲精品福利网址导航| 国内精品自线一区二区三区视频| 艳妇臀荡乳欲伦亚洲一区| 久久精品水蜜桃av综合天堂| 欧美精品1区2区3区| 色哟哟一区二区三区| 成人午夜激情在线| 国内一区二区在线| 日韩不卡一二三区| 亚洲成人在线免费| 亚洲激情图片qvod| 国产精品网站在线观看| 久久蜜桃av一区二区天堂| 欧美一二三四区在线| 91精品欧美一区二区三区综合在| 色婷婷亚洲一区二区三区| av电影天堂一区二区在线观看| 国产成人精品综合在线观看| 极品美女销魂一区二区三区免费| 蜜臀久久99精品久久久久宅男| 亚洲第一主播视频| 亚洲国产美国国产综合一区二区| 亚洲男人的天堂在线aⅴ视频| 日本一区二区三区在线观看| 久久精品免视看| 国产日韩欧美电影| 国产精品天天摸av网| 久久精品欧美一区二区三区麻豆| 久久亚洲影视婷婷| 久久精品亚洲精品国产欧美 | 亚洲电影激情视频网站| 亚洲午夜电影网| 亚洲国产wwwccc36天堂| 亚洲妇熟xx妇色黄| 日韩制服丝袜av| 久久99九九99精品| 国产91丝袜在线播放0| 不卡一区二区三区四区| 99久久免费精品| 欧美亚洲国产怡红院影院| 欧美精品免费视频| 26uuuu精品一区二区| 国产午夜久久久久| 亚洲区小说区图片区qvod| 亚洲综合免费观看高清完整版在线 | 成人av资源在线| 91麻豆免费观看| 欧美色视频一区| 欧美大片在线观看| 国产精品日日摸夜夜摸av| 亚洲欧洲美洲综合色网| 亚洲一区二区av在线| 秋霞成人午夜伦在线观看| 国产在线一区二区| 99国产精品国产精品久久| 欧美日韩精品一区二区天天拍小说 | 欧美一区二区三区不卡| 精品国产伦一区二区三区观看体验| 久久精品一二三| 一区二区不卡在线播放| 麻豆国产精品一区二区三区| 菠萝蜜视频在线观看一区| 欧美日韩夫妻久久| 久久久另类综合| 亚洲国产精品精华液网站| 精品系列免费在线观看| 99国产精品国产精品毛片| 日韩精品一区国产麻豆| 国产精品久久午夜夜伦鲁鲁| 天堂久久久久va久久久久| 成人白浆超碰人人人人| 欧美性感一区二区三区| 久久一二三国产| 五月开心婷婷久久| 99re热视频精品| 欧美精品一区二区三区在线| 一区二区三区在线影院| 国产精品99久久久久久有的能看| 欧美日韩综合在线| 国产人成亚洲第一网站在线播放| 丝袜美腿亚洲一区| 91色视频在线| 国产人伦精品一区二区| 麻豆精品视频在线观看免费| 日本韩国欧美一区二区三区| 国产日韩欧美精品在线| 蜜臀久久99精品久久久画质超高清| 99视频精品在线| 国产午夜精品久久| 免费在线观看一区| 欧美日韩精品欧美日韩精品一| 日韩毛片在线免费观看| 国产一区二区精品在线观看| 日韩亚洲欧美在线观看| 亚洲国产一二三| 色综合久久中文字幕| 中文久久乱码一区二区| 国产精品一区二区在线播放| 欧美一区二区福利视频| 午夜精品久久一牛影视| 91精品办公室少妇高潮对白| 亚洲色图另类专区| 91一区二区在线| 中文字幕av在线一区二区三区| 国产一区二区三区在线观看精品| 91麻豆精品国产91久久久久久| 亚洲午夜免费视频| 欧美三级视频在线| 亚洲超碰精品一区二区| 在线观看91视频| 亚洲成人福利片| 欧美日韩日本视频| 日韩不卡免费视频| 日韩欧美国产电影|