📄 _main.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 + -