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

📄 硬盘mp3源码.txt

📁 AT89C51SND1C 解码芯片做的硬盘MP3
💻 TXT
📖 第 1 页 / 共 3 页
字号:
Sbit (RD , P3 , 7);
Sbit (WR , P3 , 6);
Sbit (T1 , P3 , 5);
Sbit (T0 , P3 , 4);
Sbit (INT1 , P3 , 3);
Sbit (INT0 , P3 , 2);
Sbit (TXD , P3 , 1);
Sbit (RXD , P3 , 0);

Sbit (P4_7 , P4 , 7);
Sbit (P4_6 , P4 , 6);
Sbit (P4_5 , P4 , 5);
Sbit (P4_4 , P4 , 4);
Sbit (P4_3 , P4 , 3);
Sbit (P4_2 , P4 , 2);
Sbit (P4_1 , P4 , 1);
Sbit (P4_0 , P4 , 0);

Sbit (SS_ , P4 , 3);
Sbit (SCK , P4 , 2);
Sbit (MOSI , P4 , 1);
Sbit (MISO , P4 , 0);

Sbit (P5_3 , P5 , 3);
Sbit (P5_2 , P5 , 2);
Sbit (P5_1 , P5 , 1);
Sbit (P5_0 , P5 , 0);


/* FLASH MEMORY */

Sfr (FCON , 0xD1);


/* TIMERS */

Sfr (TCON , 0x88);
Sfr (TMOD , 0x89);
Sfr (TL0 , 0x8A);
Sfr (TL1 , 0x8B);
Sfr (TH0 , 0x8C);
Sfr (TH1 , 0x8D);

Sbit (TF1 , TCON , 7);
Sbit (TR1 , TCON , 6);
Sbit (TF0 , TCON , 5);
Sbit (TR0 , TCON , 4);
Sbit (IE1 , TCON , 3);
Sbit (IT1 , TCON , 2);
Sbit (IE0 , TCON , 1);
Sbit (IT0 , TCON , 0);


/* WATCHDOG */

Sfr (WDTRST , 0xA6);
Sfr (WDTPRG , 0xA7);


/* MP3 DECODER */

Sfr (MP3CON , 0xAA);
Sfr (MP3STA , 0xC8);
Sfr (MP3STA1 , 0xAF);
Sfr (MP3DAT , 0xAC);
Sfr (MP3ANC , 0xAD);
Sfr (MP3VOL , 0x9E);
Sfr (MP3VOR , 0x9F);
Sfr (MP3BAS , 0xB4);
Sfr (MP3MED , 0xB5);
Sfr (MP3TRE , 0xB6);
Sfr (MP3CLK , 0xEB);
Sfr (MP3DBG , 0xAE); /* hidden register */

Sbit (MPANC , MP3STA, 7);
Sbit (MPREQ , MP3STA, 6);
Sbit (ERRLAY , MP3STA, 5);
Sbit (ERRSYN , MP3STA, 4);
Sbit (ERRCRC , MP3STA, 3);
Sbit (MPFS1 , MP3STA, 2);
Sbit (MPFS0 , MP3STA, 1);
Sbit (MPVER , MP3STA, 0);

#define MPFREQ (MP3STA1 & 0x10)

/* AUDIO INTERFACE */

Sfr (AUDCON0 , 0x9A);
Sfr (AUDCON1 , 0x9B);
Sfr (AUDSTA , 0x9C);
Sfr (AUDDAT , 0x9D);
Sfr (AUDCLK , 0xEC);


/* USB CONTROLLER */

Sfr (USBCON , 0xBC);
Sfr (USBADDR , 0xC6);
Sfr (USBINT , 0xBD);
Sfr (USBIEN , 0xBE);
Sfr (UEPNUM , 0xC7);
Sfr (UEPCONX , 0xD4);
Sfr (UEPSTAX , 0xCE);
Sfr (UEPRST , 0xD5);
Sfr (UEPINT , 0xF8);
Sfr (UEPIEN , 0xC2);
Sfr (UEPDATX , 0xCF);
Sfr (UBYCTX , 0xE2);
Sfr (UBYCTLX , 0xE2);
Sfr (UFNUML , 0xBA);
Sfr (UFNUMH , 0xBB);
Sfr (USBCLK , 0xEA);
Sfr (UDPADDH , 0xD7);
Sfr (UDPADDL , 0xD6);

Sbit (EP3INT , UEPINT, 3);
Sbit (EP2INT , UEPINT, 2);
Sbit (EP1INT , UEPINT, 1);
Sbit (EP0INT , UEPINT, 0);


