📄 mp3.s
字号:
.blkb 2
.area idata
.byte 10,18
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 2,0
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 4,20
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 18,15
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 16,23
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 16,23
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 24,23
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 16,0
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 16,16
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 21,21
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 21,31
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 21,21
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 21,17
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.blkb 2
.area idata
.byte 16,0
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.dbsym e china_bmp _china_bmp A[72:72]c
_vol::
.blkb 2
.area idata
.word 8224
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/bmp.h
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码\mp3.c
.dbsym e vol _vol i
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码\mp3.c
.dbsym e flag _flag c
.area text(rom, con, rel)
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码\mp3.c
.dbfile D:\论文资料\AVRPWM~1\阿莫MP3范例板\MP3范例板\u盘MP3代码/CH375HFB.H
.dbfunc e CH375FileRead _CH375FileRead fc
.even
_CH375FileRead::
.dbline -1
.dbline 656
; #include <iom64v.h>
; #include <macros.h>
; #include <string.h>
; #include <stdio.h>
; #include "1011.h"
; #include "mp3.h"
; #include "375interface.h"
; #include "lcd.h"
; #include "bmp.h"
; #include "delay.h"
;
; unsigned int vol = 0X2020; //音量变量
; unsigned int c; //歌曲INDEX
; unsigned char flag = 0; //停止按键开关量
;
; /* 以下定义的详细说明请看CH375HF9.H文件 */
; #define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */
; #define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */
;
; /* 单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲 */
; #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */
; /* 如果准备使用双缓冲区交替读写,那么不要定义FILE_DATA_BUF_LEN,而是在参数中指定缓冲区起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */
;
; #define CH375_INT_WIR ( PINC & 0x40 ) /* PINC.6, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */
;
; #include "CH375HFB.H"
;
; // By 老圣(13809003593),2006.10.28
; // 将数据指针作为全局量
; UINT16 data_pointer = 0; // 数据指针
; void UpdateData(void);
; void ReadFileData(void);
; void mDelaymS( UINT32 ms )
; {
; UINT16 i;
;
; while ( ms -- )
; {
; for ( i = 2600; i != 0; i -- )
; {
; ;
; }
; }
; }
;
; void mp3_play(char *s);
;
; void main()
; {
; uint u;
; uint i;
; uchar t0, data, t1, t2;
; mp3_port_init();
; LCD_Init();
; LCD_clear();
; LCD_write_String(0,5,"MEGA64L MP3"); // 显示英文字符串
; LCD_draw_map(0,2,AVR_bmp,40,24); // 显示“AVR”位图
; LCD_draw_map(44,2,china_bmp,36,15); // 显示”实验室“位图
; delay_nms(4);
;
;
; // By 老圣(13809003593),2006.10.28
; // 初始化IO后,延时,等待U盘电源稳定
; mDelaymS(200);
;
; vs1003_init();
;
; CH375_PORT_INIT( );
; vs1003_cmd_write(0x03,0X4000); //CLOCK F
;
; DDRE=0x00; //按键输入
; /* 初始化CH375程序库和CH375芯片,操作成功返回0 */
; i=CH375LibInit( );
; //if(i==0) test_1011();
; while ( CH375DiskStatus != DISK_CONNECT )
; xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */
; mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */
;
; /* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */
; for ( i = 0; i < 5; i ++ ) /* 有的U盘总是返回未准备好,不过可以被忽略 */
; {
; if ( CH375DiskReady( ) == ERR_SUCCESS )
; break; /* 查询磁盘是否准备好 */
; }
;
; /* 查询磁盘物理容量 */
; LCD_write_String(0,0,"DiskSize" );
; i = CH375DiskSize( );
; data= (unsigned char)(mCmdParam.DiskSize.mDiskSizeSec >> 11);
; t1=data/100;
; LCD_set_XY(56,0);
; LCD_write_char(t1+48);
; data=data%100;
; t1=data/10;
; LCD_write_char(t1+48);
; t2=data%10;
; LCD_write_char(t2+48);
; LCD_write_String(76,0,"M" );
;
; /*枚举根目寻下的MP3文件*/
; while(1)
; {
;
; for ( c = 0; c < 255; c ++ )
; { /* 最多搜索前255个文件 */
; strcpy( mCmdParam.Open.mPathName,"\\*" ); /* 搜索根目录下文件名*/
; i = strlen( (char *)mCmdParam.Open.mPathName ); /* 计算文件名长度,以处理文件名结束符 */
; mCmdParam.Open.mPathName[ i ] =0xFF; /* 将结束符替换为255说明序号在变量中 */
; CH375vFileSize=c; /*指定搜索的序号,几乎没有上限*/
; i = CH375FileEnumer( ); /* 文件名中含有通配符*,则为搜索文件而不打开 */
; if ( i == ERR_MISS_FILE )
; break; /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */
; if ( i != ERR_SUCCESS )
; break; /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */
; if(CH375vFileSize!=0xFFFFFFFF) /*枚举到MP3文件*/
; {
; u=PINE;
; u=u&0x04;
; if(u==0x00)
; {
; mp3_play( (char *)mCmdParam.Open.mPathName );
; }
; }
; }
; }
; }
;
; // By 老圣(13809003593),2006.10.28
; // 检查按键,并要时检查VS1011的是否需要数据并更新数据
; uchar CheckKey(void)
; {
; uchar key;
; uchar oldKey = KeyNone; // 要返回的按键值,缺省为无按键
; uchar delay;
;
; UpdateData();
;
; while (1)
; {
; key = PINE & KeyMask;
; if (KeyMask != key) // 有键按下
; {
; for (delay = 0;delay < 10;delay++) // 延时
; {
; UpdateData(); // 延时过程中更新数据以避免声音断续
; }
;
; oldKey = key;
; while (1) // 等待按键释放
; {
; key = PINE & KeyMask;
;
; UpdateData(); // 延时过程中更新数据以避免声音断续
;
; if (KeyMask == key) // 键已释放
; {
; return oldKey;
; }
; }
; }
; else // 无键按下
; {
; return oldKey;
; }
; }
;
; return oldKey;
; }
;
; // By 老圣(13809003593),2006.10.28
; // 按键处理
;
; uchar ProcessKey(void)
; {
; uchar key = CheckKey(); // 取得按键
;
; if (KeyNone == key)
; return key;
;
; // 以下为按键处理,注意:没有处理多键同时按下的情况
;
; //ST/PS键按下
; if (!(key & STOP))
; {
; flag ^= 0x01;
; return key;
; }
; //VOLDOWN键按下
; else if (!(key & VOLDOWN))
; {
; vol = vol + ((uint)(2 << 8) + 2);
; if (vol >= 0xFAFA)
; {
; vol=0xFAFA;
; }
; else
; {
; vs1003_cmd_write(0x0b,vol); //每次左右声道VOL减2
; }
; }
; //VOLUP键按下
; else if (!(key & VOLUP))
; {
; vol = vol - ((uint)(2 << 8) + 2);
; if (vol <= 0x0505)
; {
; vol = 0x0505;
; }
; else
; {
; vs1003_cmd_write(0x0b, vol); //每次左右声道VOL加2
; }
; }
; //NEXT键按下
; else if (!(key & NEXTSONG))
; {
; return KeyNextOrPrev; //跳到下一首歌曲
; }
; //PREV键按下
; /*
; else if (!(key & PREVSONG))
; {
; c = c - 2;
; return KeyNextOrPrev; //返回前一首歌曲
; }
; */
; return key;
;
; }
;
; // By 老圣(13809003593),2006.10.28
; // 检查VS1011是否需要数据,若需要则更新(必要时读文件)
; void UpdateData(void)
; {
; uchar i;
;
; if (data_pointer >= 511) // 如果现在的数据不够了,则读数据
; {
; if (mCmdParam.Read.mSectorCount < 1) // 到文件结束了,则直接返回
; {
; return ;
; }
; else // 读数据
; {
; ReadFileData();
; }
; }
;
; if (PINB & MP3_DATA_REQ) // 检查VS1011是否需要数据
; {
; // 一次写32个数据
; for(i = 0;i < 32;i++)
; {
; vs1003_data_write(FILE_DATA_BUF[data_pointer]);
; data_pointer++;
; }
; }
; }
;
; // By 老圣(13809003593),2006.10.28
; // 检查VS1011是否需要数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -