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

📄 main.c

📁 51单片机硬盘MP3播放器 的原理图及源代码 增加了USB下载文件功能; 汉字LCD显示功能;子文件夹功能等。并对软件做了一些修改。并将硬件电路图画出来了。由于做得仓促
💻 C
字号:
/************************************************************************************
  本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
  
  AT89C51SND1C 解码芯片做的硬盘MP3,软件还在完善中,现在只支持一块硬盘,一个分区,
  至少可支持15层目录。只支持FAT32文件系统。支持USB1.1下载文件,速度300KB/S左右。
  7.5*2个汉字液晶显示。可显示歌曲名,当前曲号等。可进行前后选曲。部分MP3文件不能解码。
  本人联系方法: 
                 E_mail: Computer-lov@tom.com  
                   Blog: http://computer00.21ic.org
                                                       愿与大家共同学习。
*************************************************************************************/


/* MAIN.C File
   The MP3 main 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 "ide.h"
#include "hardware.h"
#include "file_system.h"
#include "Initial.h"
#include "keyboard.h"
#include "MP3.H"
#include "LCD.H"

void usb(void);

////////////////////////////////////////////  主函数  ///////////////////////////////
void main(void)
{
 unsigned char i;
 unsigned char key_press_time;
 unsigned char hard_disk_sleep=0;

 system_initial();  //初始化
 status=START;
 driver_number=0;   //选择第一个分区
 key=0;
 function=FUN_SEL;  //歌曲选择状态
 while(1)
  {
   switch (status)
    {
     case START:              //开机
               {
                vol=10;
                bas=10;
                med=2;
                tre=10;
                set_vol(vol);
                set_vor(vol);
                set_bas(bas);
                set_med(med);
                set_tre(tre);       //音量等初始化
                LCD_go_home();
                for(i=0;i<14;i++)write_LCD_data(((unsigned char *)dir_name)[i]);
                LCD_line_feed();
                prints("停止          ");
                item_count=0;
                while(!key);
                if(key==KEY_FUN){status=USB;break;}
                status=STOP;
                break;

               }
     case STOP:{              //停止
                LCD_go_home();
                for(i=0;i<14;i++)write_LCD_data(((unsigned char *)dir_name)[i]);
                while(!key);
                switch (key)
                 {
                  case KEY_OK:
                   {
                    key_press_time=0;
                    while(!(P1_3))
                     {
                      delayXms(10);
                      key_press_time++;
                      if(key_press_time==130)break;
                     }
                    if(key_press_time==130)
                     {
                      write_IDE_command(IDE_Sleep);
                      LCD_line_feed();
                      prints("现在可以关机了");
                      hard_disk_sleep=0xFF;
                      break;
                     }
                    if(hard_disk_sleep)
                     {
                      reset_IDE();
                      hard_disk_sleep=0;
                      LCD_line_feed();
                      prints("               ");
                     }
                    if(file_or_folder==IS_MP3FILE)
                     {
                      get_nst_file();
                      status=PLAY;
                     }
                    if(file_or_folder==IS_FOLDER)
                      {
                       enter_dir();
                       get_next_item();
                       LCD_line_feed();
                       for(i=0;i<14;i++)write_LCD_data(((unsigned char *)item_name)[i]);
                      }
                    break;
                   }
                  case KEY_UP:
                   {
                    get_pre_item();
                    LCD_line_feed();
                    for(i=0;i<14;i++)write_LCD_data(((unsigned char *)item_name)[i]);
                    break;
                   }
                  case KEY_DOWN:
                   {
                    get_next_item();
                    LCD_line_feed();
                    for(i=0;i<14;i++)write_LCD_data(((unsigned char *)item_name)[i]);
                    break;
                   }
                  case KEY_FUN:
                   {
                    exit_dir();
                    get_next_item();
                    LCD_line_feed();
                    for(i=0;i<14;i++)write_LCD_data(((unsigned char *)item_name)[i]);
                    break;
                   }
                 }key=0;break;
                }

     case PLAY:{play();break;}         //播放
     case USB: {usb();break;}          //USB下载
     key=0;
    }
  }
}
/////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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