/* MMC CONTROLLER */

Sfr (MMDAT , 0xDC);
Sfr (MMCMD , 0xDD);
Sfr (MMSTA , 0xDE);
Sfr (MMMSK , 0xDF);
Sfr (MMCON0 , 0xE4);
Sfr (MMCON1 , 0xE5);
Sfr (MMCON2 , 0xE6);
Sfr (MMINT , 0xE7);
Sfr (MMCLK , 0xED);


/* IDE CONTROLLER */

Sfr (DAT16H , 0xF9);


/* UART */

Sfr (SCON , 0x98);
Sfr (SBUF , 0x99);
Sfr (SADDR , 0xA9);
Sfr (SADEN , 0xB9);
Sfr (BDRCON , 0x92);
Sfr (BRL , 0x91);

Sbit (SM0 , SCON , 7);
Sbit (FE , SCON , 7);
Sbit (SM1 , SCON , 6);
Sbit (SM2 , SCON , 5);
Sbit (REN , SCON , 4);
Sbit (TB8 , SCON , 3);
Sbit (RB8 , SCON , 2);
Sbit (TI , SCON , 1);
Sbit (RI , SCON , 0);


/* SPI CONTROLLER */

Sfr (SPCON , 0xC3);
Sfr (SPSTA , 0xC4);
Sfr (SPDAT , 0xC5);


/* I2C CONTROLLER */

Sfr (SSCON , 0x93);
Sfr (SSSTA , 0x94);
Sfr (SSDAT , 0x95);
Sfr (SSADR , 0x96);


/* KEYBOARD */

Sfr (KBCON , 0xA3);
Sfr (KBSTA , 0xA4);


/* ADC CONVERTER */

Sfr (ADCON , 0xF3);
Sfr (ADDL , 0xF4);
Sfr (ADDH , 0xF5);
Sfr (ADCLK , 0xF2);

#define PLOCK (PLLCON&0x01)

#endif /* _REGSND1_H_ */


/* file_system.h file
Created by Computer-lov Date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/
#ifndef __FILE_SYSTEM_H__
#define __FILE_SYSTEM_H__

unsigned char is_a_mp3_file(void);
unsigned long int get_next_sector(void);
void get_pre_file(void);
void get_next_file(void);

typedef struct _FILE
{
unsigned char name[11]; //11字节的文件名
unsigned char attribute; //文件属性
unsigned long int first_cluster_number; //起始簇号
unsigned long int next_cluster_number; //下一簇簇号
unsigned long int length; //文件长度
}FILE,*pFILE;

typedef struct _DIR //文件夹结构
{
unsigned int name[20]; //文件夹名
unsigned long int first_cluster_number; //文件夹开始簇号
unsigned long int current_cluster_number; //文件夹当前簇号
unsigned long int father_cluster_number; //文件夹父目录簇号,如果该项为0,表示父目录为根目录
}DIR,*pDIR;

extern FILE xdata file;
extern DIR xdata current_dir;

#endif


/*
Hard_ware.h
Created by Computer-lov date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/

#ifndef __HARDWARE_H__
#define __HARDWARE_H__

#define LED1 P1_4
#define LED2 P5_3
#define LED3 P5_2
#define USB_LED P1_5

//#define IDE_LED


#include <AT89C51SND1C.h>

/*
DATA BUS 0-7 <====> P0
DATA BUS 8-16 <====> P2
IORDY ---->P50
ALE <-----P51
DIOW <-----P36
DIOR <-----P37
*/
#define IDE_DATA_L P0
#define IDE_DATA_H P2
#define IDE_IORDY P5_0
#define IDE_DIOW P3_6
#define IDE_DIOR P3_7
#define IDE_ALE P5_1
/*
DA0 -----> P10
DA1 -----> P11
DA3 -----> P12
CS1FX -----> P13
CS3FX -----> P14
CSEL -----> P15
RESET -----> P17
*/
#define IDE_Address IDE_DATA_L

#endif


/* IDE.H File
IDE address and command
Created by Computer-lov date: 2005.3.12
Copyright (c) 2005 Computer-lov
version 1.0
*/


#ifndef __IDE_H__
#define __IDE_H__

