
下面贴上原子的例程的主函数代码,劳烦懂这个大神给我讲讲原因:
int main(void)
{
u8 res;
DIR picdir; //图片目录
FILINFO picfileinfo;
u8 *fn; //长文件名
u8 *pname; //带路径文件名
u16 totpicnum;
u16 curindex;
u8 key;
u8 pause=0;
u8 t;
u16 temp;
u16 *picindextbl;
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
LCD_Init();
LED_Init();
KEY_Init();
usmart_dev.init(72);
mem_init();
exfuns_init();
f_mount(fs[0],"0:",1);
f_mount(fs[1],"1:",1);
POINT_COLOR=RED;
while(font_init())
{
LCD_ShowString(60,50,200,16,16,"Font Error!");
delay_ms(200);
LCD_Fill(60,50,240,66,WHITE);
delay_ms(200);
}
Show_Str(60,50,200,16,"Mini STM32??·?°?",16,0);
Show_Str(60,70,200,16,"???????????ò",16,0);
Show_Str(60,90,200,16,"KEY0:NEXT KEY1 REV",16,0);
Show_Str(60,110,200,16,"WK_UP AUSE",16,0);
Show_Str(60,130,200,16,"??????×?@ALIENTEK",16,0);
Show_Str(60,150,200,16,"2014?ê3??14??",16,0);
while(f_opendir(&picdir,"0:/PICTURE"))//?ò????????????
{
Show_Str(60,170,240,16,"PICTURE???????í?ó!",16,0);
delay_ms(200);
LCD_Fill(60,170,240,186,WHITE);//????????
delay_ms(200);
}
totpicnum=pic_get_tnum("0:/PICTURE"); //????×????§??????
while(totpicnum==NULL)//??????????0
{
Show_Str(60,170,240,16,"????????????!",16,0);
delay_ms(200);
LCD_Fill(60,170,240,186,WHITE);
delay_ms(200);
}
picfileinfo.lfsize=_MAX_LFN*2+1;
picfileinfo.lfname=mymalloc(picfileinfo.lfsize);
pname=mymalloc(picfileinfo.lfsize);
picindextbl=mymalloc(2*totpicnum);
while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)
{
Show_Str(60,170,240,16,"????·????§°?!",16,0);
delay_ms(200);
LCD_Fill(60,170,240,186,WHITE);//????????
delay_ms(200);
}
//?????÷??
res=f_opendir(&picdir,"0:/PICTURE");
if(res==FR_OK)
{
curindex=0;//?±?°?÷????0
while(1)//?????é????±é
{
temp=picdir.index; //?????±?°index
res=f_readdir(&picdir,&picfileinfo);
if(res!=FR_OK||picfileinfo.fname[0]==0)break;
fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);
res=f_typetell(fn);
if((res&0XF0)==0X50)//????????,??????????????????
{
picindextbl[curindex]=temp;//?????÷??
curindex++;
}
}
}
Show_Str(60,170,240,16,"????????...",16,0);
delay_ms(1500);
piclib_init(); //??????????
curindex=0; //??0????????
res=f_opendir(&picdir,(const TCHAR*)"0:/PICTURE");
while(res==FR_OK)//?ò??????
{
dir_sdi(&picdir,picindextbl[curindex]);
res=f_readdir(&picdir,&picfileinfo);
if(res!=FR_OK||picfileinfo.fname[0]==0)break;
fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);
strcpy((char*)pname,"0:/PICTURE/"); //复制路径
strcat((char*)pname,(const char*)fn); //将文件名接在后面
LCD_Clear(BLACK);
ai_load_picfile(pname,0,0,lcddev.width,lcddev.height,1);//显示图片
Show_Str(2,2,240,16,pname,16,1); //显示图片名
t=0;
while(1)
{
key=KEY_Scan(0); //按键扫描
if(t>250)key=1; //模拟一次按键
if((t%20)==0)LED0=!LED0;//系统指示灯
if(key==KEY1_PRES) //上一张
{
if(curindex)curindex--;
else curindex=totpicnum-1; //最后一张
break;
}else if(key==KEY0_PRES)//下一张
{
curindex=curindex++;
if(curindex>=totpicnum)curindex=0;//到末尾的时候自动从头开始
break;
}else if(key==WKUP_PRES)
{
pause=!pause;
LED1=!pause; //暂停的时候LED1亮
}
if(pause==0)t++;
delay_ms(10);
}
res=0;
}
myfree(picfileinfo.lfname); //释放内存
myfree(pname); //释放内存
myfree(picindextbl); //释放内存
}
|