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

📄 _main.c

📁 f340的MP3程序,通过SD卡读入解码器
💻 C
字号:
#include "c8051f340.h"
#include "uart0_f340.h"
#include "Delay.h"
#include "znFAT.h"	
#include "sd.h"	
#include "string.h"

#include "test_mp3.h"
/*********************/
#include<f340_init.h>
#include<intrins.h>

sbit yy=P2^4;
sbit Tt=P0^1;
sbit ki=P0^2;
static k;
unsigned int Xx,Z,time;
/****************************/
unsigned long i,h,AddrTemp,sector,fla;
unsigned char Dev_No;  //设备号
struct znFAT_Init_Arg *pArg; //用于指针文件系统参数集合的指针
struct znFAT_Init_Arg Init_Arg_SDCARD; //文件系统参数集合,用于记录文件系统的重要参数
struct FileInfoStruct FileInfo;
uchar buffer[512];
/******************************************************/
 unsigned  int  code num[]={100,106,112,118,124,130,136,142,148,153,
					 158,163,168,172,177,180,184,187,190,192,
					 195,196,198,199,199,200,199,199,198,196,
					 195,192,190,187,184,180,177,172,168,163,
					 158,153,148,142,136,130,124,118,112,106,
					 100,93,87,81,75,69,63,57,51,46,41,36,31,
					 27,22,19,15,12,9,7,4,3,1,
					 0,0,0,0,0,1,3,4,7,9,
					 12,15,19,22,27,31,36,41,46,51,
					 57,63,69,75,81,87,93,99
                    };
void main()
{
	
	 h=0;
	 fla=1;
	f340_io_osc_init();
   OSCICN=0x83;	 //内部高频振荡器控制寄存器
 
 
  /*******************************/
 Init_Device();//oscilator,IO口,uart初始化,uart为高优先级
 znFAT_Device_Init(); //存储设备初始化,即SD卡初始化,SD卡复位
 pArg=&Init_Arg_SDCARD; //指针指向SD卡文件系统参数集合,znFAT将从这个集合中获取参数
 Dev_No=SDCARD;	//设备号为SDCARD,znFAT依照此设备号选择存储设备驱动
 znFAT_Init(); //文件系统初始化
 UART_Put_Inf("总存储容量:(字节)",pArg->Total_Size);	//从串口输出各种参数信息
 UART_Put_Inf("每扇区字节:(个)",pArg->BytesPerSector);
 UART_Put_Inf("每簇扇区:(个)",pArg->SectorsPerClust);
 
  
 						 //"\\解脱-~1."\\飘雪-8~1.WAV"
					 								 //	"\\*.wav"
if(!znFAT_Open_File(&FileInfo,"\\*.WAV",0,1)) //打开SD卡根目录下的test.txt文件
 { 
  UART_Send_Str("打开文件成功\n"); //从串口输出文件参数信息
  UART_Send_Str("文件名为:");
  UART_Send_Str(FileInfo.FileName);
  UART_Send_Enter();
  UART_Put_Inf("文件大小(字节):",FileInfo.FileSize);
  k=FileInfo.FileSize/512;//文件大小/512
  UART_Put_Num(k);
  UART_Put_Inf("文件在当前扇区位置:",FileInfo.FileCurPos);
  UART_Put_Inf("文件当前扇区:",FileInfo.FileCurSector);
  AddrTemp=FileInfo.FileCurSector;//文件的当前扇区
  UART_Put_Num(AddrTemp);
  UART_Put_Inf("文件当前偏移量(字节):",FileInfo.FileCurOffset);
  UART_Send_Str("文件创建时间:\n");
  UART_Put_Num(FileInfo.FileCreateDate.year);UART_Send_Str("年");
  UART_Put_Num(FileInfo.FileCreateDate.month);UART_Send_Str("月");
  UART_Put_Num(FileInfo.FileCreateDate.day);UART_Send_Str("日");
  UART_Put_Num(FileInfo.FileCreateTime.hour);UART_Send_Str("时");
  UART_Put_Num(FileInfo.FileCreateTime.min);UART_Send_Str("分");
  UART_Put_Num(FileInfo.FileCreateTime.sec);UART_Send_Str("秒");
  UART_Send_Enter();
 }
 else
 {
  UART_Send_Str("打开文件失败\n");
 }
 
 /******************************/
  TMR2H=0xfa;	 //定时器2附初值,定时50ms,进入中断
  TMR2L=0x24;
  TMR2RLH=0Xfa; //重载寄存器
  TMR2RLL=0x24;
  ET2=1;//开定时器2中断
  EA=1; //开总中断
  TR2=1; //开定时器2   
 /*******************************************************/
 if(yy==1) {
 	TH1=(65536-Xx)/256;
 	TL0=(65536-Xx)%256;
	yy=0;}
  else { TH1=(64036+Xx)/256;
  TL1=(64036+Xx)%256;
  yy=1;}
  TMOD=0X10;
  CKCON=0X08;
  ET1=1;
  EA=1;
  TR1=1;
	

 while(1)
 { if(sector==k)sector=0;
  if(fla==1 && sector<k  )
		{ 
		   fla=0;
		   SD_Read_Sector(AddrTemp+sector,buffer);
		   sector++;
			
		  }  
    }

 } 
/*while(1)																																																																																																																																									                                                            
 {Tt=0;//if(time==2)TR1=0;
 }*/
 
 /***************************************************/
  void time1() interrupt 3
  {	Tt=0; if(yy==1) {TH1=(65536-Xx)/256;TL1=(65536-Xx)%256;yy=0;}
     else { TH1=(64036+Xx)/256;TL1=(64036+Xx)%256;yy=1;}																																																																																			                                                                                                                                                                           
  	
  }
 /*******************************************/
	  void time2(void) interrupt 5
  {	ki=0;
  															                                                                                                                                                                                                                                                                                                                                                                                                                                      
    TF2H=0;//清定时器高字节溢出标志位
		
	if(time==0)
	 {Z=220;time++;
	  Xx=buffer[Z];
	 }
	 else
	 { Xx=buffer[Z];
	   }
	   Z++;
	  if(Z>511){Z=0;fla=1;}
	/* Xx=num[Z];
	 Z++;
	 if(Z>99)Z=0;
	 */
  
  } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -