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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3935|回復: 2
收起左側(cè)

原創(chuàng)基于STM32F407數(shù)碼相框源碼與資料

[復制鏈接]
ID:383374 發(fā)表于 2018-12-7 17:41 | 顯示全部樓層 |閱讀模式
本數(shù)碼相框例程用STM32F407的圖像實驗為模板,調(diào)用TUTCH讀點函數(shù),將屏幕分成3個區(qū)域,左邊的做上一張切換,右的做下一張切換.中間的做暫停,自動播放切換按鈕.
0.png
本實驗將實現(xiàn)如下功能:開機的時候先檢測字庫,然后檢測SD卡是否存在,如果SD卡存在,則開始查找SD卡根目錄下的PICTURE文件夾,如果找到則顯示該文件夾下面的圖片文件(支持bmp、jpg、jpeg或gif格式),循環(huán)顯示,通過按KEY0和KEY2可以快速瀏覽下一張和上一張,KEY_UP按鍵用于暫停/繼續(xù)播放,DS1用于指示當前是否處于暫停狀態(tài)。如果未找到PICTURE文件夾/任何圖片文件,則提示錯誤。同樣我們也是用DS0來指示程序正在運行。

注意:
1,該實驗須自備SD卡一個,并在SD卡根目錄新建:PICTURE文件夾,并放入一些圖片(BMP/JPG/JPEG/GIF)。   
2,如果有些jpg/jpeg格式不能顯示的話,用XP自帶的畫圖工具打開,再保存一下,一般就可以顯示了。
3,JPEG/JPG/BMP圖片,程序會根據(jù)LCD分辨率自動縮放,以適應LCD,而GIF則必須小于屏幕分辨率才可以顯示。

int main(void)
{        
        u8 res;
         DIR picdir;                         //圖片目錄
        FILINFO picfileinfo;//文件信息
        u8 *fn;                           //長文件名
        u8 *pname;                        //帶路徑的文件名
        u16 totpicnum;                 //圖片文件總數(shù)
        u16 curindex;                //圖片當前索引
        u8 key;                                //鍵值
        u8 Touch_key;
        u8 pause=0;                        //暫停標記
        u16 t;
        u16 temp;
        u16 *picindextbl;        //圖片索引表  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
        delay_init(168);  //初始化延時函數(shù)
        uart_init(115200);                //初始化串口波特率為115200
        LED_Init();                                        //初始化LED
        usmart_dev.init(84);                //初始化USMART
         LCD_Init();                                        //LCD初始化
        tp_dev.init();                                //初始化觸摸屏        
         KEY_Init();                                        //按鍵初始化  
        W25QXX_Init();                                //初始化W25Q128
        my_mem_init(SRAMIN);                //初始化內(nèi)部內(nèi)存池
        my_mem_init(SRAMCCM);                //初始化CCM內(nèi)存池
        exfuns_init();                        //為fatfs相關(guān)變量申請內(nèi)存  
  f_mount(fs[0],"0:",1);         //掛載SD卡
         f_mount(fs[1],"1:",1);         //掛載FLASH.
        POINT_COLOR=RED;      
        while(font_init())                 //檢查字庫
        {            
                LCD_ShowString(30,50,200,16,16,"Font Error!");
                delay_ms(200);                                 
                LCD_Fill(30,50,240,66,WHITE);//清除顯示            
                delay_ms(200);                                 
        }
//  TP_Scan(0);
//          Show_Str(30,50,200,16,"初始化成功",16,0);
//        while(1){
//                Touch_key=Touch_Scan();
//                if(Touch_key==1){
//          LCD_Fill(30,50,240,66,WHITE);//清除顯示                                
//                Show_Str(30,50,200,16,"屏幕上方",16,0);
//                }                        
//                if(Touch_key==2){
//                LCD_Fill(30,50,240,66,WHITE);//清除顯示        
//    Show_Str(30,100,200,16,"屏幕下方",16,0);        
//                }

        
while(1){
                        key=KEY_Scan(0);                //掃描按鍵               
                  Touch_key=Touch_Scan();//觸屏按鍵
         Show_Str(30,50,200,16,"小組成員:",16,0);
  Show_Str(30+15,50+30,200,16,"你好,你好,你好",16,0);        
        Show_Str(30,50+200,200,16,"點擊按鍵或屏幕進入圖片顯示",12,0);        
        if((key==KEY1_PRES)||Touch_key==1||(key==KEY0_PRES)||Touch_key==2){
         LCD_Fill(0,0,320,480,WHITE);
                break;
        }
        }

         while(f_opendir(&picdir,"0:/PICTURE"))//打開圖片文件夾
         {            
                Show_Str(30,170,240,16,"PICTURE文件夾錯誤!",16,0);
                delay_ms(200);                                 
                LCD_Fill(30,170,240,186,WHITE);//清除顯示            
                delay_ms(200);                                 
        }  
        totpicnum=pic_get_tnum("0:/PICTURE"); //得到總有效文件數(shù)
          while(totpicnum==NULL)//圖片文件為0               
         {            
                Show_Str(30,170,240,16,"沒有圖片文件!",16,0);
                delay_ms(200);                                 
                LCD_Fill(30,170,240,186,WHITE);//清除顯示            
                delay_ms(200);                                 
        }
          picfileinfo.lfsize=_MAX_LFN*2+1;                                                //長文件名最大長度
        picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize);        //為長文件緩存區(qū)分配內(nèi)存
         pname=mymalloc(SRAMIN,picfileinfo.lfsize);                                //為帶路徑的文件名分配內(nèi)存
         picindextbl=mymalloc(SRAMIN,2*totpicnum);                                //申請2*totpicnum個字節(jié)的內(nèi)存,用于存放圖片索引
         while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)//內(nèi)存分配出錯
         {            
                Show_Str(30,170,240,16,"內(nèi)存分配失敗!",16,0);
                delay_ms(200);                                 
                LCD_Fill(30,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(30,80,240,16,"開始顯示...",16,0);
        delay_ms(1000);
        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;
                autoplay=0;
                while(1)
                {
                        Touch_key=Touch_Scan();//觸屏按鍵
                        key=KEY_Scan(0);                //掃描按鍵
//                        if(t>250)key=1;                        //模擬一次按下KEY0
                        
            if(Touch_key==2){play_flag=!play_flag;        
                                if(play_flag)
//                                Show_Str(30,170+50,240,16,"播放",16,0);
        Show_Str(120,10,240,16,"播放",16,0);                                 
//        else                 Show_Str(30,   +50,240,16,"暫停",16,0);
         else   Show_Str(120,10,240,16,"暫停",16,0);                                 
                        
                        }        
                         if((t>250)&&play_flag==1){ autoplay=1;                        //模擬一次按下KEY0  
                                
                         LCD_ShowxNum(1,1,play_flag,8,16,0);
                        }

                        if((t%20)==0)LED0=!LED0;//LED0閃爍,提示程序正在運行.
                        
                        if((key==KEY1_PRES)||Touch_key==1)                //上一張
                        {
//                        play_flag=0;
                                if(curindex)curindex--;
                                else curindex=totpicnum-1;
                                break;
                        }else if((key==KEY0_PRES)||(Touch_key==3)||(autoplay==1))//下一張
                        {
                                curindex++;                           
                                if(curindex>=totpicnum)curindex=0;//到末尾的時候,自動從頭開始
                                t=0;
                                break;
                        }else if(key==WKUP_PRES||Touch_key==2)
                        {
                                pause=!pause;
                                LED1=!pause;         //暫停的時候LED1亮.  
                        }
//                        if(pause==0)t++;
                        if((t%20)==0)LED0=!LED0;//LED0閃爍,提示程序正在運行.
                        {t++;
                        delay_ms(20);
                        }
                }                                            
                res=0;  
        }                                                                                          
        myfree(SRAMIN,picfileinfo.lfname);        //釋放內(nèi)存                           
        myfree(SRAMIN,pname);                                //釋放內(nèi)存                           
        myfree(SRAMIN,picindextbl);                        //釋放內(nèi)存               
}

