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

📄 01.htm

📁 硬盘MP3开发的所有源代码!整理自21ICBBS。 原作者xwj!
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            PLAY:{play();break;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//播放<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            USB: 
            {usb();break;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//USB下载<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}<BR>/////////////////////////////////////////////////////////////////////////////////////////<BR><BR><BR><BR><BR>/*file_system.c 
            file<BR>&nbsp;&nbsp;Created by Computer-lov. Date: 
            2005.3.19<BR>&nbsp;&nbsp;Last edited date: 
            2005.5.31<BR>&nbsp;&nbsp;Copyright (c) 2005 
            Computer-lov<BR>&nbsp;&nbsp;version 1.1<BR>*/<BR><BR>#include 
            "file_system.h"<BR>#include "IDE.H"<BR>#include 
            "hardware.h"<BR>#include "lcd.h"<BR>#include "mp3.h"<BR>#include 
            "keyboard.h"<BR><BR><BR>FILE xdata file;<BR>unsigned int 
            dir_length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件名长度<BR>unsigned int 
            folder_length;&nbsp;&nbsp;//文件夹名长度<BR><BR>////////////////////////////////////&nbsp;&nbsp;判断是否为一个 
            MP3 文件&nbsp;&nbsp;&nbsp;///////////////////////////////<BR>unsigned 
            char 
            is_a_mp3_file(void)<BR>{<BR>if((file.name[0]==0x00)||(file.name[0]==0xE5)||(file.name[0]=='.'))return 
            0;<BR>if(file.attribute==0x0F)return 
            0;&nbsp;&nbsp;//此项目为长文件名项目<BR>if(file.attribute &amp; 0x04)return 
            0;&nbsp;&nbsp;//此文件为系统文件<BR>if(file.attribute &amp; 0x08)return 
            0;&nbsp;&nbsp;//此项目为系统标卷<BR>if(file.attribute &amp; 0x10)return 
            0;&nbsp;&nbsp;//此项目为子目录<BR>if((file.name[8]=='M')&amp;&amp;(file.name[9]=='P')&amp;&amp;(file.name[10]=='3'))return 
            1;<BR>else return 
            0;<BR>}<BR>///////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>unsigned 
            long int LAST_FAT_LBA; 
            <BR>//最后一次读取FAT时的逻辑块地址,用来判断本次读取是否需要重新从硬盘中读取,以加快速度<BR>unsigned int 
            disp_count=0;<BR>unsigned char 
            disp_time;<BR><BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR>unsigned 
            long int 
            get_next_sector(void)&nbsp;&nbsp;//根据当前簇号,获取下一个扇区地址<BR>{<BR>unsigned 
            long int LBA;<BR>unsigned&nbsp;&nbsp;int 
            i;<BR>LBA=(file.next_cluster_number)/((dbr[driver_number].bytes_per_sectors)/4);&nbsp;&nbsp;//计算扇区地址<BR>i=(file.next_cluster_number)*4-LBA*dbr[driver_number].bytes_per_sectors; 
            //计算偏移地址<BR>if(LAST_FAT_LBA!=LBA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果数据不在FAT_buffer[]中,则需要重新读取<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;LAST_FAT_LBA=LBA;<BR>&nbsp;&nbsp;&nbsp;LBA=LBA+FAT_start_sector[driver_number];<BR>&nbsp;&nbsp;&nbsp;read_IDE_FAT_sector(LBA);<BR>&nbsp;&nbsp;}<BR>((unsigned 
            char 
            *)&amp;(file.next_cluster_number))[3]=FAT_buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(file.next_cluster_number))[2]=FAT_buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(file.next_cluster_number))[1]=FAT_buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(file.next_cluster_number))[0]=FAT_buffer[i];&nbsp;&nbsp;//获取下一簇号<BR>LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存簇号<BR>LBA=LBA*(dbr[0].sectors_per_cluster)+DATA_start_sector[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//转换成扇区地址<BR>// 
            IDE_LED=!IDE_LED;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//硬盘指示灯闪烁<BR>disp_time++;<BR>if(disp_time&gt;3)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;disp_time=0; 
            <BR>&nbsp;&nbsp;&nbsp;LCD_go_home();<BR>&nbsp;&nbsp;&nbsp;disp_count+=2;<BR>&nbsp;&nbsp;&nbsp;for(i=0;i&lt;14;i++)write_LCD_data(((unsigned 
            char 
            *)dir_name)[(i+disp_count)%(dir_length+4)]);<BR>&nbsp;&nbsp;}&nbsp;&nbsp;<BR>return 
            LBA;<BR>}<BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>/////////////////////////////////////////////////&nbsp;&nbsp;获取文件夹的下一扇区地址&nbsp;&nbsp;///////////////////<BR>unsigned 
            long int get_dir_next_sector(void)<BR>{<BR>unsigned long int 
            LBA,LBA2;<BR>unsigned int 
            i;<BR>LBA=current_dir.current_cluster_number-(dbr[driver_number].root_cluster_num);<BR>LBA=LBA*(dbr[driver_number].sectors_per_cluster)+DATA_start_sector[driver_number];<BR>LBA2=(current_dir.current_cluster_number)/((dbr[driver_number].bytes_per_sectors)/4);&nbsp;&nbsp;//计算扇区地址<BR>i=(current_dir.current_cluster_number)*4-LBA2*dbr[driver_number].bytes_per_sectors;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//计算偏移地址<BR>LBA2=LBA2+FAT_start_sector[driver_number];<BR>read_IDE_sector(LBA2);<BR>((unsigned 
            char 
            *)&amp;(current_dir.current_cluster_number))[3]=buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(current_dir.current_cluster_number))[2]=buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(current_dir.current_cluster_number))[1]=buffer[i];<BR>i++;<BR>((unsigned 
            char 
            *)&amp;(current_dir.current_cluster_number))[0]=buffer[i];&nbsp;&nbsp;//获取下一簇号<BR>return 
            LBA;<BR>}<BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR>void 
            get_nst_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取第n个MP3文件<BR>{<BR>unsigned 
            int i,j,k,temp_count;<BR>unsigned long int LBA;<BR>unsigned char 
            xdata 
            temp_buffer[32];<BR>disp_count=0;<BR>temp_count=0;<BR>current_dir.current_cluster_number=current_dir.first_cluster_number;<BR>do<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;LBA=get_dir_next_sector();<BR>&nbsp;&nbsp;&nbsp;for(i=0;i&lt;dbr[driver_number].sectors_per_cluster;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_IDE_sector(LBA);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt;dbr[driver_number].bytes_per_sectors/32;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j==15){for(k=0;k&lt;32;k++)temp_buffer[k]=buffer[k+512-32];}&nbsp;&nbsp;//如果已到最后一个项,则将之保存<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;11;k++)file.name[k]=buffer[j*32+k];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.attribute=buffer[j*32+11];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(is_a_mp3_file())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp_count==play_count)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.first_cluster_number))[0]=buffer[j*32+0x15];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.first_cluster_number))[1]=buffer[j*32+0x14];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.first_cluster_number))[2]=buffer[j*32+0x1B];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.first_cluster_number))[3]=buffer[j*32+0x1A];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.length))[3]=buffer[j*32+0x1C];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.length))[2]=buffer[j*32+0x1D];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.length))[1]=buffer[j*32+0x1E];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)&amp;(file.length))[0]=buffer[j*32+0x1F];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.next_cluster_number=file.first_cluster_number;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir_length=folder_length;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j==0){for(k=0;k&lt;32;k++)buffer[k+512-32]=temp_buffer[k];j=16;}&nbsp;&nbsp;//如果为第一项,则用刚刚保存的一项替换最后一项<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((buffer[j*32+11]==0x0F)&amp;&amp;(buffer[j*32]!=0xE5))&nbsp;&nbsp;//如果找到长目录,则用长目录名替换短目录名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;10;k++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x02+k];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+k];dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;12;k++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x0F+k];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x0D+k];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x1D];dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x1C];dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x1F];dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
            char 
            *)dir_name)[dir_length]=buffer[j*32+0x1E];dir_length++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=folder_length/2;k&lt;13+folder_length/2;k++){if((dir_name[k]==0x0000)||(dir_name[k]==0xFF00)||(dir_name[k]==0xFFFF))break;change_code(&amp;(dir_name[k]));}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir_length=folder_length+(k-folder_length/2)*2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;k&lt;100;k++)dir_name[k]=0x2020;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LBA++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}while((!(current_dir.current_cluster_number&gt;=0xFFFFFFF8))&amp;&amp;(LBA&lt;(dpt[driver_number].start_sector+dpt[driver_number].total_sectors))); 
            //直到文件夹结束<BR>play_count=1;status=STOP;<BR>}<BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR>void 
            get_pre_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开上一个MP3文件,文件信息保存在file结构中<BR>{<BR>if(play_count&gt;=2)play_count--;<BR>else 
            {file.next_cluster_number=file.first_cluster_number;return;} 
            //如果已到达该文件夹最前一个文件,则播放原文件<BR>get_nst_file();<BR>}<BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR>void 
            get_next_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开下一个MP3文件<BR>{<BR>play_count++;<BR>get_nst_file();<BR>}<BR>////////////////////////////////////////////////////////////////////////////////////////////////<BR><BR>DIR 
            xdata current_dir;<BR>unsigned int xdata 
            dir_name[200];<BR><BR>unsigned int xdata item_name[13];<BR>unsigned 
            int item_count;<BR>DIR xdata temp_dir;<BR><BR>unsigned char 
            file_or_folder;<BR><BR>////////////////////////////////////&nbsp;&nbsp;判断是否为一个文件夹&nbsp;&nbsp;&nbsp;///////////////////////////////<BR>unsigned 
            char 
            is_a_folder(void)<BR>{<BR>if((file.name[0]==0x00)||(file.name[0]==0xE5)||(file.name[0]=='.'))return 
            0;<BR>if(file.attribute==0x0F)return 
            0;&nbsp;&nbsp;//此项目为长文件名项目<BR>if(file.attribute &amp; 0x04)return 
            0;&nbsp;&nbsp;//此文件为系统文件<BR>if(file.attribute &amp; 0x08)return 
            0;&nbsp;&nbsp;//此项目为系统标卷<BR>if(file.attribute &amp; 0x10)return 

⌨️ 快捷键说明

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