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

📄 main.lst

📁 89c51snd1c的FLASH MP3 U盘的详细代码
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   06/28/2005 22:56:52 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C LARGE ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          
   3          //	ATMEL AT89C51SND1 U盘和MP3播放功能的主函数
   4          
   5          
   6          #include "REGSND1.H"
   7          #include "UART.H"
   8          /** 宏定义USB端点中断的标志位 **/
   9          #define 	EP2 		(0x1<<2)		      
  10          #define 	EP1 		(0x1<<1)
  11          #define 	EP0 		(0x1<<0)
  12          
  13          #define     EKB		    (0x10)
  14          /** 宏定义MP3播放功能的标志位 **/
  15          #define SELECTSONG	3
  16          #define PLAY		1
  17          #define STOP		0
  18          /** 声明外部函数 **/
  19          extern void AtmelUSBInit();
  20          extern void EpEnable();
  21          extern void Ep0();
  22          extern void main_txdone();
  23          extern void main_rxdone();
  24          extern void Flash_Reset(void);
  25          
  26          extern void MP3_Init();
  27          extern void PlayInit(unsigned char *SongName);
  28          extern unsigned char GetMP3List(void);
  29          
  30          extern void Func();
  31          extern void Next();
  32          extern void Previous();
  33          extern void PlayPause();
  34          extern void PlayMP3(unsigned char *SongName);
  35          extern void KeyBoardInit();
  36          
  37          /** 定义MP3播放相关的变量 **/
  38          unsigned char SONG[88] = {'M', 'O', 'O', 'N', ' ', ' ', ' ', ' ', 'T', 'X', 'T'};
  39          unsigned char data CurrentFun = SELECTSONG;
  40          unsigned char data PlayState = STOP;
  41          unsigned char data NowPlaying = 0;
  42          unsigned char data NumofSong = 0;
  43          unsigned char data MP3InitFlag;
  44          
  45          void sleep()
  46          {int t=0;
  47   1      for(t=0;t<1000;t++); }
  48          void key_interrupt() interrupt 11
  49          {		 int t=0;
  50   1      		unsigned char i = 200;
  51   1      		EA = 0;			                                             //关中断	 
  52   1      		IEN1 &= (~EKB);	                                             //Enable KeyBoard Interrupt
  53   1      
  54   1      		while (i)
  55   1      		{
C51 COMPILER V6.12  MAIN                                                                   06/28/2005 22:56:52 PAGE 2   

  56   2      			i--;
  57   2      		}
  58   1      
  59   1      		i = KBSTA;		                                             //取键盘中断位
  60   1      		switch (i)
  61   1      		{		                                                     //依次处理四个键中的某个键
  62   2      			case 1 : Func();break;									 //被按下时的情况
  63   2      			case 2 : Next();break;
  64   2      			case 4 : Previous();break;
  65   2      			case 8 : PlayPause();
  66   2      			if(PlayState==STOP)
  67   2      			printuf("Pause\n",0);
  68   2      			else printuf("Playing\n",0); break;
  69   2      			default : break;
  70   2      		}
  71   1      		
  72   1      		IEN1 |= EKB;	                                              //Enable KeyBoard Interrupt
  73   1      		
  74   1      		EA = 1;		                                                  //开中断
  75   1      		return;
  76   1      }
  77          
  78          void main()
  79          {
  80   1      	printuf(">>>> BLK's MP3 USB Disk  <<<<\n",0);
  81   1      	CKCON|=0x01;   //使能该单片机的X2模式
  82   1      	Flash_Reset();											         //Flash 芯片复位
  83   1      	if(P3_4)										                 //此引脚为USB接入检测端
  84   1       	  {														         //在此将设备做为U盘处理
  85   2      	     printuf("Entering USB Mode...\n",0);                           //输出进入U盘功能的信息
  86   2      	     AtmelUSBInit();									         //USB寄存器配置函数
  87   2      	     EpEnable();										         //使能有关USB的配置
  88   2      	     while(1)
  89   2      	      {
  90   3      	         if (UEPINT & EP0)   Ep0();
  91   3      	         if (UEPINT & EP1)   main_txdone(); 
  92   3      	         if (UEPINT & EP2)	 main_rxdone();
  93   3      	          
  94   3      			 UEPINT=0;
  95   3      	      }
  96   2      	  }
  97   1      	else													         //进入MP3播放模式
  98   1      	  {
  99   2      		printuf("Entering MP3 Mode...\n",0); 
 100   2      	    MP3_Init();                                                  //MP3初始化
 101   2      		KeyBoardInit();                                              //键盘初始化
 102   2      
 103   2      		MP3InitFlag = 1;
 104   2      		EA = 1;                                                      //开中断,键盘可以开始工作
 105   2      		P3_5 = 0;                                                    //打开USB灯亮	
 106   2      
 107   2      		NumofSong = GetMP3List();                                    //得到U盘中的MP3歌曲列表
 108   2      		printuf("Song:%x\n", NumofSong);                             //输出歌曲总数信息
 109   2      		if(NumofSong == 0) 
 110   2      		{
 111   3      		   printuf("There is no MP3 file in USB Disk!\n",0);
 112   3      		   P3_5 = 1;                                                 //关闭指示LED	 
 113   3      		}
 114   2      
 115   2      		while(1) 
 116   2      		{
 117   3      			if(NumofSong != 0)
C51 COMPILER V6.12  MAIN                                                                   06/28/2005 22:56:52 PAGE 3   

 118   3      			{
 119   4      				if(MP3InitFlag)
 120   4      				{
 121   5      					PlayInit(&SONG[11 * NowPlaying]);
 122   5      					MP3InitFlag = 0;
 123   5      				}
 124   4      				PlayMP3(&SONG[11 * NowPlaying]);                     //如果处于播放状态,则播放当前歌曲
 125   4      			}
 126   3      			if(NowPlaying == NumofSong) 
 127   3      			{
 128   4      				PlayState = STOP;			                         //全部歌曲播放完了,播放器停止
 129   4      //				NowPlaying = 0;                                      //循环播放  
 130   4       			}
 131   3      			P3_5 =~P3_5;                                             //指示LED闪烁
 132   3      		} 
 133   2      	  
 134   2      	  }
 135   1      
 136   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    340    ----
   CONSTANT SIZE    =    135    ----
   XDATA SIZE       =     88       2
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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