📄 mp3.lst
字号:
613 void KeyBoardInit()//<<<<<------------------------change by kent-------------------------------------
614 {
615 1 P1 = 0x0f; //将端口1的低四位,即键盘对应的4位置1
616 1 KBCON = 0x00;//设置键盘有效模式为低电平有效,并使能中断Low Level,Enable Interrupt
617 1 IEN1 = IEN1 | EKB; //使能键盘中断Enable KeyBoard Interrupt
618 1
619 1 }
620
621 void Func()
622 {
623 1 if (CurrentFun < 3)
624 1 {
625 2 CurrentFun++;//在选曲/音量调节/音效调节三者间切换
626 2 }
627 1 else if (CurrentFun == 3)
628 1 {
629 2 CurrentFun = 1;
630 2 }
631 1 }
632
633 void Next()//按下"下一首/音量减小"键时的处理
634 {
635 1
636 1 switch (CurrentFun)
637 1 {//如果当前处于音量调节功能
638 2 case VOLUME :
639 2 {
640 3 if (MP3VOR > 0x00)//当前音量没有达到最小时
641 3 {
642 4 MP3VOR -= 0x01;//右声道音量增大一档
643 4 MP3VOL -= 0x01;//左声道音量增大一档
644 4 }
645 3
646 3 break;
647 3 }
648 2 case EFFECTION ://如果处于音效调节功能
649 2 {
650 3 if (MP3BAS > 7)
651 3 {//降低重音效果
652 4 MP3BAS -= 7;
653 4 MP3MED = 0x0f;
654 4 MP3TRE += 7;
655 4 }
656 3 break;
657 3 }
658 2 case SELECTSONG ://如果处理MP3选取功能
659 2 {
660 3 if (NowPlaying == (NumofSong - 1))
661 3 {
662 4 NowPlaying = 0;//如果已经处于最后一首了,则指向第一首
663 4 MP3InitFlag = 1;
664 4 }
665 3 else
666 3 {
667 4 NowPlaying++; //否则,指向下一首
668 4 MP3InitFlag = 1;
669 4 }
670 3 ChangeSong = 1; //置选曲标志位
671 3 /*if(MP3InitFlag){
C51 COMPILER V7.50 MP3 03/16/2006 09:11:14 PAGE 12
672 3 PlayInit(&SONG[11*NowPlaying]);
673 3 MP3InitFlag=0;
674 3 }*/
675 3 break;
676 3 }
677 2 default : break;
678 2 }
679 1
680 1 }
681
682 void Previous()//按下"上一首/音量增大"键时的处理
683 {
684 1 switch (CurrentFun)
685 1 {
686 2 case VOLUME ://如果当前处于音量调节功能
687 2 {
688 3 if (MP3VOR < 0x1f)//当前音量没有达到最大时
689 3 {
690 4 MP3VOR += 0x01;//右声道音量增大一档
691 4 MP3VOL += 0x01;//左声道音量增大一档
692 4 }
693 3
694 3 break;
695 3 }
696 2
697 2 case EFFECTION ://如果处于音效调节功能
698 2 {
699 3 if (MP3BAS < 0x1d)
700 3 {//增加重音效果
701 4 MP3BAS += 7;
702 4 MP3MED = 0x0f;
703 4 MP3TRE -= 7;
704 4 }
705 3 break;
706 3 }
707 2
708 2 case SELECTSONG ://如果处理MP3选取功能
709 2 {
710 3 if (NowPlaying > 0)
711 3 {
712 4 NowPlaying--;//如果当前播放歌曲不为第一首,则指向上一首
713 4 MP3InitFlag = 1;
714 4 }
715 3 else
716 3 {
717 4 NowPlaying = NumofSong - 1;//如果当前已经到达第一首,则指向最后一首
718 4 MP3InitFlag = 1;
719 4 }
720 3 ChangeSong = 1; //置选曲标志位
721 3 /*if(MP3InitFlag){
722 3 PlayInit(&SONG[11*NowPlaying]);
723 3 MP3InitFlag=0;
724 3 }*/
725 3 break;
726 3 }
727 2 default:break;
728 2 }
729 1
730 1 }
731
732 void PlayPause()
733 {
C51 COMPILER V7.50 MP3 03/16/2006 09:11:14 PAGE 13
734 1 PlayState = !PlayState; //按一下播放键时,改变播放状态
735 1
736 1 }
737
738 void key_interrupt() interrupt 11
739 {
740 1 unsigned char i = 100;
741 1 EA = 0; //关中断
742 1 IEN1 &= (~EKB); //Enable KeyBoard Interrupt
743 1
744 1 while (i)
745 1 {
746 2 i--;
747 2 }
748 1
749 1 i = KBSTA; //取键盘中断位
750 1 switch (i)
751 1 { //依次处理四个键中的某个键被按下时的情况
752 2 case 1 : Func(); break;
753 2 case 2 : Next(); break;
754 2 case 4 : Previous(); break;
755 2 case 8 : PlayPause(); break;
756 2 default : break;
757 2 }
758 1 IEN1 |= EKB; //Enable KeyBoard Interrupt
759 1
760 1 EA = 1; //开中断
761 1 return;
762 1 }
763 //<<<<------------------------change by kent---------------------------------------------------
764 void main()
765 {
766 1
767 1 // int i,j;
768 1 // printu("UP-TECH MP3 Player Test!\n");
769 1 // P3_5 = 0x01;//USBLED off
770 1 // P3_3 = 0; //P3_3=0 LCD Power off,P3_3=1 LCD Power on
771 1
772 1 printu("Entering MP3...\n");
773 1 Flash_Reset();//Flash复位
774 1 Init();//MP3初始化
775 1 //AUDCLK|=0x0B;printuf("%x\n",AUDCLK);
776 1 KeyBoardInit();//键盘初始化
777 1 MP3InitFlag = 1;
778 1 EA = 1;//开中断,键盘可以开始工作
779 1 NumofSong = GetMP3List();//得到U盘中的MP3歌曲列表
780 1 printuf("Song : %x\n", NumofSong);//输出歌曲总数信息
781 1 if (NumofSong == 0)
782 1 {
783 2 printu("There is no MP3 file in USB Disk!\n");
784 2 }
785 1 //P3_5=0;//打开USB灯亮
786 1
787 1 while (1)
788 1 {
789 2 if (NumofSong != 0)
790 2 {
791 3 if (MP3InitFlag)
792 3 {
793 4 PlayInit(&SONG[11 * NowPlaying]);
794 4 MP3InitFlag = 0;
795 4 }
C51 COMPILER V7.50 MP3 03/16/2006 09:11:14 PAGE 14
796 3 PlayMP3(&SONG[11 * NowPlaying]);//如果处于播放状态,则播放当前歌曲
797 3 }
798 2 if (NowPlaying == NumofSong) PlayState = STOP; //全部歌曲播放完了,播放器停止
799 2 }
800 1
801 1 }
802
803
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2079 ----
CONSTANT SIZE = 277 ----
XDATA SIZE = 313 63
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -