📄 file_system.lst
字号:
C51 COMPILER V7.06 FILE_SYSTEM 03/02/2006 23:11:50 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FILE_SYSTEM
OBJECT MODULE PLACED IN file_system.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE file_system.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /************************************************************************************
2 本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
3
4 file_system.c file
5 Created by Computer-lov. Date: 2005.3.19
6 Last edited date: 2005.5.31
7 version 1.1
8 Copyright (c) 2005 Computer-lov
9 All rigths reserved
10 *************************************************************************************/
11
12 #include "file_system.h"
13 #include "IDE.H"
14 #include "hardware.h"
15 #include "lcd.h"
16 #include "mp3.h"
17 #include "keyboard.h"
18
19
20 FILE xdata file;
21 unsigned int dir_length; //文件名长度
22 unsigned int folder_length; //文件夹名长度
23
24 //////////////////////////////////// 判断是否为一个 MP3 文件 ///////////////////////////////
25 unsigned char is_a_mp3_file(void)
26 {
27 1 if((file.name[0]==0x00)||(file.name[0]==0xE5)||(file.name[0]=='.'))return 0;
28 1 if(file.attribute==0x0F)return 0; //此项目为长文件名项目
29 1 if(file.attribute & 0x04)return 0; //此文件为系统文件
30 1 if(file.attribute & 0x08)return 0; //此项目为系统标卷
31 1 if(file.attribute & 0x10)return 0; //此项目为子目录
32 1 if((file.name[8]=='M')&&(file.name[9]=='P')&&(file.name[10]=='3'))return 1;
33 1 else return 0;
34 1 }
35 ///////////////////////////////////////////////////////////////////////////////////////////////
36
37 unsigned long int LAST_FAT_LBA;
38 //最后一次读取FAT时的逻辑块地址,用来判断本次读取是否需要重新从硬盘中读取,以加快速度
39 unsigned int disp_count=0;
40 unsigned char disp_time;
41
42 ////////////////////////////////////////////////////////////////////////////////////////////////
43 unsigned long int get_next_sector(void) //根据当前簇号,获取下一个扇区地址
44 {
45 1 unsigned long int LBA;
46 1 unsigned int i;
47 1 LBA=(file.next_cluster_number)/((dbr[driver_number].bytes_per_sectors)/4); //计算扇区地址
48 1 i=(file.next_cluster_number)*4-LBA*dbr[driver_number].bytes_per_sectors; //计算偏移地址
49 1 if(LAST_FAT_LBA!=LBA) //如果数据不在FAT_buffer[]中,则需要重新读取
50 1 {
51 2 LAST_FAT_LBA=LBA;
52 2 LBA=LBA+FAT_start_sector[driver_number];
53 2 read_IDE_FAT_sector(LBA);
54 2 }
55 1 ((unsigned char *)&(file.next_cluster_number))[3]=FAT_buffer[i];
C51 COMPILER V7.06 FILE_SYSTEM 03/02/2006 23:11:50 PAGE 2
56 1 i++;
57 1 ((unsigned char *)&(file.next_cluster_number))[2]=FAT_buffer[i];
58 1 i++;
59 1 ((unsigned char *)&(file.next_cluster_number))[1]=FAT_buffer[i];
60 1 i++;
61 1 ((unsigned char *)&(file.next_cluster_number))[0]=FAT_buffer[i]; //获取下一簇号
62 1 LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num); //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -