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