⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat32.h

📁 51单片机SD卡TFT彩屏显示图片
💻 H
字号:
void fat32_init()
{
	u16 ii;
	u8 DPT[16];			//储存DPT数据所用数组,一个分区表16字节
	u8 BPB[90];			//储存BPB数据所用数组,DBR前90字节有效
	u32 DBR;		   	//计算DBR扇区
	u32 DBRBye;			//计算DBR扇区地址
	u16 Retain;			//计算保留扇区
	u32 Fat;			//计算Fat表扇区
	u32 OneFatBlock;    //一个Fat表的扇区数
	SD_ReadSingleBlock(0,buffer);
	if(buffer[0]!=0xeb)
	{
		for(ii=0;ii<16;ii++)
		{
			DPT[ii]=buffer[446+ii];
		}
		DBR=DPT[11]<<24|DPT[10]<<16|DPT[9]<<8|DPT[8];
		DBRBye=DBR*512;	
	}
	else
	{
		DBR=0;
	}
	SD_ReadSingleBlock(DBRBye,buffer);
	for(ii=0;ii<90;ii++)
	{
		BPB[ii]=buffer[ii];
	}
	Retain=BPB[15]<<8|BPB[14];
	Fat=DBR+Retain;
	OneFatBlock=BPB[39]<<24|BPB[38]<<16|BPB[37]<<8|BPB[36];
	FirstBlock=OneFatBlock*2+Fat;	
}

void music()
{
	u16 d,ii,bb,i=0,aa=0,jj=0,mm=0;   
	u8 cc[26];
	Show_Str(63,0,"找到的音乐文件",16,1);
	while(1)
	{
		SD_ReadSingleBlock(FirstBlock*512+i*512,buffer);
		i++;
		for(d=mm*32;d<512;d=d+32)
		{
			if(((buffer[0+d]!=0x2E)&&(buffer[0+d]!=0x00)&&(buffer[0+d]!=0xe5))||((buffer[0+d]==0x2E)&&(buffer[1+d]==0x2E)))
			{		   
				if(buffer[11+d] == 0x0f)//找到一个长文件名
				{	
					if(buffer[0+d]==0x42)
					{
						if(d<=447)mm=0;
						if(d>=448)mm=1;
						if(d>=480)mm=2;
						d+=64;
						goto rst;
					}
					for(ii=0;ii<10;ii++)				//提取前5个字符
					{
						cc[ii]=buffer[d+ii+1];
					}
					for(ii=0;ii<12;ii++)				//提取第6-12个字符
					{
						cc[ii+10]=buffer[d+ii+14];	
					}
					for(ii=0;ii<4;ii++)					//提取12-16个字符
					{
						cc[ii+22]=buffer[d+ii+28];
					}
					UniToGB(cc);
					for(ii=0;ii<26;ii++)				//提取长文件名中的mp3后缀,是mp3则显示出来
					{
						if(cc[ii]=='m')
						{
							if(cc[ii+1]=='p')
							{
								if(cc[ii+2]=='3')
								{
									cc[ii+3]=0;
									Show_Str(0,16+jj,cc,16,1);	
									jj+=16;						 //换行
									d+=32;
									for(ii=0;ii<32;ii++)
									{
										Music[aa*32+ii]=buffer[d+ii];
									}									
									aa++;						 //歌曲记数,每页显示15首
									if(aa==15)goto Break;		 //如果达到15首,退出循环
									goto rst;					 //退出检测
								}		
							}
						}	
					}	
				}
				else if(buffer[11+d] == 0x20)
				{
					for(ii=0;ii<8;ii++)				//提取文件名
					{
						cc[ii]=buffer[d+ii];
					}
					for(ii=0;ii<8;ii++)
					{
						if(cc[ii]==0x20)
						{
							bb=ii;
							goto asdf;
						}
						else
						{
							bb=8;
						}
					}
asdf:				cc[bb]='.';
					cc[bb+1]=buffer[d+8];
					cc[bb+2]=buffer[d+9];
					cc[bb+3]=buffer[d+10];
					cc[bb+4]=0x00;
					for(ii=0;ii<12;ii++)
					{
						if(cc[ii]=='M')
						{
							if(cc[ii+1]=='P')
							{
								if(cc[ii+2]=='3')
								{
									Show_Str(0,16+jj,cc,16,1);
									jj+=16;
									for(ii=0;ii<32;ii++)
									{
										Music[aa*32+ii]=buffer[d+ii];
									}									
									aa++;						 //歌曲记数,每页显示15首
									if(aa==15)goto Break;
									goto rst;
								}
							}
						}	
					}
				} 
			}
			else if(buffer[0+d]==0x00) 
			{
				goto Break;
			}
rst:				 
		}
	}
Break:			
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -