精华内容
下载资源
问答
  • 数码相框源码

    2013-04-10 19:14:12
    数码相框 源码 数码 相框 linux下的 下载即可用
  • linux-数码相框

    2019-11-22 15:55:32
    平台:s3c2440内核版本:linux-2.6.22.6 源码位置:https://github.com/yogach/digital_photo 描述:本数字相框实现共实现了主页面、文件浏览页面、图片模式浏览页面、图片联播页面、设置页面、联播模式时间间隔...

    平台:s3c2440 内核版本:linux-2.6.22.6

    源码位置:https://github.com/yogach/digital_photo

    描述:本数字相框实现共实现了主页面、文件浏览页面、图片模式浏览页面、图片联播页面、设置页面、联播模式时间间隔设置页面。图片部分支持BMP(自解析)、JPG(JPEG库)格式的图片。所有页面支持触摸屏(tslib库)控制。支持LCD页面显示。支持标准输出(stdout)与网络打印(socket)调试信息。

     

    页面切换框图:

     

    页面逻辑框图:

     

    数据显示到lcd:同电子书的lcd显示刷新

     

     

    页面内的图标显示:首先我们需要确定每个图标的显示位置,包括起始xy坐标结束xy坐标,然后获取图片原始数据,根据图标显示区域的长宽对原始图片进行缩放近邻取样差值算法),然后根据显示区域的起始地址,将图片数据写入到显存中,然后刷新到LCD显存,即可完成显示。

     

    缩放算法 :近邻取样差值算法https://blog.csdn.net/xjp_xujiping/article/details/79044944

     

    触摸屏控制:输入事件的获取使用多线程方式,子线程进入输入事件的阻塞读取,读取到之后唤醒主线程。在每次获取到触摸屏原始数据后,将按下位置的XY坐标与每个图标区域的起始结束XY坐标进行比较,如果每次按下松开(去除按下后滑动的情况)都是处于同一个图标区域内,则判断按下了此图标。

     

    页面的平滑切换:为了使页面之间的切换更加平滑,使用多块显存空间,用于不同页面的显示。在程序开始阶段,会分配若干块显存,每次显示页面之前会根据页面的名字(char转化成int后相加)取出对应内存,如果此块内存的状态已是REDAY,则可以直接写入到lcd显存中,可以减少重新生成图片数据的时间,使页面之间的切换更加平滑。

     

    文件夹内容信息的获得:使用scandir函数进行获取,

    int scandir(const char *dir,struct dirent **namelist ,int (*filter)(const void *b),
          int ( * compare )( const struct dirent **, const struct dirent ** ) );

     

    函数scandir扫描dir目录下(不包括子目录)满足filter过滤模式的文件,返回的结果是使用compare函数经过排序的,并保存在 namelist中。注意namelist是通过malloc动态分配内存的,所以在使用时要注意释放内存。alphasort和versionsort 是使用到的两种排序的函数。   
    当函数成功执行时返回找到匹配模式文件的个数,如果失败将返回-1。namelist内容是dir(dir需要如下这种格式//mnt/才能获取成功)目录下的所有文件夹文件,包括".",".."。可使用stat()获取文件信息后,使用S_ISREG()S_ISDIR()函数判断是文件夹还是文件。

     

    连播页面图片显示:使用多线程方式,子线程负责准备图片(预先加载图片数据到指定显存中)、休眠指定间隔时间、显示图片(将准备好的显存数据刷到lcd显存中,如果图片数据未准备好则重新准备),主线程负责接收触摸屏输入事件,在接收到触摸屏事件后,设置互斥量后等待子线程退出。

     

    连播页面文件获取:使用深度优先的方式遍历设置的文件夹,最高支持10级递归调用,每次获取10个文件名,然后对获取的文件(绝对路径)进行分析,是否为可支持的显示文件,如果不行就找到一个能显示的为止。

     

     

    点击图标按键效果:当按下图标时,将LCD显存中图标区域内的每个字节数据进行取反处理,代表已经按下了该按键。

     

     

    浏览页面的文件夹显示:首先使用scandir()获取文件夹内容(第5点),读取到的内容根据文件类型,填充不同的图标,文件夹名字按ASCII码方式进行解析,得到Unicode码后使用freetype库得到位图后显示。每次进行翻页时,获取文件夹在namelist中(第5点)的计数,然后进行显示。

     

     

    文件指针mmap: 使用fopen()打开文件以可读/可写方式打开文件(fopen与open的区别),使用fstat获取文件大小后,使用mmap方式映射到内存中。

     

    BMP文件的解析:

    https://www.cnblogs.com/Matrix_Yao/archive/2009/12/02/1615295.html

    JPG文件的解析:

    https://blog.csdn.net/xipiaoyouzi/article/details/53257720

     

     

    设置间隔页面长按累加:使用tslib库得到的触摸屏原始数据内,会有按下或松开的时间值。在首次接收到按下操作时,记录下此时的触摸屏原始数据,将之后按下的时间值与初次记录的值做比较,符合一定时长判断为长按。(如果触摸屏驱动处理长按的方式为使用定时器重复上报输入事件)

     

    打印信息封装:电子书项目相同

     

    遇到的问题:

    使用Scandir()获取文件夹内容,dir需要如下这种格式//mnt/才能获取成功。不然就返回获取到的为0。很奇怪

     

    *piCurFileNumber++;与 (*piCurFileNumber)++; 差异,前一个运行结果是指针指向下一个地址,后一个结果是指针指向的数值自加。

    展开全文
  • 基于Linux NFS的Web数码相框设计。中国IT实验室嵌入式开发频道提供最全面的嵌入式开发培训及行业的信息、技术以及相关资料的下载.
  • 项目说明:数码相框项目:看着简单 涉及到的内容是很多的。项目流程:弄清需求设计框架编写代码测试发展方向:专家(某个问题专研深刻)系统(设计框架功能)弄清需求:(1) 上电,LCD显示一副图片(2) 根据配置...

    项目说明:

    数码相框项目:看着简单 涉及到的内容是很多的。

    项目流程:

    • 弄清需求
    • 设计框架
    • 编写代码
    • 测试

    发展方向:

    专家(某个问题专研深刻)

    系统(设计框架功能)

    弄清需求:

    (1)    上电,LCD显示一副图片

    (2)    根据配置文件,决定停留当前界面还是自动显示下一张

    (3)    点击一下,出现一个对话框(手动,自动)

    (4)    上放大,下缩小,左右切换

    (5)    左右移动很快,显示下一张

    程序分俩部分

    (1)输入进程

    封装事件


    (2)显示进程:

    输入系统通过socket把事件发送到显示进程。多个线程 其中一个线程专门用来接收socket数据。

    一个线程准备图片,左划的时候 线程开始准备左边的图片。等等 加快速度

    图片存在哪里?用库libjpeg解压图片(解压后可以直接在LCD上显示的格式),然后开一块内存把解压后的图片存在framebuffer中。

    LCD有显存framebuffer

    主控线程,通过DMA把要显示的图片移动到当前图片的显存中 然后LCD显示。左移时主控通过DMA更新显存。


    DMA:传输块 不卡

    显示进程大概分7个线程

    驱动中分配显存,应用程序用libjpeg是通过mmap使用。


    总结:

    输入进程把事件发给显示进程,事件怎么来呢 ,可能从触摸屏来也可能是按键来。

    那么输入进程也创建多个线程,触摸屏线程,按键线程


    触摸屏线程:不停的调用tslib得到触摸屏数据,得到后封装好 上报给主控线程。主控线程收到后发送socket。同理按键线程。方便扩展。显示端的主控线程接受到后决定显示5个图片中的哪一个。


    如果显示第一个,主控立刻启动DMA把数据传输给显存进行显示。发现左移 立刻DMA一种最新内容到显存。

    总结:


    为什么用进程线程呢?

    某个功能单独独立出来。方便增删。

    全局变量可以在多个线程内使用。


    展开全文
  • 数码相框图片展示效果,字符界面显示,图片显示各种算法
  • linux 数码相框笔记

    2017-10-16 22:55:00
    以前的笔记忘了 转载于:https://www.cnblogs.com/eat-too-much/p/7679382.html

    以前的笔记忘了

    转载于:https://www.cnblogs.com/eat-too-much/p/7679382.html

    展开全文
  • Linux下的数码相框

    2013-10-10 19:19:58
    本程序是基于Linux下完成的,并且包含有10余中不同的图像变化风格。
  • #include <linux/fb.h> #include static int FBDeviceInit(void); static int FBShowPixel(int iX, int iY, unsigned int dwColor); static int FBCleanScreen(unsigned int dwBackColor); static int g_fd; ...

    一、整体思路

    这一节我们重点学习框架,就是编程的思想。架构很重要。采用分层的思想,面向对象的编程思想。


    1、怎样在LCD上显示一个文件


    2、如何组织代码

    分层的结构

    main--draw--XXX_manager--fb.c等



    二、分层编写-底层实现

    1、显示部分代码编写

    show_file\display\fb.c
    show_file\display\disp_manager.c
    show_file\include\config.h
    show_file\include\disp_manager.h
    show_file\draw\draw.c

    先写fb.c 一面向对象编程思想

    设置构造一个结构体

    结构体需要有哪些成员呢:

    显示部分,一定有一个显示函数,FB要显示就要初始化,所以有一个fb初始化函数,换页的时候我们要进行清屏操作,要有一个清屏函数,所以要有3个函数。

    (1)    fb初始化

    (2)    显示函数

    (3)    清屏函数

    只有函数还不全,还需要一些属性,如定义一个名字“fb”,X坐标,Y坐标,多少位表示一个像素等属性。

    disp_manager.h中结构体设计如下

    typedef struct DispOpr {
    	char *name;
    	int iXres;
    	int iYres;
    	int iBpp;
    	int (*DeviceInit)(void);
    	int (*ShowPixel)(int iPenX, int iPenY, unsigned int dwColor);
    	int (*CleanScreen)(unsigned int dwBackColor);
    	struct DispOpr *ptNext;
    }T_DispOpr, *PT_DispOpr;
    fb.c初始化结构体,并写出对应的函数。
    static T_DispOpr g_tFBOpr = {
    	.name        = "fb",
    	.DeviceInit  = FBDeviceInit,
    	.ShowPixel   = FBShowPixel,
    	.CleanScreen = FBCleanScreen,
    };

    结构体用到这些函数 ,所以事先声明一下,都是static所以只能在本文件中使用,外面想用只能通过上一层。

    static int FBDeviceInit(void);
    static int FBShowPixel(int iX, int iY, unsigned int dwColor);
    static int FBCleanScreen(unsigned int dwBackColor);
    

    在哪注册?

    int FBInit(void)
    {
    	return RegisterDispOpr(&g_tFBOpr);
    }
    

    这里就不能写成static了。

    注册就是把结构体加入链表中,链表比数组更灵活,大小随意。

    一开始链表头是空的,所以让指针指向这个结构体。在注册就让next指向新结构体。

    实现三个函数:

    注意这里是应用程序所以是一些open,read等函数。

    如:g_fd = open(FB_DEVICE_NAME, O_RDWR);

    这里不应该把设备名字定死,所以写一个config文件

    #ifndef _CONFIG_H
    #define _CONFIG_H
    
    #include <stdio.h>
    
    #define FB_DEVICE_NAME "/dev/fb0"
    
    #define COLOR_BACKGROUND   0xE7DBB5  /* 泛黄的纸 */
    #define COLOR_FOREGROUND   0x514438  /* 褐色字体 */
    
    #define DBG_PRINTF(...)  
    //#define DBG_PRINTF printf
    
    #endif /* _CONFIG_H */

    DBG_PRINTF:这个宏可以控制打印开关。

    显示做好了,但是我们显示内容在哪呢?需要设置显示字体,得到显示的点阵。如显示ASCII还是ABK,还是freetype。同理写出这部分代码。

    代码:

    fb.c:重点是结构

    #include <config.h>
    #include <disp_manager.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <sys/mman.h>
    #include <linux/fb.h>
    #include <string.h>
    
    static int FBDeviceInit(void);
    static int FBShowPixel(int iX, int iY, unsigned int dwColor);
    static int FBCleanScreen(unsigned int dwBackColor);
    
    
    static int g_fd;
    
    static struct fb_var_screeninfo g_tFBVar;  //可变参数
    static struct fb_fix_screeninfo g_tFBFix;	 //固定参数
    static unsigned char *g_pucFBMem;          //内存映射
    static unsigned int g_dwScreenSize;        //FB屏幕大小
    
    static unsigned int g_dwLineWidth;         //一行宽度:一行的像素*像素位数/8字节    
    static unsigned int g_dwPixelWidth;        //每个像素占据多少字节:BPP/8=2字节(一个像素占据2字节)
    
    static T_DispOpr g_tFBOpr = {
    	.name        = "fb",
    	.DeviceInit  = FBDeviceInit,
    	.ShowPixel   = FBShowPixel,
    	.CleanScreen = FBCleanScreen,
    };
    
    static int FBDeviceInit(void)
    {
    	int ret;
    	
    	g_fd = open(FB_DEVICE_NAME, O_RDWR);
    	if (0 > g_fd)
    	{
    		DBG_PRINTF("can't open %s\n", FB_DEVICE_NAME);
    	}
    
    	ret = ioctl(g_fd, FBIOGET_VSCREENINFO, &g_tFBVar);
    	if (ret < 0)
    	{
    		DBG_PRINTF("can't get fb's var\n");
    		return -1;
    	}
    
    	ret = ioctl(g_fd, FBIOGET_FSCREENINFO, &g_tFBFix);
    	if (ret < 0)
    	{
    		DBG_PRINTF("can't get fb's fix\n");
    		return -1;
    	}
    	
    	g_dwScreenSize = g_tFBVar.xres * g_tFBVar.yres * g_tFBVar.bits_per_pixel / 8;
    	g_pucFBMem = (unsigned char *)mmap(NULL , g_dwScreenSize, PROT_READ | PROT_WRITE, MAP_SHARED, g_fd, 0);
    	if (0 > g_pucFBMem)	
    	{
    		DBG_PRINTF("can't mmap\n");
    		return -1;
    	}
    
    	g_tFBOpr.iXres       = g_tFBVar.xres;
    	g_tFBOpr.iYres       = g_tFBVar.yres;
    	g_tFBOpr.iBpp        = g_tFBVar.bits_per_pixel;  //设置坐标和多少位表示一个像素
    
    	g_dwLineWidth  = g_tFBVar.xres * g_tFBVar.bits_per_pixel / 8;
    	g_dwPixelWidth = g_tFBVar.bits_per_pixel / 8;
    	
    	return 0;
    }
    
    //RRGGBB  16: 24转成565
    static int FBShowPixel(int iX, int iY, unsigned int dwColor)
    {
    	unsigned char *pucFB;
    	unsigned short *pwFB16bpp;
    	unsigned int *pdwFB32bpp;
    	unsigned short wColor16bpp; /* 565 */
    	int iRed;
    	int iGreen;
    	int iBlue;
    
    	if ((iX >= g_tFBVar.xres) || (iY >= g_tFBVar.yres))
    	{
    		DBG_PRINTF("out of region\n");
    		return -1;
    	}
    
    	pucFB      = g_pucFBMem + g_dwLineWidth * iY + g_dwPixelWidth * iX;
    	pwFB16bpp  = (unsigned short *)pucFB;
    	pdwFB32bpp = (unsigned int *)pucFB;
    	
    	switch (g_tFBVar.bits_per_pixel)
    	{
    		case 8:
    		{
    			*pucFB = (unsigned char)dwColor;
    			break;
    		}
    		case 16:
    		{
    			iRed   = (dwColor >> (16+3)) & 0x1f;
    			iGreen = (dwColor >> (8+2)) & 0x3f;
    			iBlue  = (dwColor >> 3) & 0x1f;
    			wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;
    			*pwFB16bpp	= wColor16bpp;
    			break;
    		}
    		case 32:
    		{
    			*pdwFB32bpp = dwColor;
    			break;
    		}
    		default :
    		{
    			DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    static int FBCleanScreen(unsigned int dwBackColor)
    {
    	unsigned char *pucFB;
    	unsigned short *pwFB16bpp;
    	unsigned int *pdwFB32bpp;
    	unsigned short wColor16bpp; /* 565 */
    	int iRed;
    	int iGreen;
    	int iBlue;
    	int i = 0;
    
    	pucFB      = g_pucFBMem;
    	pwFB16bpp  = (unsigned short *)pucFB;
    	pdwFB32bpp = (unsigned int *)pucFB;
    
    	switch (g_tFBVar.bits_per_pixel)
    	{
    		case 8:
    		{
    			memset(g_pucFBMem, dwBackColor, g_dwScreenSize);
    			break;
    		}
    		case 16:
    		{
    			iRed   = (dwBackColor >> (16+3)) & 0x1f;
    			iGreen = (dwBackColor >> (8+2)) & 0x3f;
    			iBlue  = (dwBackColor >> 3) & 0x1f;
    			wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;
    			while (i < g_dwScreenSize)
    			{
    				*pwFB16bpp	= wColor16bpp;
    				pwFB16bpp++;
    				i += 2;
    			}
    			break;
    		}
    		case 32:
    		{
    			while (i < g_dwScreenSize)
    			{
    				*pdwFB32bpp	= dwBackColor;
    				pdwFB32bpp++;
    				i += 4;
    			}
    			break;
    		}
    		default :
    		{
    			DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    int FBInit(void)
    {
    	return RegisterDispOpr(&g_tFBOpr);
    }
    disp_manager.c:重点是链表操作

    #include <config.h>
    #include <disp_manager.h>
    #include <string.h>
    
    static PT_DispOpr g_ptDispOprHead;
    
    int RegisterDispOpr(PT_DispOpr ptDispOpr)
    {
    	PT_DispOpr ptTmp;
    
    	if (!g_ptDispOprHead)
    	{
    		g_ptDispOprHead   = ptDispOpr;
    		ptDispOpr->ptNext = NULL;
    	}
    	else
    	{
    		ptTmp = g_ptDispOprHead;
    		while (ptTmp->ptNext)
    		{
    			ptTmp = ptTmp->ptNext;
    		}
    		ptTmp->ptNext	  = ptDispOpr;
    		ptDispOpr->ptNext = NULL;
    	}
    
    	return 0;
    }
    
    
    void ShowDispOpr(void)
    {
    	int i = 0;
    	PT_DispOpr ptTmp = g_ptDispOprHead;
    
    	while (ptTmp)
    	{
    		printf("%02d %s\n", i++, ptTmp->name);
    		ptTmp = ptTmp->ptNext;
    	}
    }
    
    PT_DispOpr GetDispOpr(char *pcName)
    {
    	PT_DispOpr ptTmp = g_ptDispOprHead;
    	
    	while (ptTmp)
    	{
    		if (strcmp(ptTmp->name, pcName) == 0)
    		{
    			return ptTmp;
    		}
    		ptTmp = ptTmp->ptNext;
    	}
    	return NULL;
    }
    
    int DisplayInit(void)
    {
    	int iError;
    	
    	iError = FBInit();
    
    	return iError;
    }

    2、字体部分编写

    思路如上一样,分配、设置、注册结构体。

    3、编码部分编写

    思路如上一样,分配、设置、注册结构体。

    三、分层编写-上层实现

    1、draw.c

    组织底层代码

    2、main.c

    解析命令-打开文本-显示文本-换页-返回上一页等

    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <config.h>
    #include <draw.h>
    #include <encoding_manager.h>
    #include <fonts_manager.h>
    #include <disp_manager.h>
    #include <string.h>
    
    
    /* ./show_file [-s Size] [-f freetype_font_file] [-h HZK] <text_file> */
    int main(int argc, char **argv)
    {
    	int iError;
    	unsigned int dwFontSize = 16;
    	char acHzkFile[128];
    	char acFreetypeFile[128];
    	char acTextFile[128];
    
    	char acDisplay[128];
    
    	char cOpr;
    	int bList = 0;
    
    	acHzkFile[0]  = '\0';
    	acFreetypeFile[0] = '\0';
    	acTextFile[0] = '\0';
    
    	strcpy(acDisplay, "fb");
    	
    	while ((iError = getopt(argc, argv, "ls:f:h:d:")) != -1)
    	{
    		switch(iError)
    		{
    			case 'l':
    			{
    				  bList = 1;
    				  break;
    			}
    			case 's':
    			{
    				  dwFontSize = strtoul(optarg, NULL, 0);
    				  break;
    			}
    			case 'f':
    			{
    				  strncpy(acFreetypeFile, optarg, 128);
    				  acFreetypeFile[127] = '\0';
    				  break;
    			}			
    			case 'h':
    			{
    					strncpy(acHzkFile, optarg, 128);
    					acHzkFile[127] = '\0';
    					break;
    			}
    			case 'd':
    			{
    				strncpy(acDisplay, optarg, 128);
    				acDisplay[127] = '\0';
    				break;
    			}
    			default:
    			{
    					printf("Usage: %s [-s Size] [-d display] [-f font_file] [-h HZK] <text_file>\n", argv[0]);
    					printf("Usage: %s -l\n", argv[0]);
    					return -1;
    					break;
    			}
    		}
    	}
    
    	if (!bList && (optind >= argc))
    	{
    		printf("Usage: %s [-s Size] [-d display] [-f font_file] [-h HZK] <text_file>\n", argv[0]);
    		printf("Usage: %s -l\n", argv[0]);
    		return -1;
    	}
    		
    	iError = DisplayInit();
    	if (iError)
    	{
    		printf("DisplayInit error!\n");
    		return -1;
    	}
    
    	iError = FontsInit();
    	if (iError)
    	{
    		printf("FontsInit error!\n");
    		return -1;
    	}
    
    	iError = EncodingInit();
    	if (iError)
    	{
    		printf("EncodingInit error!\n");
    		return -1;
    	}
    
    	if (bList)
    	{
    		printf("supported display:\n");
    		ShowDispOpr();
    
    		printf("supported font:\n");
    		ShowFontOpr();
    
    		printf("supported encoding:\n");
    		ShowEncodingOpr();
    		return 0;
    	}
    
    	strncpy(acTextFile, argv[optind], 128);
    	acTextFile[127] = '\0';
    		
    	iError = OpenTextFile(acTextFile);
    	if (iError)
    	{
    		printf("OpenTextFile error!\n");
    		return -1;
    	}
    
    	iError = SetTextDetail(acHzkFile, acFreetypeFile, dwFontSize);
    	if (iError)
    	{
    		printf("SetTextDetail error!\n");
    		return -1;
    	}
    
    	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
    
    	iError = SelectAndInitDisplay(acDisplay);
    	if (iError)
    	{
    		printf("SelectAndInitDisplay error!\n");
    		return -1;
    	}
    	
    	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
    	iError = ShowNextPage();
    	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
    	if (iError)
    	{
    		printf("Error to show first page\n");
    		return -1;
    	}
    
    	while (1)
    	{
    		printf("Enter 'n' to show next page, 'u' to show previous page, 'q' to exit: ");
    
    		do {
    			cOpr = getchar();			
    		} while ((cOpr != 'n') && (cOpr != 'u') && (cOpr != 'q'));
    
    		if (cOpr == 'n')
    		{
    			ShowNextPage();
    		}
    		else if (cOpr == 'u')
    		{
    			ShowPrePage();			
    		}
    		else 
    		{
    			return 0;
    		}			
    	}
    	return 0;
    }
    
    (1)解析命令参数

    getopt(argc, argv, "ls:f:h:d:")

    :需要带参数

    -l 不需要带参数

    strncpy(acTextFile, argv[optind], 128);得到文件名

    (2)初始化显示、字体、编码--》注册相关结构体

    	iError = DisplayInit();
    	iError = FontsInit();
    	iError = EncodingInit();
    (3)打开文件

     OpenTextFile(acTextFile)
    (4)打开字体文件

    SetTextDetail(acHzkFile, acFreetypeFile, dwFontSize);

    (5)根据名字选择初始化一个显示器

    SelectAndInitDisplay(acDisplay);
    (6)显示第一页或者下一页

    ShowNextPage();

    (7)等待命令参数,显示下一页,上一页等


    展开全文
  • #include <linux/fb.h>   #include      static   int  FBDeviceInit( void );  static   int  FBShowPixel( int  iX,  int  iY, unsigned  int  dwColor);  static   int  FBCleanScreen...
  • 实现照片的自动播放,切换,下载此文件,请确保电脑安装LInux,本软件实现的是基础图片播放
  • 基于嵌入式Linux系统数码相框的设计与实现
  • 基于linux的智能数码相框使用说明 -------GMF公司 产品描述 1 支持png格式图片播放 2 时钟日历闹钟文件管理小游戏功能 3 英文人性化简单操作菜单 4 多种图片切换效果 5 图片具有缩放旋转功能 6 U盘直插功能 7 幻灯片...
  • 本设计的核心是基于LINUX操作系统在ARMS2410S平台上实现的多媒体数码相框。利用QT工具进行嵌入式图形界面的开发。利用ARM处理器对Linux系统良好的移植性、自带LCD控制器、音频控制器,进行图像显示、音频播放、文件...
  • 为了实现一款可以进行网络传输的数码相框,设计了基于ARM,LINUX以及QT4的实施方案。使用三星公司的S3C2440 ARM芯片作为主处理器控制DM9000网卡芯片以及触摸屏,为设计提供硬件平台。将LINUX移植到硬件平台,构建QT4...
  • 基于韦东山三期视频第一个项目,在此基础上添加了 MP3 播放器,可以播放大多数 MP3 文件,播放页面有音量控制,进度条以及歌曲名等
  • 摘要:本文介绍了一种基于Linux嵌入式系统的新型网络数码相框设计方案。本设计方案采用S3C2440为核心的嵌入式系统,构建了基于Linux的网络多媒体共享文件系统,详细论述了此Web数码相框系统的软、硬件设计,该设计...
  • 把tmp/usr/local/include/* 复制到/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include cp */usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf (2)编译在串口输出。 ...
  • 数码相框

    2019-06-24 22:00:23
    声明,文章的内容基本上来自于韦东山老师的F:\010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)\3期视频(含相应的文档与源码)\项目1_文件浏览器_数码相框(33节, 2节免费)\视频,若有...
  • 摘要 数码相框是可以直接展示数码照片不用将照片冲印出来再展示 的新型相框它采用传统普通相框的外框外观造型把传统普通相 框的中 间照片部分换成液晶显示屏配上存储介质等部件可以直 接展示播放数码照片同时可以在...
  • 一、字符编码 为更好的存储和展示,于是出现了字符编码。下面来看一下字符编码的发展过程。分为三个阶段: 阶段1:ASCII码 ...也就是常说的ASCII码,由于英语中只有26个英文字母...#include <linux/dma-mapping.h> ...
  • 该项目为韦东山老师的第三期项目中的第一个数码相框项目,本人已经购买此套视频,该套博客的目的是记录自己在项目学习中遇到的种种问题,对自己是一个进步,对他人是一个分享,欢迎交流学习。 视频内容和时长 第1课...
  • Linux数码相框项目配置说明书: First:使用TQ2440自带的linux系统,在该系统下进行如下配置: 建议一个数码相框项目使用的根目录,在其下组织响应的目录结构: 如: a.我使用/home/sky/hjmPhotoFrame目录作为...
  • /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include #编译出来的库文件应该放入: /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib #把tmp/usr/local/lib/* 复制到 /usr/local/arm/4.3.2...

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

数码相框linux

linux 订阅