⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.s

📁 AVR单片机ATMEGA64L开发的mp3程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -