OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6179|回复: 6

原子问个问题啊。。

[复制链接]

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
发表于 2013-9-24 22:43:25 | 显示全部楼层 |阅读模式

我把战舰的图片显示实验,copy到MINI板上,图片没有显示啊。FATFS文件系统没有问题。但是就是不显示啊,FATFS打开目录,读取文件都没有问题,但是图片不显示,移植到MINI板可能是什么原因出现这个问题啊?求解,上源码。
#include "sys.h"
#include "usart.h"  
#include "delay.h" 
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd.h"   
#include "rtc.h"
#include "wkup.h"  
#include "dma.h"
#include "24cxx.h"
#include "flash.h"   
#include "mmc_sd.h"     
#include "text.h"    
#include "spi.h"
#include "string.h"  
#include "malloc.h" 
#include "exfuns.h"
#include "usmart.h"    
#include "touch.h"   
#include "usart2.h"
#include "piclib.h"
 
//得到path路径下,目标文件的总个数
//path:路径     
//返回值:总有效文件数
u16 pic_get_tnum(u8 *path)
{  
 u8 res;
 u16 rval=0;
  DIR tdir;    //临时目录
 FILINFO tfileinfo; //临时文件信息 
 u8 *fn;                   
    res=f_opendir(&tdir,(const TCHAR*)path); //打开目录
   tfileinfo.lfsize=_MAX_LFN*2+1;      //长文件名最大长度
 tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize); //为长文件缓存区分配内存
 if(res==FR_OK&&tfileinfo.lfname!=NULL)
 {
  while(1)//查询总的有效文件数
  {
         res=f_readdir(&tdir,&tfileinfo);         //读取目录下的一个文件
         if(res!=FR_OK||tfileinfo.fname[0]==0)break; //错误了/到末尾了,退出   
       fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);   
   res=f_typetell(fn); 
   if((res&0XF0)==0X50)//取高四位,看看是不是图片文件 
   {
    rval++;//有效文件数增加1
   }    
  } 
 }
 return rval;
}
 // PICTURE  照片
int main(void)
{
    u8  res;  
 u8  t;
    DIR picdir;    //图片目录
 FILINFO picfileinfo;//文件信息
 u8 *pname;   //带路径的文件名
 u16 totpicnum;   //图片文件总数
 u16 *picindextbl; //图片索引表
 u16 curindex;  //图片当前索引
 u8 *fn;      //长文件名
 u8 pause=0;   //暂停标记
 u16 temp;  
 u8 key;
 //u8 fontok=0;
   //u32 total,free;  
    Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);   //延时初始化
 uart_init(72,9600);  //串口1初始化
 LCD_Init();    //初始化液晶
 LED_Init();          //LED初始化 
 KEY_Init();    //按键初始化 
 usmart_dev.init(72); //usmart初始化 
 TP_Init();    //初始化触摸屏
 mem_init(SRAMIN);  //初始化内部内存池    
  exfuns_init();   //为fatfs相关变量申请内存 
   f_mount(0,fs[0]);   //挂载SD卡(注册一个工作区)
    POINT_COLOR=RED;    
 while(SD_Initialize())     //检测SD卡
 {
  LCD_ShowString(60,150,200,16,16,"SD Card Error!");
  delay_ms(200);
  LCD_Fill(60,150,240,150+16,WHITE);//清除显示    
  delay_ms(200);
  LED0=!LED0;//DS0闪烁
 } 
 //key=KEY_Scan();  
 //fontok=font_init();  //检查字库是否OK
 while(font_init())  //检查字库是否ok
 {
     LCD_ShowString(60,50,200,16,16,"Font Error!");
  delay_ms(200);     
  LCD_Fill(60,50,240,66,WHITE);//清除显示     
 }
 Show_Str(60,60,100,16,"图片显示",16,0); 
 while(f_opendir(&picdir,"0:/PICTURE"))//打开图片文件夹
  {    
  Show_Str(60,100,240,16,"PICTURE文件夹错误!",16,0);
  delay_ms(200);     
  LCD_Fill(60,100,240,166,WHITE);//清除显示     
  delay_ms(200);     
 }    
 totpicnum=pic_get_tnum("0:/PICTURE"); //得到总有效文件数
 while(totpicnum==NULL) //图片文件为0  
  {    
  Show_Str(60,100,240,16,"没有图片文件!",16,0);
  delay_ms(200);     
  LCD_Fill(60,100,240,166,WHITE);//清除显示     
  delay_ms(200);     
 }
 picfileinfo.lfsize=_MAX_LFN*2+1;      //长文件名最大长度
 picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize); //为长文件缓存区分配内存
  pname=mymalloc(SRAMIN,picfileinfo.lfsize);    //为带路径的文件名分配内存
  picindextbl=mymalloc(SRAMIN,2*totpicnum);    //申请2*totpicnum个字节的内存,用于存放图片索引
  while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)//内存分配出错
  {    
  Show_Str(60,150,240,16,"内存分配失败!",16,0);
  delay_ms(200);     
  LCD_Fill(60,150,240,146,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)//取高四位,看看是不是图片文件 
   {
       LCD_ShowString(10,10,80,16,16,"tp test");
    picindextbl[curindex]=temp;//记录索引
    curindex++;
   }    
  }
 }
 Show_Str(60,150,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);//显示图片   
  Show_Str(2,2,240,16,pname,16,1);     //显示图片名字
  t=0;
  while(1)
  {
   key=KEY_Scan();  //扫描按键
   //if(t>250)key=KEY_RIGHT; //模拟一次按下右键    
   if(t>250)key=1; //模拟一次按下KEY0 
   if(key==2)  //上一张(KEY1)
   {
    if(curindex)curindex--;
    else curindex=totpicnum-1;
    break;
   }
   else if(key==1)//下一张(KEY0)
   {
    curindex++;      
    if(curindex>=totpicnum)curindex=0;//到末尾的时候,自动从头开始
    break;
   }//else if(key==KEY_UP)
   else if(key==3)//KEY2
   {
    pause=!pause;
    LED1=!pause;  //暂停的时候LED1亮. 
   }
   if(pause==0)t++;
   delay_ms(10);
     }        
  res=0; 
 }
 myfree(SRAMIN,picfileinfo.lfname); //释放内存      
 myfree(SRAMIN,pname);    //释放内存      
 myfree(SRAMIN,picindextbl);   //释放内存  

}代码太多,上工程。

 

代码.zip

1.79 MB, 下载次数: 92

学电子,学音乐!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-24 23:13:15 | 显示全部楼层
Mini板的七寸电容触摸屏例程,就包含了图片解码和fatfs的移植。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-24 23:13:32 | 显示全部楼层
你只需要把里面的7寸屏驱动,改成2.8的驱动,就OK了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
 楼主| 发表于 2013-9-24 23:17:29 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
好吧,实在不行,我在用哪个历程吧。我还是琢磨琢磨。怎么弄。
学电子,学音乐!!
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
 楼主| 发表于 2013-9-24 23:31:32 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
刚看了,7寸屏哪个用的不是FATFS,是FAT。
学电子,学音乐!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-24 23:51:06 | 显示全部楼层
回复【5楼】XINSI:
---------------------------------
是fatfs!
http://www.openedv.com/posts/list/13558.htm
扩展例程24.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
 楼主| 发表于 2013-9-24 23:57:41 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
哦,扩展实验已经有24了。我没有注意到
学电子,学音乐!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 13:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表