久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14470|回復: 2
收起左側

基于stm32的TFTLCD屏圖片顯示源碼

[復制鏈接]
ID:238635 發表于 2018-10-23 17:10 | 顯示全部樓層 |閱讀模式
基于stm32的TFTLCD屏圖片顯示 SZ9~L8A004]UO7C]R2DN38A.png
單片機源程序如下:
  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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区精品在线 | 成人a免费| 精品九九九 | 日韩中文一区二区三区 | 国产午夜精品一区二区三区四区 | 精品福利一区二区三区 | 久久r久久 | 亚洲免费网 | av在线成人 | 欧美一区二区三区在线免费观看 | 国产精品一二区 | 久久精品亚洲精品国产欧美 | 午夜看电影在线观看 | 天天操天天舔 | 美女在线视频一区二区三区 | 日韩欧美三级在线 | 91精品国产91久久久久青草 | 亚洲美女在线一区 | 久久一热| 国产精品区一区二 | 91精品国产综合久久久久 | 久久成人国产精品 | 亚洲在线| 中文字幕在线视频网站 | 中文字幕一级毛片视频 | 黄a网站 | 一区二区精品 | 成人亚洲精品 | 精品国产一区二区三区久久久蜜月 | 日韩一二三区视频 | 国产午夜精品一区二区三区四区 | 国产精品一区二区在线播放 | 国产大毛片 | 人人艹人人 | 久久精品国产一区二区电影 | 91视在线国内在线播放酒店 | 欧美久久久久 | 欧美视频一级 | 中文字幕国产一区 | 亚洲精品电影在线观看 | 成人精品国产一区二区4080 |