void delayXms(unsigned int);
void reset_IDE(void);
//void read_IDE_16(unsigned char);
//void write_IDE_16(unsigned char);
unsigned char read_IDE_8(unsigned char);
void write_IDE_8(unsigned char,unsigned char);
//void read_IDE_word(void);
//void write_IDE_word(void);
void read_IDE_status(void);
void read_IDE_error(void);
unsigned char wait_IDE_busy(void);
void write_IDE_command(unsigned char);
//void soft_reset_IDE(void);
void get_IDE_infromation(void);
void write_IDE_sector_count(unsigned char);
//void read_IDE_buffer(void);
//void write_IDE_buffer(void);
void read_IDE_sector(unsigned long int);
void write_IDE_sector(void);
void IDE_initial(void);
void write_IDE_LBA(unsigned long int);
void read_IDE_FAT_sector(unsigned long int);

extern unsigned char IDE_Buffer_L,IDE_Buffer_H;
extern unsigned char DISK_CAPACITY[8];

typedef struct
{
unsigned char file_system_type;
unsigned long int start_sector;
unsigned long int total_sectors;
}DPT,*pDPT;

typedef struct
{
unsigned int bytes_per_sectors; //扇区字节数 偏移地址: 0x0B
unsigned char sectors_per_cluster;//每簇扇区数 偏移地址: 0x0D
unsigned int reserve_sectors; //保留扇区数 偏移地址: 0x0E
unsigned char num_of_FAT; //FAT副本数 偏移地址: 0x10
unsigned int FAT16_ROOT_num; //根目录项数,只被FAT12/16使用,FAT32该字段必须为0 偏移地址: 0x11
unsigned int small_sectors; //小扇区数,只被FAT12/16使用,FAT32该字段必须为0 偏移地址: 0x13
unsigned int sectors_per_FAT16; //每FAT扇区数,只被FAT12/16使用,FAT32该字段必须为0 偏移地址: 0x16
unsigned long int hidden_sectors; //隐藏扇区数 偏移地址: 0x1C
unsigned long int large_sectors; //总扇区数,该分区中FAT32的扇区数 偏移地址: 0x20
unsigned long int sectors_per_FAT32; //每FAT扇区数,只被FAT32使用 偏移地址: 0x24
unsigned long int root_cluster_num; //根目录簇号 偏移地址: 0x2C
}DBR,*pDBR;

extern DPT xdata dpt[4]; //磁盘分区表
extern DBR xdata dbr[4]; //DOS引导记录
extern unsigned char xdata buffer[512]; //扇区缓冲
extern unsigned char xdata FAT_buffer[512]; //FAT表项缓冲区,用来加快读盘速度
extern unsigned int play_count;


extern unsigned int byte_offset;


extern unsigned long int xdata FAT_start_sector[4]; //FAT开始扇区
extern unsigned long int xdata DATA_start_sector[4]; //数据区开始扇区

#define set_IDE_address() IDE_ALE=1;IDE_ALE=0;

extern unsigned char driver_number; //磁盘驱动器
#define C_ 0 //磁盘驱动器,目前版本只支持最多四个逻辑分区
#define D_ 1
#define E_ 2
#define F_ 3

#define IDE_Bus_Not_Use 0x98
#define IDE_Alternate_Status 0x8E
#define IDE_Device_Control 0x8E
#define IDE_Drive_Address 0x8F

#define IDE_Data 0x90
#define IDE_Error_Register 0x91
#define IDE_Features 0x91
#define IDE_Sector_Count 0x92
#define IDE_Sector_Nuber 0x93
#define IDE_LBA_Bits_0_7 0x93
#define IDE_Cylinder_Low 0x94
#define IDE_LBA_Bits_8_15 0x94
#define IDE_Cylinder_High 0x95
#define IDE_LBA_Bits_16_23 0x95
#define IDE_Drive_Head 0x96
#define IDE_LBA_Bits_24_27 0x96
#define IDE_Status 0x97
#define IDE_Command 0x97

#define IDE_Reset 0x18


