📄 info.h~
字号:
#ifndef _INFO_INCLUDED_
#define _INFO_INCLUDED_
#include <mega32.h>
#include <stdio.h>
#include "red.h"
#include "mp3.h"
#include "txt.h"
#include "tea5767.h"
#include "snake.h"
#include "russia.h"
//正点原子@scut 08/09/11
//联合其他头文件的一个头文件,实现一些高层的功能
uchar View_File(void); //目录浏览
void Ico_Chg(uchar fpos,uchar fnum);//显示图标,及选中位置
void Read_RootDir(void); //读取根目录的信息
uchar File_Search(MENU_CONECT CurFile,uchar ord);//搜寻txt/document/music 文件
//显示文件名字
void show_name(uchar list)
{
uchar i;
Cleardisplay(4); //清屏
for(i=0;i<list;i++)LCD_write_String(i,12,m_c[i].LongName,0);
}
//ord:1,向上找 ord:2,向下找 3:从新开始
//check ok 08/09/04
//update:08/09/05 根正了一个向上查找跳跃式的 bug
//curfile 当前选中的的文件信息
//CurDir 当前目录
uchar File_Search(MENU_CONECT CurFile,uchar ord)
{
bit FileLess=0;//第二批目录个数不符合常规要求
uchar num=0;
uint curindex=0;
uint finalindex=0;
{
if(CurFile.FileIndex<=1)return 5;//已经是首部了,直接返回一个结束代码 5
if(ord>1)//向下查找
{
if(ord==3)num=SerarchFile(CurDir.Clust,6,0,0);//第一次进入目录查找
else if(CurFile.Type==6)num=SerarchFile(CurDir.Clust,6,CurFile.FileIndex+1,0);//找文件
if(num==4)return num; //找足了四个
if(CurFile.Type<6)num=SerarchFile(CurDir.Clust,MenuOper,CurFile.FileIndex+1,0);//找音乐
else num=SerarchFile(CurDir.Clust,MenuOper,0,num);
if(num==0)return 5;//最后的文件,直接返回一个结束代码 5
return num;
}
finalindex=CurFile.FileIndex;//获得当前索引
m_c[3].FileIndex=0; //把最后一个文件的索引清掉,以免影响后面
//printf("finalindex:%d\n\n",finalindex);
if(ord==1)//向上查找
{
if(m_c[0].FileIndex<4)FileLess=1;//第二批首目录少于4!!!
do//找文件夹
{
//printf("CurDir.Clust:%d\n",CurDir.Clust);
//printf("curindex:%d\n",curindex);
num=SerarchFile(CurDir.Clust,6,curindex,0);//从0开始找
curindex=m_c[3].FileIndex;
//printf("search file curindex:%d\n",curindex);
//printf("file num:%d\n",num);
if(num<4)break;//文件夹搜索完毕
}while(m_c[3].FileIndex<(finalindex-1));//首先从文件夹搜索
if(FileLess&&num==4)return 4;//目录够了
if(m_c[3].FileIndex==(finalindex-1))return 4;
curindex=0;
do//从mp3搜索
{
//printf("num:%d\n",num);
if(num==4)num=SerarchFile(CurDir.Clust,MenuOper,curindex,0);
else num=SerarchFile(CurDir.Clust,MenuOper,curindex,num);//从0开始找
curindex=m_c[3].FileIndex+1;
//printf("curindex:%d\n",curindex);
}while(m_c[3].FileIndex<(finalindex-1));
return 4;
}
}
}
//读取根目录信息
//check ok 08/09/04
void Read_RootDir(void)
{
//uchar fnum;
//fnum=SerarchFile(RootDir.Clust,6,0,0);//读取根目录
CurDir.Clust=RootDir.Clust; //改变当前目录路径
CurDir.Type=6;//文件夹
CurDir.FileIndex=6;
//show_name(fnum);//显示文件信息
//Ico_Chg(0,fnum);
//MaxFile=fnum;
}
//目录浏览
//check ok 08/09/04
//实现功能:浏览当前目录CurDir下的文件
uchar View_File(void)
{
uchar filenum;
uchar filepos=0;
uchar temp=0;
keyval=0;
filenum=File_Search(CurDir,3);
show_name(filenum);//显示名字
Ico_Chg(0,filenum);
MaxFile=filenum;
//printf("CurDir.clust:%d\n",CurDir.Clust);
//printf("filenum:%d\n",filenum);
while(1)
{
if(READY)keyval=key_process();
if(keyval!=0)
{
switch(keyval)
{
case PREV://向上查找文件
{
if(filepos)filepos--;
else
{
temp=File_Search(m_c[0],1);//到达顶部
if(temp!=5){MaxFile=filenum=temp;filepos=3;}//发生了变化
show_name(filenum);//有清屏操作
}
break;
}
case NEXT://向下查找文件
{
filepos++;
if(filepos>filenum-1)
{
if(filepos==4)
{
temp=File_Search(m_c[3],2);//目录底部
if(temp!=5){MaxFile=filenum=temp;filepos=0;}//发生了变化
else filepos=3;
}else filepos--;//退回原位
show_name(filenum);//有清屏操作
}
break;
}
case PLAY:
{
if(m_c[filepos].Type!=6)return filepos;//非文件夹文件,返回当前选中位置
else CurDir=m_c[filepos];
temp=File_Search(CurDir,3);
if(temp!=5)MaxFile=filenum=temp;//发生了变化
show_name(filenum);//有清屏操作
filepos=0;
m_c[filepos].FileIndex=0;
break;
}
case QUIT:return 4;//跳出这个模式
}
Ico_Chg(filepos,filenum);//显示选定的文件
}
keyval=0;//清除键值
}
}
//显示图标
//fpos 文件的位置
//fnum 文件的个数
//功能:图标位置改变(指示当前选中的文件)
void Ico_Chg(uchar fpos,uchar fnum)
{
uchar t;
for(t=0;t<fnum;t++)
{
if(fpos==t)invt=1;
else invt=0;
if(m_c[t].Type<6)Show_icon(t,0,MenuOper);//显示相应的图标
else Show_icon(t,0,4);//显示音乐图标
}
}
//系统初始化
void init_system(void)
{
uchar t1,t;
uart_init();
LCD_init(); //液晶初始化
LCD_LED=1;//开背光
printf("system initing...\n");//
draw_picture(picture);//显示开机图画
delay_ms(3000);
Cleardisplay(4);//清空显示
LCD_write_cstr(0,20,"System Initing.");
delay_ms(500);
LCD_write_cstr(0,20,"System Initing..");
delay_ms(500);
LCD_write_cstr(0,20,"System Initing...");
delay_ms(500);
spi_init(); //初始化spi
sd_port_init();//sd卡端口初始化
t1=SD_Init(); //sd卡初始化
t=0;
while(t1==0xff)
{
LCD_write_cstr(1,10,"SDcard Init Failed!");
LED=!LED;
delay_ms(500);
t++;
if(t>4)
{
t=0;
t1=SD_Init();
}
}
Cleardisplay(1);
if(DSP[0][0]==0XFF)//初始化eeprom
{
for(t=0;t<5;t++)
for(t1=0;t1<4;t1++)DSP[t][t1]=0;
dspepm=0;
}else //加载默认dsp
{
for(t=0;t<4;t++)voltemp[t]=DSP[dspepm][t];
dspram=dspepm;
}
if(Ch_Value[0]==0xffff)for(t=0;t<30;t++)Ch_Value[0]=0;//初始化CHx
//mp3口初始化
SPCR = 0x50; //提速
SPSR = 0x01; //setup SPI
fatInit(); //查询SDFAT格式 /文件系统初始化
//显示磁盘信息
if(Fat32Enabled)LCD_write_cstr(1,10,"File system:FAT32");
else LCD_write_cstr(1,10,"File System:FAT16");//显示文件系统
LCD_write_cstr(2,22,"Card Size: M");
Show_num(2,82,card_size/100); //显示容量
Show_num(2,94,card_size%100);
delay_ms(1000);
LCD_write_cstr(3,0,"Searching SysFiles..");//开始找系统文件
//printf("fat ok!");
t1=FindSysFile();
Cleardisplay(3);//清除最后一行
switch(t1)
{
case 0:LCD_write_cstr(3,20, "Both Failed!!!");break;//while(1);//死机
case 1:
{
LCD_write_cstr(3,10,"font12.fon Failed!");
delay_ms(1000);
LCD_write_cstr(3,8,"System init Failed!");
while(1);//死机
}
case 2:LCD_write_cstr(3,8,"unitogb.bin Failed!");break;
case 3:LCD_write_cstr(3,20,"Start Successe!");break;
}
if(t1!=3)delay_ms(5000);
else delay_ms(500);
Cleardisplay(4);//清空显示
red_init(); //红外初始化
mp3_port_init();//vs1003端口初始化
Mp3Reset(); //硬复位
vs1003_Reset(); //软复位vs1003
vs1003_init(); //vs1003初始化
radio_init(); //收音机初始化
init_cd3315(Audio_Ch); //初始化cd3315 最后初始化,避免杂声
timer_init(); //定时器中断初始化
En_backlight=1;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -