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

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

?? ide.c

?? 增加了USB下載文件功能;漢字LCD顯示功能;子文件夾功能等。并對軟件做了一些修改。 現在情況如下: 支持FAT32
?? C
字號:
/************************************************************************************
  本程序僅供廣大電子愛好者制作MP3學習和參考使用,不得用于其它用途,否則后果自負

   IDE.C File
   Created by Computer-lov. Date: 2005.3.19
   Last edited date: 2005.5.31
   version 1.1
   Copyright (c) 2005 Computer-lov
   All rigths reserved
**************************************************************************************/

#include "AT89C51SND1C.h"
#include "file_system.h"
#include "IDE.H"
#include "hardware.h"

#include "lcd.h"

unsigned char  DISK_CAPACITY[8];
unsigned char driver_number=0;             //磁盤驅動器

//////////////////////////////////////   IDE 狀態寄存器  ////////////////////////////////////
unsigned char bdata IDE_status;
sbit IDE_BSY  =  IDE_status^7;
sbit IDE_DRDY =  IDE_status^6;
sbit IDE_DWF  =  IDE_status^5;
sbit IDE_DSC  =  IDE_status^4;
sbit IDE_DRQ  =  IDE_status^3;
sbit IDE_CORR =  IDE_status^2;
sbit IDE_IDX  =  IDE_status^1;
sbit IDE_ERR  =  IDE_status^0;
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////   IDE 錯誤寄存器  ////////////////////////////////////
unsigned char bdata IDE_error_register;
sbit IDE_BBK  =   IDE_error_register^7;
sbit IDE_UNC  =   IDE_error_register^6;
sbit IDE_MC   =   IDE_error_register^5;
sbit IDE_IDNF =   IDE_error_register^4;
sbit IDE_MCR  =   IDE_error_register^3;
sbit IDE_ABRT =   IDE_error_register^2;
sbit IDE_TKONF=   IDE_error_register^1;
sbit IDE_AMNF =   IDE_error_register^0;
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
void delayXms(unsigned int x)   //延時x毫秒,時間不準的
{
 unsigned int i;
 for(;x>0;x--)
  for(i=0;i<500;i++);
}
//////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////   IDE 復位  ///////////////////////////////////////////////
void reset_IDE(void)
{
 IDE_Address=IDE_Reset;
 IDE_ALE=1;
 IDE_ALE=0;
 delayXms(200);
 IDE_Address=IDE_Bus_Not_Use;
 IDE_ALE=1;
 IDE_ALE=0;
 delayXms(200);
 while(!IDE_IORDY);
}
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////  讀IDE 16位,未用  ////////////////////////////////////////
/*void read_IDE_16(unsigned char address)
{
 while(!IDE_IORDY);
 IDE_Address=address;
 set_IDE_address();
 IDE_DATA_H=0xFF;
 IDE_DATA_L=0xFF;
 IDE_DIOR=0;
 IDE_Buffer_H=IDE_DATA_H;
 IDE_Buffer_L=IDE_DATA_L;
 IDE_DIOR=1;
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
}*/
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////  寫IDE 16位,未用  ////////////////////////////////////////
/*void write_IDE_16(unsigned char address)
{
 while(!IDE_IORDY);
 IDE_Address=address;
 set_IDE_address();
 IDE_DIOW=0;
 IDE_DATA_H=IDE_Buffer_H;
 IDE_DATA_L=IDE_Buffer_L;
 IDE_DIOW=1;
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
}*/
///////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////    讀IDE 低8位   /////////////////////////////////
unsigned char read_IDE_8(unsigned char address)
{
 unsigned char temp;
 while(!IDE_IORDY);
 IDE_Address=address;
 set_IDE_address();
 IDE_DATA_H=0xFF;
 IDE_DATA_L=0xFF;
 IDE_DIOR=0;
 temp=IDE_DATA_L;
 IDE_DIOR=1;
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
 return temp;
}
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////  寫IDE 低8位    /////////////////////////////////
void write_IDE_8(unsigned char address,unsigned char w_data)
{
 while(!IDE_IORDY);
 IDE_Address=address;
 set_IDE_address();
 IDE_DIOW=0;
 IDE_DATA_L=w_data;
 IDE_DIOW=1;
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
}
///////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////   從IDE讀一個字  //////////////////////////////////
/*void read_IDE_word(void)
{
 read_IDE_16(IDE_Data);
}*/
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////   往IDE寫一個字  ///////////////////////////////////
/*void write_IDE_word(void)
{
 write_IDE_16(IDE_Data);
}*/
///////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////   讀 IDE 狀態寄存器  /////////////////////////////////
void read_IDE_status(void)
{
 IDE_status=read_IDE_8(IDE_Status);  //結果保存在狀態寄存器中
}
///////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////    讀 IDE 錯誤寄存器 ///////////////////////////////////
void read_IDE_error(void)
{
 IDE_error_register=read_IDE_8(IDE_Error_Register);   //結果保存在錯誤寄存器中
}
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////     等待IDE    ///////////////////////////////////////////
unsigned char wait_IDE_busy(void)
{
 while(!IDE_IORDY);
 do
  {
   read_IDE_status();
   if(IDE_ERR)
   {
    read_IDE_error();
    LCD_go_home();
    prints("硬盤錯誤! ");
    printf(IDE_error_register);
   }
  }while(IDE_BSY);
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
 return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////    寫 IDE 命令  /////////////////////////////////////
void write_IDE_command(unsigned char command)
{
 write_IDE_8(IDE_Command,command);
 wait_IDE_busy();
}
///////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////   IDE 軟復位    /////////////////////////////////////
/*(void soft_reset_IDE(void)
{
 write_IDE_8(IDE_Device_Control,0xFD);
 wait_IDE_busy();
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////   寫IDE 邏輯塊地址LBA  //////////////////////////////
void write_IDE_LBA(unsigned long int _LBA)
{
 unsigned char LBA0;
 LBA0=((unsigned char *)&_LBA)[0];
 LBA0&=0x0F;
 LBA0|=0xE0;//磁盤0工作在LBA模式下
 write_IDE_8(IDE_LBA_Bits_24_27,LBA0);
 write_IDE_8(IDE_LBA_Bits_16_23,((unsigned char *)&_LBA)[1]);
 write_IDE_8(IDE_LBA_Bits_8_15,((unsigned char *)&_LBA)[2]);
 write_IDE_8(IDE_LBA_Bits_0_7,((unsigned char *)&_LBA)[3]);
}
///////////////////////////////////////////////////////////////////////////////////////////////

unsigned char xdata buffer[512];  //扇區緩沖

unsigned int byte_offset;        //字節偏移
unsigned char disk_error=0;     //磁盤錯誤


DPT xdata dpt[4];   //磁盤分區表
DBR xdata dbr[4];   //DOS引導記錄


unsigned long int xdata FAT_start_sector[4];   //FAT開始扇區
unsigned long int xdata DATA_start_sector[4];  //數據開始扇區

unsigned char mp3_file_exist=0;

unsigned char xdata FAT_buffer[512];         //文件分配表FAT緩沖

//////////////////////////////////////  寫扇區計數寄存器   ///////////////////////////////////////////
void write_IDE_sector_count(unsigned char count)
{
 write_IDE_8(IDE_Sector_Count,count);
}
/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////  讀取一個FAT扇區,512字節保存在FAT_buffer[]中  ///////////////////////
void read_IDE_FAT_sector(unsigned long int LBA)
{
 unsigned int i;
 if(LBA>=(dpt[driver_number].start_sector+dpt[driver_number].total_sectors))return;
 write_IDE_LBA(LBA);
 write_IDE_sector_count(1);
 write_IDE_command(IDE_Read_Sectors);
 IDE_Address=IDE_Data;
 set_IDE_address();
 IDE_DATA_H=0xFF;
 IDE_DATA_L=0xFF;
 for(i=0;i<512;i++)
  {
   while(!IDE_IORDY);
   IDE_DIOR=0;
   FAT_buffer[i]=IDE_DATA_L;
   i++;
   FAT_buffer[i]=IDE_DATA_H;
   IDE_DIOR=1;
  }
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
 IDE_DATA_L=0xFF;
}
///////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////  讀取一個數據扇區,512字節保存在buffer[]中 //////////////////
void read_IDE_sector(unsigned long int LBA)
{
 unsigned int i;
 if(LBA>=(dpt[driver_number].start_sector+dpt[driver_number].total_sectors))return;
 write_IDE_LBA(LBA);
 write_IDE_sector_count(1);
 write_IDE_command(IDE_Read_Sectors);
 IDE_Address=IDE_Data;
 set_IDE_address();
 IDE_DATA_H=0xFF;
 IDE_DATA_L=0xFF;
 for(i=0;i<512;i++)
  {
   while(!IDE_IORDY);
   IDE_DIOR=0;
   buffer[i]=IDE_DATA_L;
   i++;
   buffer[i]=IDE_DATA_H;   
   IDE_DIOR=1;
  }
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
 IDE_DATA_L=0xFF;
}
///////////////////////////////////////////////////////////////////////////////////////////////

unsigned int play_count;  //當前文件夾中播放曲號

/////////////////////////////////////   獲取磁盤信息  /////////////////////////////////////////
void get_IDE_information(void)
{
 unsigned int i;
 unsigned long int LBA=0;
 mp3_file_exist=0;
 LBA=0;
 read_IDE_sector(LBA);
 for(i=0;i<4;i++)
 {
  dpt[i].file_system_type=buffer[0x1C2+i*16];       //文件系統類型
  ((unsigned char *)&(dpt[i].start_sector))[3]=buffer[0x1C6+i*16];
  ((unsigned char *)&(dpt[i].start_sector))[2]=buffer[0x1C7+i*16];
  ((unsigned char *)&(dpt[i].start_sector))[1]=buffer[0x1C8+i*16];
  ((unsigned char *)&(dpt[i].start_sector))[0]=buffer[0x1C9+i*16];  //分區開始扇區
  ((unsigned char *)&(dpt[i].total_sectors))[3]=buffer[0x1CA+i*16];
  ((unsigned char *)&(dpt[i].total_sectors))[2]=buffer[0x1CB+i*16];
  ((unsigned char *)&(dpt[i].total_sectors))[1]=buffer[0x1CC+i*16];
  ((unsigned char *)&(dpt[i].total_sectors))[0]=buffer[0x1CD+i*16];  //分區總扇區
 }
 
 if((buffer[510]!=0x55)||(buffer[511]!=0xAA))disk_error=1;
 LBA=dpt[0].start_sector;          //C盤
 read_IDE_sector(LBA);
 DISK_CAPACITY[7]=buffer[0x0B];
 DISK_CAPACITY[6]=buffer[0x0C];     //每扇區字節數
 ((unsigned char *)&(dbr[0].bytes_per_sectors))[0]=buffer[0x0C];
 ((unsigned char *)&(dbr[0].bytes_per_sectors))[1]=buffer[0x0B];  //每扇區字節數
 dbr[0].sectors_per_cluster=buffer[0x0D];                        //每簇扇區數
 ((unsigned char *)&(dbr[0].reserve_sectors))[1]=buffer[0x0E];
 ((unsigned char *)&(dbr[0].reserve_sectors))[0]=buffer[0x0F];   //保留扇區數
 dbr[0].num_of_FAT=buffer[0x10];                                  //FAT副本數
 ((unsigned char *)&(dbr[0].FAT16_ROOT_num))[1]=buffer[0x11];
 ((unsigned char *)&(dbr[0].FAT16_ROOT_num))[0]=buffer[0x12];     //FAT16文件系統的根目錄數
 ((unsigned char *)&(dbr[0].small_sectors))[1]=buffer[0x13];
 ((unsigned char *)&(dbr[0].small_sectors))[0]=buffer[0x14];
 ((unsigned char *)&(dbr[0].sectors_per_FAT16))[1]=buffer[0x16];
 ((unsigned char *)&(dbr[0].sectors_per_FAT16))[0]=buffer[0x17];
 ((unsigned char *)&(dbr[0].hidden_sectors))[3]=buffer[0x1C];
 ((unsigned char *)&(dbr[0].hidden_sectors))[2]=buffer[0x1D];
 ((unsigned char *)&(dbr[0].hidden_sectors))[1]=buffer[0x1E];
 ((unsigned char *)&(dbr[0].hidden_sectors))[0]=buffer[0x1F];
 ((unsigned char *)&(dbr[0].large_sectors))[3]=buffer[0x20];
 ((unsigned char *)&(dbr[0].large_sectors))[2]=buffer[0x21];
 ((unsigned char *)&(dbr[0].large_sectors))[1]=buffer[0x22];
 ((unsigned char *)&(dbr[0].large_sectors))[0]=buffer[0x23];
 DISK_CAPACITY[0]=buffer[0x23];
 DISK_CAPACITY[1]=buffer[0x22];
 DISK_CAPACITY[2]=buffer[0x21];
 DISK_CAPACITY[3]=buffer[0x20];
 ((unsigned char *)&(dbr[0].sectors_per_FAT32))[3]=buffer[0x24];
 ((unsigned char *)&(dbr[0].sectors_per_FAT32))[2]=buffer[0x25];
 ((unsigned char *)&(dbr[0].sectors_per_FAT32))[1]=buffer[0x26];
 ((unsigned char *)&(dbr[0].sectors_per_FAT32))[0]=buffer[0x27];
 ((unsigned char *)&(dbr[0].root_cluster_num))[3]=buffer[0x2C];
 ((unsigned char *)&(dbr[0].root_cluster_num))[2]=buffer[0x2D];
 ((unsigned char *)&(dbr[0].root_cluster_num))[1]=buffer[0x2E];
 ((unsigned char *)&(dbr[0].root_cluster_num))[0]=buffer[0x2F];
 if((buffer[510]!=0x55)||(buffer[511]!=0xAA))disk_error=2;
 FAT_start_sector[0]=dpt[0].start_sector+dbr[0].reserve_sectors;
 DATA_start_sector[0]=FAT_start_sector[0]+(dbr[0].num_of_FAT)*(dbr[0].sectors_per_FAT32);
 LBA=DATA_start_sector[0];
 driver_number=C_;
 current_dir.first_cluster_number=dbr[0].root_cluster_num;
 play_count=1;
 item_count=1;
 get_nst_item();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*void read_IDE_buffer(void)
{
 write_IDE_command(IDE_Read_Buffer);
}*/

/*void write_IDE_buffer(void)
{
 write_IDE_command(IDE_Write_Buffer);
}*/

/*
void write_IDE_sector(unsigned long int LBA)
{
 unsigned int i;
 write_IDE_LBA(LBA);
 write_IDE_sector_count(1);
 write_IDE_command(IDE_Write_Sectors);
 IDE_Address=IDE_Data;
 set_IDE_address();
 for(i=0;i<512;i++)
  {
   while(!IDE_IORDY);
   IDE_DIOW=0;
   IDE_DATA_L=buffer[i];
   i++;
   IDE_DATA_H=buffer[i];
   IDE_DIOW=1;
  }
 wait_IDE_busy();
 IDE_Address=IDE_Bus_Not_Use;
 set_IDE_address();
}
*/

/////////////////////////////////////////////    IDE 初始化  /////////////////////////////////////////
void IDE_initial(void)
{
 unsigned char i;
 reset_IDE();
 for(i=2;i<200;i++)dir_name[i]=0x2020;
 do
  {
   write_IDE_8(IDE_Drive_Head,0xE0);
   read_IDE_status();
  }while(IDE_BSY);
 wait_IDE_busy();
 write_IDE_8(IDE_Device_Control,0xFA);//沒有中斷模式
 dir_name[0]='C'+0xA380;
 ((unsigned char *)dir_name)[2]=':';
 ((unsigned char *)dir_name)[3]='\\';
 folder_length=4;
 dir_length=folder_length;
 not_root_dir=0;
 get_IDE_information();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩1区2区| 在线观看视频一区二区| 日韩av电影免费观看高清完整版 | 91精品国产高清一区二区三区蜜臀| 成人午夜激情视频| 成人小视频免费在线观看| 黄色小说综合网站| 国产成人三级在线观看| 国产精品18久久久久久vr| 国产毛片精品一区| 成人性色生活片| 一本色道a无线码一区v| 91国在线观看| 在线电影院国产精品| 欧美一级理论片| 精品久久久久99| 国产精品短视频| 亚洲国产成人av| 精品一区二区三区影院在线午夜| 韩国在线一区二区| 成人激情免费电影网址| 色老头久久综合| 欧美一区二区三区系列电影| 久久综合精品国产一区二区三区| 国产日韩v精品一区二区| 一区二区三区久久| 亚洲夂夂婷婷色拍ww47| 丝袜美腿亚洲一区二区图片| 韩国一区二区三区| 91麻豆123| 日韩精品自拍偷拍| 国产午夜三级一区二区三| 自拍偷拍国产精品| 日韩av中文字幕一区二区| 国产精品88888| 在线看不卡av| 久久综合九色综合97_久久久| 国产精品亲子伦对白| 天堂va蜜桃一区二区三区| 成人妖精视频yjsp地址| 欧美日韩国产在线观看| 久久精品夜色噜噜亚洲a∨| 亚洲青青青在线视频| 蜜桃视频免费观看一区| 波多野结衣在线一区| 777亚洲妇女| 亚洲人成伊人成综合网小说| 毛片一区二区三区| 色偷偷久久人人79超碰人人澡| 日韩欧美另类在线| 悠悠色在线精品| 成人中文字幕电影| 日韩欧美色综合| 亚洲国产美女搞黄色| 国产**成人网毛片九色| 欧美变态tickling挠脚心| 亚洲一区二区三区在线播放| 成人午夜私人影院| 久久综合九色综合97婷婷| 日韩一区精品视频| 欧美视频一区二区| 亚洲欧美激情视频在线观看一区二区三区| 九九九久久久精品| 91精品国产丝袜白色高跟鞋| 亚洲午夜av在线| 色8久久人人97超碰香蕉987| 国产农村妇女精品| 国产九九视频一区二区三区| 欧美精品99久久久**| 亚洲午夜精品一区二区三区他趣| av电影在线不卡| 国产精品久久国产精麻豆99网站| 国内成人精品2018免费看| 日韩精品一区二区三区在线播放| 日韩电影在线观看一区| 56国语精品自产拍在线观看| 亚洲一卡二卡三卡四卡| 欧美性生活大片视频| 樱花草国产18久久久久| 在线精品视频小说1| 亚洲夂夂婷婷色拍ww47 | 99re热这里只有精品视频| 日本一区二区三区国色天香| 国产一区二区三区精品视频| 久久蜜桃av一区二区天堂| 国产精华液一区二区三区| 久久精品视频一区二区三区| 国产精品一级在线| 国产农村妇女精品| 99麻豆久久久国产精品免费| 亚洲精品国久久99热| 欧美性生活久久| 蜜桃av一区二区在线观看| 2021久久国产精品不只是精品| 国产盗摄精品一区二区三区在线| 国产精品福利电影一区二区三区四区| www.日韩精品| 亚洲成人免费影院| 欧美成人猛片aaaaaaa| 国产精品一品二品| 亚洲男同性恋视频| 欧美日韩国产精选| 精品一区二区三区欧美| 中文字幕一区二区在线观看| 欧美视频完全免费看| 国产综合久久久久影院| 亚洲欧美日韩国产一区二区三区| 欧美日韩一区二区三区高清| 免费看日韩精品| 一区二区中文字幕在线| 欧美日韩一区二区在线观看视频 | 亚洲欧洲国产专区| 在线播放欧美女士性生活| 国产一区欧美日韩| 亚洲激情自拍视频| 久久综合成人精品亚洲另类欧美| 99久久免费国产| 精品在线一区二区| 一区二区三区四区视频精品免费| 日韩欧美色综合网站| 日本韩国精品一区二区在线观看| 久久99国产精品免费网站| 一区二区三区在线影院| 久久久一区二区三区| 在线观看免费亚洲| 成人激情视频网站| 精品一区二区影视| 日韩精品福利网| 亚洲午夜免费电影| 国产精品久久久久久久久免费丝袜| 91精品国产91久久久久久一区二区 | 欧美视频完全免费看| 成a人片亚洲日本久久| 免费欧美在线视频| 五月天中文字幕一区二区| 中文字幕日韩一区| 国产视频一区二区在线| 日韩精品一区二区三区中文不卡| 欧美视频一二三区| 欧美在线高清视频| 97久久超碰国产精品| 国产成人h网站| 国产福利一区二区三区在线视频| 天天av天天翘天天综合网色鬼国产| 中文字幕中文字幕在线一区| 久久人人97超碰com| 欧美zozo另类异族| 日韩欧美一区在线| 51精品久久久久久久蜜臀| 欧美日韩和欧美的一区二区| 欧美在线观看视频在线| 91成人在线精品| 欧美午夜寂寞影院| 欧美午夜精品免费| 精品视频一区三区九区| 欧美自拍偷拍午夜视频| 欧美在线你懂的| 欧美日本免费一区二区三区| 欧美伦理电影网| 777xxx欧美| 日韩一区二区三区四区五区六区 | 青青草原综合久久大伊人精品 | 国产亚洲一区二区三区| 久久蜜臀中文字幕| 欧美韩日一区二区三区四区| 国产精品美女久久久久久久网站| 中日韩免费视频中文字幕| 国产精品视频一二三| 中文字幕一区二区三区四区不卡| 国产精品电影一区二区| 亚洲综合视频网| 日韩电影免费在线| 国产老女人精品毛片久久| 波多野洁衣一区| 欧美日韩极品在线观看一区| 日韩一卡二卡三卡| 亚洲国产成人在线| 亚洲一区二三区| 久久99热狠狠色一区二区| 成人免费的视频| 欧美色精品在线视频| 日韩精品影音先锋| 国产精品九色蝌蚪自拍| 丝袜美腿成人在线| 丁香激情综合国产| 欧美日韩国产综合一区二区三区| 日韩精品一区二区三区swag| 日本一区二区三区国色天香 | 国产91在线观看丝袜| 欧美性猛交xxxxxx富婆| 精品国产乱码久久久久久免费| 国产精品视频一二三| 日韩精品91亚洲二区在线观看 | 亚洲视频你懂的| 免费人成在线不卡| av电影在线不卡| 久久先锋影音av| 五月天欧美精品| 色综合久久久久综合| 日韩精品一区在线|