找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14037|回复: 2
打印 上一主题 下一主题
收起左侧

基于stm32的TFTLCD屏图片显示源码

[复制链接]
跳转到指定楼层
楼主
基于stm32的TFTLCD屏图片显示
单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"  
  6. #include "key.h"     
  7. #include "usmart.h"
  8. #include "malloc.h"
  9. #include "sdio_sdcard.h"  
  10. #include "w25qxx.h"   
  11. #include "ff.h"  
  12. #include "exfuns.h"   
  13. #include "text.h"
  14. #include "piclib.h"        
  15. #include "string.h"               
  16. #include "math.h"




  17. //得到path路径下,目标文件的总个数
  18. //path:路径                    
  19. //返回值:总有效文件数
  20. u16 pic_get_tnum(u8 *path)
  21. {         
  22.         u8 res;
  23.         u16 rval=0;
  24.          DIR tdir;                         //临时目录
  25.         FILINFO tfileinfo;        //临时文件信息        
  26.         u8 *fn;                                                                                          
  27.     res=f_opendir(&tdir,(const TCHAR*)path);         //打开目录
  28.           tfileinfo.lfsize=_MAX_LFN*2+1;                                //长文件名最大长度
  29.         tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize);//为长文件缓存区分配内存
  30.         if(res==FR_OK&&tfileinfo.lfname!=NULL)
  31.         {
  32.                 while(1)//查询总的有效文件数
  33.                 {
  34.                 res=f_readdir(&tdir,&tfileinfo);                       //读取目录下的一个文件
  35.                 if(res!=FR_OK||tfileinfo.fname[0]==0)break;        //错误了/到末尾了,退出                  
  36.                      fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);                        
  37.                         res=f_typetell(fn);        
  38.                         if((res&0XF0)==0X50)//取高四位,看看是不是图片文件        
  39.                         {
  40.                                 rval++;//有效文件数增加1
  41.                         }            
  42.                 }  
  43.         }
  44.         return rval;
  45. }
  46. int main(void)
  47. {         
  48.         u8 res;
  49.          DIR picdir;                         //图片目录
  50.         FILINFO picfileinfo;//文件信息
  51.         u8 *fn;                           //长文件名
  52.         u8 *pname;                        //带路径的文件名
  53.         u16 totpicnum;                 //图片文件总数
  54.         u16 curindex;                //图片当前索引
  55.         u8 key;                                //键值
  56.         u8 pause=0;                        //暂停标记
  57.         u8 t;
  58.         u16 temp;
  59.         u16 *picindextbl;        //图片索引表
  60.          
  61.         delay_init();                     //延时函数初始化         
  62.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  63.         uart_init(115200);                 //串口初始化为115200
  64.          usmart_dev.init(72);                //初始化USMART               
  65.          LED_Init();                                          //初始化与LED连接的硬件接口
  66.         KEY_Init();                                        //初始化按键
  67.         LCD_Init();                                           //初始化LCD   
  68.         W25QXX_Init();                                //初始化W25Q128
  69.          my_mem_init(SRAMIN);                //初始化内部内存池
  70.         exfuns_init();                                //为fatfs相关变量申请内存  
  71.          f_mount(fs[0],"0:",1);                 //挂载SD卡
  72.          f_mount(fs[1],"1:",1);                 //挂载FLASH.
  73. POINT_COLOR=RED;      
  74.         while(font_init())                 //检查字库
  75.         {            
  76.                 LCD_ShowString(30,50,200,16,16,"Font Error!");
  77.                 delay_ms(200);                                 
  78.                 LCD_Fill(30,50,240,66,WHITE);//清除显示            
  79.                 delay_ms(200);                                 
  80.         }           
  81.          Show_Str(30,50,200,16,"ELITE STM32F1开发板",16,0);                                             
  82.         Show_Str(30,70,200,16,"图片显示程序",16,0);                                             
  83.         Show_Str(30,90,200,16,"KEY0:NEXT KEY1:PREV",16,0);                                             
  84.         Show_Str(30,110,200,16,"KEY_UP:PAUSE",16,0);                                             
  85.         Show_Str(30,130,200,16,"正点原子@ALIENTEK",16,0);                                             
  86.         Show_Str(30,150,200,16,"2015年1月20日",16,0);
  87.          while(f_opendir(&picdir,"0:/PICTURE"))//打开图片文件夹
  88.          {            
  89.                 Show_Str(30,170,240,16,"PICTURE文件夹错误!",16,0);
  90.                 delay_ms(200);                                 
  91.                 LCD_Fill(30,170,240,186,WHITE);//清除显示            
  92.                 delay_ms(200);                                 
  93.         }  
  94.         totpicnum=pic_get_tnum("0:/PICTURE"); //得到总有效文件数
  95.           while(totpicnum==NULL)//图片文件为0               
  96.          {            
  97.                 Show_Str(30,170,240,16,"没有图片文件!",16,0);
  98.                 delay_ms(200);                                 
  99.                 LCD_Fill(30,170,240,186,WHITE);//清除显示            
  100.                 delay_ms(200);                                 
  101.         }
  102.           picfileinfo.lfsize=_MAX_LFN*2+1;                                                //长文件名最大长度
  103.         picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize);        //为长文件缓存区分配内存
  104.          pname=mymalloc(SRAMIN,picfileinfo.lfsize);                                //为带路径的文件名分配内存
  105.          picindextbl=mymalloc(SRAMIN,2*totpicnum);                                //申请2*totpicnum个字节的内存,用于存放图片索引
  106.          while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)//内存分配出错
  107.          {            
  108.                 Show_Str(30,170,240,16,"内存分配失败!",16,0);
  109.                 delay_ms(200);                                 
  110.                 LCD_Fill(30,170,240,186,WHITE);//清除显示            
  111.                 delay_ms(200);                                 
  112.         }         
  113.         //记录索引
  114.     res=f_opendir(&picdir,"0:/PICTURE"); //打开目录
  115.         if(res==FR_OK)
  116.         {
  117.                 curindex=0;//当前索引为0
  118.                 while(1)//全部查询一遍
  119.                 {
  120.                         temp=picdir.index;                                                                //记录当前index
  121.                 res=f_readdir(&picdir,&picfileinfo);                       //读取目录下的一个文件
  122.                 if(res!=FR_OK||picfileinfo.fname[0]==0)break;        //错误了/到末尾了,退出                  
  123.                      fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);                        
  124.                         res=f_typetell(fn);        
  125.                         if((res&0XF0)==0X50)//取高四位,看看是不是图片文件        
  126.                         {
  127.                                 picindextbl[curindex]=temp;//记录索引
  128.                                 curindex++;
  129.                         }            
  130.                 }
  131.         }   
  132.         Show_Str(30,170,240,16,"开始显示...",16,0);
  133.         delay_ms(1500);
  134.         piclib_init();                                                                                //初始化画图                     
  135.         curindex=0;                                                                                        //从0开始显示
  136.            res=f_opendir(&picdir,(const TCHAR*)"0:/PICTURE");         //打开目录
  137.         while(res==FR_OK)//打开成功
  138.         {        
  139.                 dir_sdi(&picdir,picindextbl[curindex]);                        //改变当前目录索引           
  140.         res=f_readdir(&picdir,&picfileinfo);                       //读取目录下的一个文件
  141.         if(res!=FR_OK||picfileinfo.fname[0]==0)break;        //错误了/到末尾了,退出
  142.              fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);                        
  143.                 strcpy((char*)pname,"0:/PICTURE/");                                //复制路径(目录)
  144.                 strcat((char*)pname,(const char*)fn);                          //将文件名接在后面
  145.                  LCD_Clear(BLACK);
  146.                  ai_load_picfile(pname,0,0,lcddev.width,lcddev.height,1);//显示图片   
  147.                 Show_Str(2,2,240,16,pname,16,1);                                 //显示图片名字
  148.                 t=0;
  149.                 while(1)
  150.                 {
  151.                         key=KEY_Scan(0);                //扫描按键
  152.                         if(t>250)key=1;                        //模拟一次按下KEY0   
  153.                         if((t%20)==0)LED0=!LED0;//LED0闪烁,提示程序正在运行.
  154.                         if(key==KEY1_PRES)                //上一张
  155.                         {
  156.                                 if(curindex)curindex--;
  157.                                 else curindex=totpicnum-1;
  158.                                 break;
  159.                         }else if(key==KEY0_PRES)//下一张
  160.                         {
  161.                                 curindex++;                           
  162.                                 if(curindex>=totpicnum)curindex=0;//到末尾的时候,自动从头开始
  163.                                 break;
  164.                         }else if(key==WKUP_PRES)
  165.                         {
  166.                                 pause=!pause;
  167.                                 LED1=!pause;         //暂停的时候LED1亮.  
  168.                         }
  169.                         if(pause==0)t++;
  170.                         delay_ms(10);
  171.                 }                                            
  172.                 res=0;  
  173.         }                                                                                          
  174.         myfree(SRAMIN,picfileinfo.lfname);        //释放内存                           
  175.         myfree(SRAMIN,pname);                                //释放内存                           
  176.         myfree(SRAMIN,picindextbl);                        //释放内存               
  177. }
复制代码

下载:
实验38 图片显示实验.rar (1.65 MB, 下载次数: 280)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:541246 发表于 2019-6-27 16:01 | 只看该作者
正需要这个程序呢
回复

使用道具 举报

板凳
ID:805530 发表于 2020-10-12 21:12 | 只看该作者
请问这个文件的工程在哪啊,怎么整体打开啊
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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