⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picviewer.c

📁 STM32不完全手册 例程源码 29个
💻 C
字号:
#include "picviewer.h"
#include "gui.h"			   
#include "lcd.h"			 
#include "delay.h"
#include "text.h"
#include "touch.h"
#include "fat.h"
#include "sysfile.h"
#include "jpegbmp.h"
#include "usart.h"	
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//综合实验 驱动代码		 					    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/6/6
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////	 

 
//图片浏览器
//支持FAT32/16文件系统的浏览.	  
void Pic_Viewer(void)
{		    
	u8 key,temp;
	FileInfoStruct *FileInfo;		 
	u16 pic_cnt=0;//当前目录下图片文件的个数
	u16 index=0;  //当前选择的文件编号	
	u8 enout=0; 
	u8 keycnt=0; 
				    
	u16 tcnt=0;	
	u8 pause=0;//暂停与否标志	    
	LCD_Clear(WHITE);
	//从根目录开始浏览
	if(FAT32_Enable)Cur_Dir_Cluster=FirstDirClust;//根目录簇号
 	else Cur_Dir_Cluster=0;						   
	Fat_Dir_Cluster=Cur_Dir_Cluster;//父目录就是当前目录    			   	  
	while(1)
	{
BROS:	 							  			 
		Load_Gui_Bro("选择");//显示GUI界面	
		POINT_COLOR=WHITE;	 
		Show_Str(88,2,"数码相框",16,0x01);//叠加模式,非自动换行
		index=File_Browse(T_JPG|T_JPEG|T_BMP);//浏览文件夹    
		if(!index)return;//结束浏览,退出此功能!!!!!

		pic_cnt=0;	 
		Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPG|T_JPG|T_BMP,&pic_cnt);//获取当前文件夹下面的目标文件个数 
		Pen_Point.Key_Sta=Key_Up;         //释放显示期间的触发 
		FileInfo=&F_Info[0];//开辟暂存空间.
		while(1)
		{
			Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPG|T_JPG|T_BMP,&index);//得到这张图片的信息	 
			LCD_Clear(WHITE);//清屏,加载下一幅图片的时候,一定清屏   
			AI_LoadPicFile(FileInfo,0,0,240,320);//显示图片	   
			POINT_COLOR=RED;
			Show_Str(0,0,FileInfo->F_Name,16,0x03);//自动换行,叠加
			Pen_Point.Key_Sta=Key_Up;//释放显示期间的触发 
			key=0;enout=0;
			tcnt=0; 	 
			while(1)
			{
	 			temp=AI_Read_TP(30);	    
				if(temp)//按键按下,并且支持点连按 
				{	  		  
					if(enout&&Is_In_Area(200,300,40,20))
					{
						goto BROS;
					};//返回 

					key=Touch_To_Num(7);	
 				 	if(key==KEY_NEXT||key==KEY_PREV)//向上/向下按的时候,要先确定是否松开了
					{
						if(Pen_Point.Key_Reg&0x80)key=0;//没经过松开	 
					}		 											    
					if((key==KEY_FUNC)&&(keycnt==0)&&((Pen_Point.Key_Reg&0x80)==0))pause=!pause;//单次按下,则暂停取反	 
					Pen_Point.Key_Reg|=0x80;//标记按下
				}else 
				{
					Pen_Point.Key_Reg&=~0x80;//标记松开
					keycnt=0;
				}   	 			  		
				if(key)
				{								 
 					switch(key)
					{
						case KEY_PREV:	  
							enout=0;
							if(index>1)index--;
							else index=pic_cnt;//到最后一副(循环) 
							break;	
						case KEY_NEXT:
							enout=0; 
		   					index++;
							if(index>pic_cnt)index=1;//显示第一副,循环
							break;
						case KEY_FUNC://短按暂停,长按退出
							keycnt++;
							tcnt=0;//清空时间计数器	    
							if(keycnt>=20)
							{ 				 
								enout=1;//使能退出
								keycnt=0;			  
							 	POINT_COLOR=DARKBLUE;//深蓝色	 
								LCD_DrawLine(0,297,239,297);
							 	LCD_Fill(0,298,239,308,LIGHTBLUE);//填充底部颜色(浅蓝色)	
							 	LCD_Fill(0,308,239,319,GRAYBLUE); //填充底部颜色(灰蓝色)	  	   
								POINT_COLOR=WHITE;//白色字体
								Show_Str(203,300,"返回",16,0x01);    //叠加模式,非自动恍  
							} 	
					}
					if(key!=KEY_FUNC)break;//上下翻页		  
					key=0;//清除键值		
					delay_ms(100); 
				}   
				delay_ms(1);  
				if(tcnt>=3000 && pause==0)//延迟时间到了
				{	 
					tcnt=0;
   					index++;
					if(index>pic_cnt)index=1;//显示第一副,循环 
					break; 
				}else if(tcnt%200==0)
				{
					if(pause==0)LED0=!LED0;//闪烁,证明是自动播放
					else LED0=0;//常亮,证明是暂停
				}
				tcnt++;//时间累加			 
			}
		}
	}			 
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -