32musb.lst
来自「这个是一个完整的MP3项目」· LST 代码 · 共 941 行 · 第 1/4 页
LST
941 行
674 1 KBCON = 0x00;//设置键盘有效模式为低电平有效,并使能中断Low Level,Enable Interrupt
675 1 IEN1 = IEN1 | EKB; //使能键盘中断Enable KeyBoard Interrupt
676 1
677 1 }
678
679 void Func()
680 {
681 1 if (CurrentFun < 3)
682 1 {
683 2 CurrentFun++;//在选曲/音量调节/音效调节三者间切换
684 2 }
685 1 else if (CurrentFun == 3)
686 1 {
687 2 CurrentFun = 1;
688 2 }
689 1 }
690
691 void Next()//按下"下一首/音量减小"键时的处理
692 {
693 1
694 1 switch (CurrentFun)
695 1 {//如果当前处于音量调节功能
696 2 case VOLUME :
697 2 {
698 3 if (MP3VOR > 0x00)//当前音量没有达到最小时
699 3 {
700 4 MP3VOR -= 0x01;//右声道音量增大一档
701 4 MP3VOL -= 0x01;//左声道音量增大一档
702 4 }
703 3
704 3 break;
705 3 }
706 2 case EFFECTION ://如果处于音效调节功能
707 2 {
708 3 if (MP3BAS > 7)
709 3 {//降低重音效果
710 4 MP3BAS -= 7;
711 4 MP3MED = 0x0f;
712 4 MP3TRE += 7;
713 4 }
714 3 break;
715 3 }
716 2 case SELECTSONG ://如果处理MP3选取功能
717 2 {
718 3 if (NowPlaying == (NumofSong - 1))
719 3 {
720 4 NowPlaying = 0;//如果已经处于最后一首了,则指向第一首
721 4 MP3InitFlag = 1;
722 4 }
723 3 else
724 3 {
725 4 NowPlaying++; //否则,指向下一首
726 4 MP3InitFlag = 1;
727 4 }
728 3 ChangeSong = 1; //置选曲标志位
729 3 /*if(MP3InitFlag){
730 3 PlayInit(&SONG[11*NowPlaying]);
731 3 MP3InitFlag=0;
732 3 }*/
733 3 break;
C51 COMPILER V7.20 32MUSB 03/21/2007 13:34:25 PAGE 13
734 3 }
735 2 default : break;
736 2 }
737 1
738 1 }
739
740 void Previous()//按下"上一首/音量增大"键时的处理
741 {
742 1 switch (CurrentFun)
743 1 {
744 2 case VOLUME ://如果当前处于音量调节功能
745 2 {
746 3 if (MP3VOR < 0x1f)//当前音量没有达到最大时
747 3 {
748 4 MP3VOR += 0x01;//右声道音量增大一档
749 4 MP3VOL += 0x01;//左声道音量增大一档
750 4 }
751 3
752 3 break;
753 3 }
754 2
755 2 case EFFECTION ://如果处于音效调节功能
756 2 {
757 3 if (MP3BAS < 0x1d)
758 3 {//增加重音效果
759 4 MP3BAS += 7;
760 4 MP3MED = 0x0f;
761 4 MP3TRE -= 7;
762 4 }
763 3 break;
764 3 }
765 2
766 2 case SELECTSONG ://如果处理MP3选取功能
767 2 {
768 3 if (NowPlaying > 0)
769 3 {
770 4 NowPlaying--;//如果当前播放歌曲不为第一首,则指向上一首
771 4 MP3InitFlag = 1;
772 4 }
773 3 else
774 3 {
775 4 NowPlaying = NumofSong - 1;//如果当前已经到达第一首,则指向最后一首
776 4 MP3InitFlag = 1;
777 4 }
778 3 ChangeSong = 1; //置选曲标志位
779 3 /*if(MP3InitFlag){
780 3 PlayInit(&SONG[11*NowPlaying]);
781 3 MP3InitFlag=0;
782 3 }*/
783 3 break;
784 3 }
785 2 default:break;
786 2 }
787 1
788 1 }
789
790 void PlayPause()
791 {
792 1 PlayState = !PlayState; //按一下播放键时,改变播放状态
793 1
794 1 }
795
C51 COMPILER V7.20 32MUSB 03/21/2007 13:34:25 PAGE 14
796 void key_interrupt() interrupt 11
797 {
798 1 unsigned char i = 100;
799 1 EA = 0; //关中断
800 1 IEN1 &= (~EKB); //Enable KeyBoard Interrupt
801 1
802 1 while (i)
803 1 {
804 2 i--;
805 2 }
806 1
807 1 i = KBSTA; //取键盘中断位
808 1 switch (i)
809 1 { //依次处理四个键中的某个键被按下时的情况
810 2 case 1 : Func(); break;
811 2 case 2 : Next(); break;
812 2 case 4 : Previous(); break;
813 2 case 8 : PlayPause(); break;
814 2 default : break;
815 2 }
816 1 IEN1 |= EKB; //Enable KeyBoard Interrupt
817 1
818 1 EA = 1; //开中断
819 1 return;
820 1 }
821 void main()
822 {
823 1 printu(">>>> UP-TECH MP3 USB Disk V2.00 <<<<\n");
824 1
825 1 if(P3_4)
826 1 {
827 2 printu("Entering USB Mode...\n");//输出进入U盘功能的信息
828 2
829 2 AtmelUSBInit(4, 11, 0);//PLL时钟配置,
830 2 EpEnable();//端点初始化
831 2 UEPNUM = 0;//指向端点0
832 2 BulkPoint = Page_Buf;
833 2
834 2 while(1)
835 2 {
836 3 //轮询,检查相应端点是否有中断产生
837 3 if(UEPINT & EP1INT) main_txdone();//Bulk-Out端点处理
838 3 if(UEPINT & EP2INT) main_rxdone();//Bulk-In端点处理
839 3 if(UEPINT & EP0INT) Ep0Int();//端点0处理
840 3
841 3 UEPINT = 0;//清中断状态寄存器
842 3 }
843 2 }
844 1 else
845 1 {
846 2 printu("Entering MP3 Mode...\n");
847 2
848 2 Flash_Reset();//Flash复位
*** WARNING C206 IN LINE 848 OF 32MUSB.C: 'Flash_Reset': missing function-prototype
849 2 Init();//MP3初始化
850 2 KeyBoardInit();//键盘初始化
851 2
852 2 MP3InitFlag = 1;
853 2 EA = 1;//开中断,键盘可以开始工作
854 2
855 2 NumofSong = GetMP3List();//得到U盘中的MP3歌曲列表
856 2 printuf("Song:%x\n", NumofSong);//输出歌曲总数信息
C51 COMPILER V7.20 32MUSB 03/21/2007 13:34:25 PAGE 15
857 2
858 2 if(NumofSong == 0)
859 2 {
860 3 printu("There is no MP3 file in USB Disk!\n");
861 3 }
862 2
863 2 P3_5 = 0;//打开USB灯亮
864 2
865 2 while(1)
866 2 {
867 3 if(NumofSong != 0)
868 3 {
869 4 if(MP3InitFlag)
870 4 {
871 5 PlayInit(&SONG[11 * NowPlaying]);
872 5 MP3InitFlag = 0;
873 5 }
874 4 PlayMP3(&SONG[11 * NowPlaying]);//如果处于播放状态,则播放当前歌曲
875 4 }
876 3 if(NowPlaying == NumofSong)
877 3 {
878 4 //PlayState = STOP; //全部歌曲播放完了,播放器停止
879 4 NowPlaying = 0;//循环播放
880 4 }
881 3 }
882 2
883 2 }
884 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2334 ----
CONSTANT SIZE = 422 ----
XDATA SIZE = 101 63
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?