全部資料51hei下載地址:
智能相框.rar (9.02 MB, 下載次數(shù): 59)

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1027750 發(fā)表于 2022-5-21 00:53 來自手機 | 顯示全部樓層
我想問一下,芯片連接超時該怎么解決
回復

使用道具 舉報

ID:880136 發(fā)表于 2022-5-22 20:53 | 顯示全部樓層
這些代碼不是正點原子的嗎?,怎么變成原創(chuàng)了
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人h动漫精品一区二区器材 | 国产成人在线免费 | 久久精品亚洲精品国产欧美 | 四虎影视免费在线 | 国产中文字幕在线观看 | 成人精品鲁一区一区二区 | 午夜国产一级片 | 操久久| 久久久久久久久91 | 99热精品在线观看 | 亚洲一区免费视频 | 亚洲国产成人av好男人在线观看 | 国产精品成人69xxx免费视频 | 欧美成年黄网站色视频 | 日本一区不卡 | 亚洲免费人成在线视频观看 | 成人精品国产免费网站 | 91偷拍精品一区二区三区 | 美女亚洲一区 | 成人精品免费视频 | 毛片视频网站 | 成人日批视频 | 91超碰在线观看 | 国产精品美女久久久 | 国产一区二区在线免费 | 亚洲一区精品在线 | 欧美一区二区三区在线播放 | 午夜欧美一区二区三区在线播放 | 视频1区2区 | 日本不卡一区二区三区在线观看 | 91文字幕巨乱亚洲香蕉 | 欧美a视频| 91久久综合 | 国产欧美日韩一区 | 日韩在线播放网址 | 日韩一区av | 中文字幕日韩欧美一区二区三区 | 欧美一区二区三区在线看 | 日本a视频 | 日日操夜夜操天天操 | 亚洲欧洲一区 |