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

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

?? mp3.c

?? AVR+CH375+VS1003
?? C
?? 第 1 頁 / 共 3 頁
字號:
		uint32 start_cluster;
		uint32 current_cluster;
		uint8 current_sector;
		uint16 current_index;
	}
	[8]struct s_directory_node directory_node;
	uint8 current_level;
	
	//硬盤參數
	uint32 disk_sector_size;	//硬盤總空間(單位扇區)
	
	uint16 sector_byte_size;	//每扇區字節數
	uint8 cluster_sector_size;	//每簇的扇區數
	uint8 FAT_number;			//FAT表數目
	uint32 FAT_sector_size;		//每個FAT表占據的扇區數
	
	uint32 FAT1_start_sector;	//FAT1起始扇區號
	uint32 FAT2_start_sector;	//FAT2起始扇區號
	uint32 cluster_start_sector;	//數據簇的起始扇區號
	
	public [512]uint8 buffer;
	public bool is_ok;
}
//*******************************************************
//當前項信息
unit selected_item
{
	//當前項的信息
	public uint8 type;
	public bool is_out;	//是否在有效項目之外
	public bool is_delete;	//是否已被刪除
	public bool is_system_dir;//是否系統目錄項(以句號開始)
	public bool is_long_name;//是否長文件名
	public bool is_file;	//是否為文件
	public bool is_directory;//是否為目錄
	public [9]uint8 base_name;
	public [4]uint8 extend_name;
	public uint8 attribute;
	public uint32 start_cluster;
	public uint32 length;
	
	//文件屬性常量, 用相與非零表示表示對應屬性為真
	public const uint8 READ_ONLY = 0b0000_0001;
	public const uint8 HIDDEN = 0b0000_0010;
	public const uint8 SYSTEM = 0b0000_0100;
	public const uint8 DISK = 0b0000_1000;
	public const uint8 DIRECTORY = 0b0001_0000;
	public const uint8 FILE = 0b0010_0000;
	
	//項目類型常量
	public const uint8 NULL = 0x00;
	public const uint8 DELETE = 0xe5;
	public const uint8 SYSTEM_DIR = '.';
}
//*******************************************************
//SD卡元件類
unit SD_card
{
	//=================================================
	//初始化
	public void init()
	{
		CS_ddr = high;
		CS_port = high;
		
		SCLK_ddr = high;
		SCLK_port = low;
		
		SD_DI_ddr = high;
		SD_DI_port = high;
		
		SD_DO_ddr = low;
		SD_DO_port = high;
		
		null_clock();
	}
	//=================================================
	//sd卡復位
	public bool reset()
	{
		uint8 retry = 0;
		uint8 r1;
		
		do {
			null_clock();
			r1 = write_command( 0, 0 );//發idle命令
			++retry;
			if( retry > 250 ) return false;//超時退出
		}
		while( r1 != 0x01 );
		
		retry = 0;
		do {
			null_clock();
			//r1 = write_command( 1, 0 );//發active命令
			r1 = write_command( 55, 0 );//發active命令
			r1 = write_command( 41, 0 );//發active命令
			++retry;
			if( retry > 250 ) {
				return false;//超時退出
			}
		}
		while( r1 != 0x00 );
		r1 = write_command( 59, 0 );//關crc
		r1 = write_command( 16, 512 );//設扇區大小512
		
		return true;//正常返回
	}
	//=================================================
	//讀一個扇區
	public bool read_block( uint32 sector, *uint8 buffer )
	{
		uint8 r1 = write_command( 17, sector << 9 );//讀命令
		if( r1 != 0x00 ) {
			return false;
		}
		CS_port = low;
		
		//等數據的開始
		while( read_byte() != 0xfe ) {}
		
//		for( uint16 i = 0; i < 512; ++i ) {
//			buffer[i] = read_byte();
//		}
		*uint8 p = buffer;
		loop( 250 ) {
			*p = read_byte();
			++p;
		}
		loop( 250 ) {
			*p = read_byte();
			++p;
		}
		loop( 12 ) {
			*p = read_byte();
			++p;
		}
		r1 = read_byte();//偽crc
		r1 = read_byte();
		
		CS_port = high;
		return true;
	}
	//=================================================
	//寫一個扇區
	public bool write_block( uint32 sector, *uint8 buffer )
	{
		uint8 r1 = write_command( 24, sector << 9 );//寫命令
		if( r1 != 0x00 ) {
			return false;
		}
		CS_port = low;
		null_clock();
		
		write_byte( 0xfe );	//發開始符
		for( uint16 i = 0; i < 512; ++i ) {
			write_byte( buffer[i] );
		}
		write_byte( 0xff );	//偽CRC
		write_byte( 0xff );
		
		//判斷是否成功
		if( read_byte() & 0x1f != 0x05 ) {
			CS_port = high;
			return false;
		}
		//等待操作完
		while( read_byte() == 0 ) {}
		
		CS_port = high;
		return true;
	}
	//=================================================
	//sd卡寫命令
	uint8 write_command( uint8 cmd, uint32 arg )
	{		
		write_byte( 0xff );
		CS_port = low;
		
		write_byte( cmd | 0x40 );//分別寫入命令
		write_byte( arg.24[uint8] );
		write_byte( arg.16[uint8] );
		write_byte( arg.8[uint8] );
		write_byte( arg.0[uint8] );
		write_byte( 0x95 );
		
		uint8 r1;
		uint8 retry = 0;
		do {
			++retry;
			r1 = read_byte();
		}
		while( r1 == 0xff && retry < 100 );	//等待響應,
		
		CS_port = high;
		return r1;
	}
	//=================================================
	//空時鐘函數
	void null_clock()
	{
		loop( 100 ) {
			SCLK_port = high;
			SCLK_port = low;
		}
	}
	//=================================================
	//寫一個字節
	void write_byte( uint8 data )
	{
		loop( 8 ) {
			SD_DI_port = data.7;
			SCLK_port = high;
			SCLK_port = low;
			data <<= 1;
		}
	}
	//=================================================
	//讀一個字節
	uint8 read_byte()
	{
		SD_DI_port = high;
		uint8 data;
		loop( 8 ) {
			data <<= 1;
			SCLK_port = high;
			data.0 = SD_DO_pin;
			SCLK_port = low;
		}
		return data;
	}
	//=================================================
	bit SD_DO_port = @SD_card_config.SD_DO_port;
	bit SD_DO_pin = @SD_card_config.SD_DO_pin;
	bit SD_DO_ddr = @SD_card_config.SD_DO_ddr;
	
	bit SCLK_port = @SD_card_config.SCLK_port;
	//bit SCLK_pin = @SD_card_config.SCLK_pin;
	bit SCLK_ddr = @SD_card_config.SCLK_ddr;
	
	bit SD_DI_port = @SD_card_config.SD_DI_port;
	//bit SD_DI_pin =@ SD_card_config.bit SD_DI_pin;
	bit SD_DI_ddr = @SD_card_config.SD_DI_ddr;
	
	bit CS_port = @SD_card_config.CS_port;
	//bit CS_pin = @SD_card_config.CS_pin;
	bit CS_ddr = @SD_card_config.CS_ddr;
}
//*******************************************************
//VS1003B MP3解碼器
unit vs1003b
{
	//初始化
	public void init()
	{
		//spi初始化
		vs_spi.init();
		
		XDCS_ddr = high;
		XDCS_port = high;
		
		XCS_ddr = high;
		XCS_port = high;
		
		XRESET_ddr = high;
		XRESET_port = high;
		
		DREQ_ddr = low;
		
		//硬件復位
		XRESET_port = low;
		time.delay_10ms( 10 );
		XRESET_port = high;
		time.delay_10ms( 10 );
		
		//寫mode寄存器
		set( 0x00, 0x0800 );
		//寫時鐘寄存器
		set( 0x03, 0xc000 );
		//設音量
		set( 0x0b, 0x2828 );
	}
	//寫數據,音樂數據
	public void write_byte_data( uint8 data )
	{
		XDCS_port = low;
		vs_spi.write_byte( data );
		XDCS_port = high;
	}
	//寫數據,音樂數據
	public void write_buffer_data( *uint8 p )
	{
		XDCS_port = low;
		loop( 32 ) {
			uint8 data = *p;
			vs_spi.write_byte( data );
			++p;
		}
		XDCS_port = high;
	}
	//判斷解碼芯片是否忙
	public bool is_busy()
	{
		return DREQ_pin == low;
	}
	//正弦波測試
	public void test_sin()
	{
		set( 0x00, 0x0820 );
		while( DREQ_pin == low ) {}
		forever {
			write_byte_data( 0x53 );
			write_byte_data( 0xEF );
			write_byte_data( 0x6E );
			write_byte_data( 0x30 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			led.flash( 1 );
			
			write_byte_data( 0x45 );
			write_byte_data( 0x78 );
			write_byte_data( 0x69 );
			write_byte_data( 0x74 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			write_byte_data( 0x00 );
			led.flash( 1 );
		}
	}
	//寫寄存器,參數,地址和數據
	void set( uint8 addr, uint16 data )
	{
		XCS_port = low;
		vs_spi.write_byte( 0x02 );
		vs_spi.write_byte( addr );
		vs_spi.write_byte( data.8[uint8] );
		vs_spi.write_byte( data.0[uint8] );
		XCS_port = high;
	}
	
	//讀寄存器,參數 地址 返回內容
	uint16 get( uint8 addr )
	{
		XCS_port = low;
		vs_spi.write_byte( 0x03 );
		vs_spi.write_byte( addr );
		uint16 result;
		result.8[uint8] = vs_spi.read_byte();
		result.0[uint8] = vs_spi.read_byte();
		XCS_port = high;
		return result;
	}
	
	bit XDCS_port = @sfr.PORTC.5;
	bit XDCS_ddr = @sfr.DDRC.5;
	
	bit XCS_port = @sfr.PORTC.4;
	bit XCS_ddr = @sfr.DDRC.4;
	
	bit XRESET_port = @sfr.PORTA.7;
	bit XRESET_ddr = @sfr.DDRA.7;
	
	bit DREQ_pin = @sfr.PINC.6;
	bit DREQ_ddr = @sfr.DDRC.6;
}
//*******************************************************
//SPI串行接口元件,高位在前,低位在后
unit vs_spi
{
	//初始化
	public void init()
	{
		SCK_ddr = high;
		SCK_port = low;
		
		MOSI_ddr = high;
		MOSI_port = low;
		
		MISO_ddr = low;
	}
	//寫一個字節
	public void write_byte( uint8 data )
	{
		loop( 8 ) {
			MOSI_port = data.7;
			SCK_port = high;
			SCK_port = low;
			data <<= 1;
		}
	}
	//讀一個字節
	public uint8 read_byte()
	{
		MOSI_port = low;
		uint8 data;
		loop( 8 ) {
			data <<= 1;
			SCK_port = high;
			data.0 = MISO_pin;
			SCK_port = low;
		}
		return data;
	}
	
	bit SCK_port = @sfr.PORTA.4;  //時鐘線
	bit SCK_ddr = @sfr.DDRA.4;
	
	bit MISO_pin = @sfr.PINA.6; //讀數據端口
	bit MISO_ddr = @sfr.PINA.6;
	
	bit MOSI_port = @sfr.PORTA.5; //寫數據端口
	bit MOSI_ddr = @sfr.DDRA.5;
}
//*******************************************************
//延時類
unit time
{
	//延時1ms
	//public void delay_1ms( uint8 data )
	
	//延時10ms
	public void delay_10ms( uint8 data )
	{
		loop( data ) loop( 40 ) loop( 250 ) {}
	}
	//延時100ms

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片在线| 成人晚上爱看视频| 成人91在线观看| 欧美日产国产精品| 国产精品午夜春色av| 青青草国产成人99久久| 色一情一伦一子一伦一区| 精品国产凹凸成av人网站| 亚洲国产视频直播| 97se狠狠狠综合亚洲狠狠| 久久奇米777| 开心九九激情九九欧美日韩精美视频电影| av亚洲产国偷v产偷v自拍| 欧美精品一区二| 人人狠狠综合久久亚洲| 欧美天堂亚洲电影院在线播放| 国产免费观看久久| 国产一区二区三区视频在线播放| 91精品久久久久久久久99蜜臂| 亚洲自拍偷拍欧美| 色偷偷久久人人79超碰人人澡| 中文字幕第一区第二区| 国产成人欧美日韩在线电影| 精品国产乱码久久久久久闺蜜| 日日欢夜夜爽一区| 欧美日韩美少妇| 午夜免费久久看| 欧美疯狂性受xxxxx喷水图片| 亚洲一区视频在线观看视频| 91成人在线免费观看| 亚洲综合久久久| 欧美日韩国产天堂| 日韩二区在线观看| 欧美一区二区三区免费大片 | 国产在线视频不卡二| 日韩欧美激情四射| 久久99久久精品欧美| 欧美大片拔萝卜| 九一九一国产精品| 久久精品一区二区三区不卡牛牛 | 国产美女一区二区三区| 久久综合色婷婷| 成人免费视频视频在线观看免费| 国产精品美女久久福利网站| 91小视频在线观看| 午夜精品福利一区二区蜜股av| 制服.丝袜.亚洲.中文.综合| 欧美aⅴ一区二区三区视频| 日韩免费在线观看| 成人精品视频一区二区三区尤物| 成人免费在线视频| 欧美日本在线视频| 国产一区二区三区久久悠悠色av| 国产精品私人自拍| 欧美日韩视频专区在线播放| 韩日欧美一区二区三区| 亚洲欧洲一区二区在线播放| 欧美日韩亚洲高清一区二区| 精品在线播放免费| 亚洲欧美日韩国产手机在线| 欧美日韩在线三区| 国产传媒欧美日韩成人| 亚洲欧美日韩电影| 欧美不卡视频一区| 91热门视频在线观看| 丝袜美腿亚洲一区二区图片| 久久久午夜精品| 欧美性三三影院| 国产成人一级电影| 亚洲午夜久久久久久久久电影院 | 成人av片在线观看| 日韩精品1区2区3区| 国产精品乱码人人做人人爱| 欧美日韩亚洲综合一区| 国产成人午夜99999| 丝袜美腿一区二区三区| 18欧美亚洲精品| 欧美精品一区二区三区久久久| 91在线观看污| 国产精品一区二区三区99 | 最新欧美精品一区二区三区| 日韩一区二区三区三四区视频在线观看| 国产精品69久久久久水密桃| 五月婷婷欧美视频| 亚洲精品乱码久久久久久日本蜜臀| 精品国一区二区三区| 欧美视频自拍偷拍| 97精品视频在线观看自产线路二| 免费观看在线综合| 午夜精品视频在线观看| 亚洲乱码中文字幕| 日本一二三不卡| 久久久久久久久99精品| 日韩女优视频免费观看| 欧美天堂一区二区三区| 色综合色综合色综合色综合色综合| 国产老妇另类xxxxx| 蜜臀久久久久久久| 日韩精品欧美精品| 亚洲成人福利片| 一个色在线综合| 亚洲欧洲综合另类| 亚洲色图一区二区三区| 国产精品久久久久影视| 国产精品久久久久久久久晋中| 国产三级久久久| 久久久精品欧美丰满| 日韩午夜精品电影| 26uuu久久天堂性欧美| 精品国产伦一区二区三区观看体验| 日韩一区二区三区视频| 日韩欧美色综合| 久久影院视频免费| 欧美国产国产综合| 国产精品久久夜| 亚洲最新在线观看| 天天综合天天综合色| 日韩电影免费在线| 麻豆国产一区二区| 国产专区欧美精品| 成人app网站| 一本大道久久a久久精二百| 欧美综合一区二区| 欧美蜜桃一区二区三区| 欧美一区二区视频在线观看| 日韩区在线观看| 国产三级精品在线| 伊人色综合久久天天| 亚洲国产精品天堂| 久久国产夜色精品鲁鲁99| 国产伦精一区二区三区| 91视频免费观看| 欧美日韩www| 欧美精品一区二区三区蜜臀| 中文字幕av一区 二区| 亚洲精品成人精品456| 肉丝袜脚交视频一区二区| 久久精品国产一区二区三区免费看 | 国产成人午夜高潮毛片| 99久久婷婷国产| 91麻豆精品国产91久久久 | 亚洲与欧洲av电影| 日本欧美加勒比视频| 丁香激情综合五月| 在线一区二区三区| 精品久久免费看| 一区二区欧美视频| 国产精品一区二区视频| 91福利视频久久久久| 精品播放一区二区| 亚洲精品欧美综合四区| 精品中文字幕一区二区小辣椒| 成人影视亚洲图片在线| 91 com成人网| 亚洲人午夜精品天堂一二香蕉| 人人狠狠综合久久亚洲| 99久久久久免费精品国产| 日韩精品一区二区三区在线| 综合分类小说区另类春色亚洲小说欧美| 午夜精品福利视频网站| jlzzjlzz亚洲日本少妇| 日韩一区二区三区av| 亚洲久草在线视频| 国产福利不卡视频| 91精品国产综合久久蜜臀| 亚洲欧美电影一区二区| 国产乱子伦视频一区二区三区 | 色婷婷av一区二区三区大白胸| 日韩免费看网站| 亚洲sss视频在线视频| a级高清视频欧美日韩| 精品国产人成亚洲区| 午夜影院在线观看欧美| 色综合一个色综合| 欧美国产日本韩| 国产高清不卡一区| 欧美精品一区二区在线播放| 日本vs亚洲vs韩国一区三区| 欧美日韩国产综合一区二区| 中文字幕亚洲精品在线观看| 国产不卡在线视频| 精品久久99ma| 激情久久久久久久久久久久久久久久| 欧美日本一道本在线视频| 依依成人精品视频| 色综合久久久久综合| 亚洲男人天堂av网| 一本一道久久a久久精品| 日韩理论片一区二区| 成人黄色免费短视频| 国产性做久久久久久| 国产成人欧美日韩在线电影| 久久免费美女视频| 国产成人a级片| 久久久99久久精品欧美| 国产精品一级黄| 亚洲国产精品99久久久久久久久| 国产一区在线不卡| 中文在线资源观看网站视频免费不卡| 国产精品影视网|