📄 main.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 + -