#define IDE_Acknowledge_Media_Change 0xDB
#define IDE_Boot_Post_Boot 0xDC
#define IDE_Boot_Pre_Boot 0xDD
#define IDE_Check_Power_Mode 0x98E5
#define IDE_Door_Lock 0xDE
#define IDE_Door_Unlock 0xDF
#define IDE_Execute_Drive_Diagnostic 0x90
#define IDE_Format_Track 0x50
#define IDE_Identify_Drive 0xEC
#define IDE_Idle 0x97E3
#define IDE_Idle_Immediate 0x95E1
#define IDE_Initialize_Drive_parameters 0x91
#define IDE_NOP 0x00
#define IDE_Read_Buffer 0xE4
#define IDE_Read_DMA 0xC8
#define IDE_Read_DMA_o 0xC9
#define IDE_Read_Long 0x22
#define IDE_Read_Long_o 0x23
#define IDE_Read_Multiple 0xC4
#define IDE_Read_Sectors 0x20
#define IDE_Read_Sectors_o 0x21
#define IDE_Read_Verify_Sectors 0x40
#define IDE_Read_Verify_Sectors_o 0x41
#define IDE_Recalibrate 0x10
#define IDE_Seek 0x70
#define IDE_Set_Features 0xEF
#define IDE_Set_Multiple_Mode 0x96
#define IDE_Sleep 0x99E6
#define IDE_Standby 0x96E2
#define IDE_Standby_Immediate 0x94E0
#define IDE_Write_Buffer 0xE8
#define IDE_Write_DMA 0xCA
#define IDE_Write_DMA_o 0xCB
#define IDE_Write_Long 0x32
#define IDE_Write_Long_o 0x33
#define IDE_Write_Multiple 0xC5
#define IDE_Write_Same 0xE9
#define IDE_Write_Sectors 0x30
#define IDE_Write_Sectors_o 0x31
#define IDE_Write_Verify 0x3C

#endif


/* Initial.h file
Created by Computer-lov Date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/

#ifndef __INITIAL_h__
#define __INITIAL_h__

void PLL_initial(void);
void RAM_initial(void);
void interrupt_initial(void);
//void timer_initial(void);
void MP3_decoder_initial(void);
void DAC_initial(void);
void keyboard_initial(void);
void system_initial(void);


#define set_ERAM() AUXR=AUXR&0xFD //使用内部扩展RAM
#define set_XRAM() AUXR=AUXR|0x02 //使用外部RAM

#define MP3_decoder_en() MP3CON=MP3CON|0x80 //启动MP3解码器
#define MP3_decoder_disen() MP3CON=MP3CON&~0x80 //停止MP3解码器

#define MP3_bass_boost() MP3CON=MP3CON | 0x40 //启动重低音效果
#define MP3_no_bass_boost() MP3CON=MP3CON & ~0x40 //关闭重低音效果

#define MP3_CRC_en() MP3CON=MP3CON | 0x20 //允许CRC校验
#define MP3_CRC_disen() MP3CON=MP3CON & ~0x20 //禁止CRC校验

#define MPREQ_interrupt_en() MP3CON=MP3CON & ~0x80 //MP3数据请求中断允许
#define MPREQ_interrupt_disen() MP3CON=MP3CON | 0x80 //MP3数据请求不允许中断

#define set_vol(vol) MP3VOL=vol //设置左声道音量
#define set_vor(vor) MP3VOR=vor //设置右声道音量

#define set_bas(bas) MP3BAS=bas //设置低音提升
#define set_med(med) MP3MED=med //中音音提升
#define set_tre(tre) MP3TRE=tre //高音提升

#define DAC_data_request_en() AUDCON1=AUDCON1 | 0x40 //允许DAC数据请求
#define DAC_data_request_disen() AUDCON1=AUDCON1 & ~0x40 //不允许DAC数据请求

#define DAC_interface_en() AUDCON1=AUDCON1 | 0x01 //DAC接口允许
#define DAC_interface_disen() AUDCON1=AUDCON1 & ~0x01 //DAC借口不允许

#define set_DAC_CLK(clk) AUDCLK=((clk)&0x1F) //设置DAC时钟

#define pause() DAC_data_request_disen() //暂停
#define pause_play() DAC_data_request_en() //从暂停中恢复播放
//这两个功能是按照51snd1的datasheet介绍做的,但是好象不能从暂停中恢复播放


#endif


/* key_board.h file
Created by Computer-lov Date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/

#ifndef __KEY_BOARD_H__
#define __KEY_BOARD_H__

extern unsigned char key;

void ISR_keyboard(void);

#define KEY_UP 1
#define KEY_FUN 2
#define KEY_DOWN 3
#define KEY_OK 4

#endif


/* MP3.H File
Created by Computer-lov date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/

#ifndef __MP3_H__
#define __MP3_H__

#define START 0
#define PLAY 1
#define PAUSE 2
#define STOP 3
#define USB 4

#define FUN_SEL 0
#define FUN_VOL 1
#define FUN_BAS 2
#define FUN_MED 3
#define FUN_TRE 4
#define FUN_BOOT 5
#define FUN_MAX 6

extern unsigned char status;
extern unsigned char function,vol,bas,med,tre; //保存音量等设置

void play(void);
void DAC_start(unsigned char);

#endif
 

⌨️ 快捷键说明

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