粤嵌开发板电子相册嵌入式课程设计.doc
如有侵权,请联系网站删除,仅供学习与交流粤嵌开发板电子相册嵌入式课程设计【精品文档】第 18 页课程设计说明书题 目: 电子相册 课程名称: 嵌入式系统 学 院: 专 业:学 号: 姓 名: 指导教师: 完成日期: 2017年6月10日 目 录1. 设计的工程背景1.1 任务阐述设计任务:制作一个电子相册,要求每个人一种特效,结果显示在ARM开发板上。开发平台为LINUX。电子相册简介:以数字照片的存储和浏览为主要功能,具有内置数据存储器、USB等卡接口、强大的文件管理等特征。背景:在市场需求上,随着数码相机的普及,作为一种以数字照片的保存、回放和浏览为核心的功能产品迎合了消费者需求,嵌入式linux的电子相册比一般电子相册更具优越性和实用性。目前市场,目前主流电子相册软件普遍体积庞大、占用内存多、硬件要求高。所以开发一个运行速度快,占用空间小,对硬件要求较低的功能实用的嵌入式Linux电子相册很有意义。Linux开发优势:Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。 Linux是我国软件的国策,尤其是在IT行业,庞大的使用群体、开放的体系和丰富资源使得Linux将是日后普及和推广的重点。Linux的优越性日益凸显Linux将是我们学习和工作实用的首选。目前,很多网络技术、服务器、网络设备都是基于Linux操作系统,并且在不少时尚的手机、PDA、媒体播放器等消费类电子产品中已经广泛使用Linux作为操作系统。 在Linux软件国策的指引下,Linux已经得到很大的普及。很多学生已经自发地通过书籍、互联网等资源学习Linux。 综上所述,提高技术水平就是以市场流行需求为导向进行研发,特别是像嵌入式种工程类的技术。在条件允许的情况下,我们甚至应该时刻与国际接轨,掌握当前最领先的技术。1.2 任务分析设计的目标是制作5种电子相册特效,每个人负责制作一种。在制作前期,首先要查阅资料,了解电子相册的背景和制作原理,对其形成大致的设计方案。然后,根据资料安装linux和虚拟机软件,搭建开发环境,安装交叉编译。最后,根据自己设计的方案进行尝试,不断修改错误,直到达到目标。1.3 课题项目管理计划进度表序号各阶段完成的内容完成时间1查阅相关文献资料、课题调研2017.5.20-2017.5.232掌握设计软件、制订进度计划2017.5.23-2017.5.273系统方案的比较和选定2017.5.27-2017.5.284编写实现特效的代码2017.5.29-2017.6.55编译,运行目标文件,查看结果,根据结果进行代码的修改2017.6.05-2017.6.086制作答辩PPT2017.6.08-2017.6.097撰写课程设计说明书2017.6.09-2017.6.118答辩2017.6.122.工程设计方案2.1 系统方案设计目前市场上的主要设计方案: 单芯片解决方案以单芯片的解决方案,以ESS/AMLOGIC/MPX等芯片设计为代表,PHILIP/Sony等品牌厂商也以该方式为主。 该方案的优点: (1)结构简单,成本低,芯片功能强大; (2)多媒体的编解码速度快。 该方案的缺点: (1)可扩展的余地不足; (2)对读卡部分,某些方案使用硬件实现,不能支持新类型的卡; (3)应客户要求的二次开发比较不方便。以DSP+FPGA等硬件为基础,用软件算法实现功能这种方案,是以DSP来实现多媒体部分的编解码算法,再由FPGA实现显示输出格式的算法转化;读卡部分,文件系统部分由DSP软件处理,外围设备大的驱动由DSP的软件算法实现。 这种方案的优点: 功能扩展升级性强,软件实现读卡部分,新的类型卡,外围设备可以通过升级方式实现。 这种方案的缺点: (1)整体成本比较大; (2)客户二次开发难度大。DSP和FPGA的算法实现需要专业人员; (3)显示输出由FPGA实现,该类输出大部分是数字的输出,模拟输出支持比较弱。ARM核心方案以ARM等强大的CPU为核心,以WINCE、LINUX等操作系统为软件核心架构系统。此方案以ARM如S3C2410、Intel xscale等强大的嵌入式CPU为架构,速度在200M-300MHZ。嵌入WINCE、LINUX等操作系统,实现多媒体的编解码。 该方案的优点: (1)系统芯片功能强大,实现的功能多,对于新的多媒体格式支持好,只需要安装更新的软件; (2)硬件电路简单; (3)二次开发容易实现。 该方案的缺点: (1)成本较大,该类强大的CPU一般使用在PDA等嵌入式领域;(2)比较耗电,使用软件解码功耗与频率相关性很大。本设计选用的是第三种方案:以Cortex A8为核心,以Linux操作系统为软件核心架构。 基于Cortex A8的微处理器具有低功耗、低成本、高性能等特点。GEC210开发板简介:GEC210是一款高性能的Cortex A8核心板,它由广州粤嵌股份设计、生产和发行销售。它采用三星S5PV210作为主处理器,运行主频可高1GHz。S5PV210内部集成了PowerVR SGX540高性能图形引擎,支持3D图形流畅运行,并可流畅播放1080P大尺寸视频。GEC210主要采用了2.0mm间距的双排针,引出CPU大部分常用功能引脚,另外还根据S5PV210芯片的特性,分别引出了标准的miniHDMI接口,如图所示。GEC210板载512M DDR2内存,可流畅运行Android, Linux和WinCE6等高级操作系统。它非常适合开发高端物联网终端,广告多媒体终端,智能家居,高端监控系统,游戏机控制板等设备。 图2-1 GEC210开发板(a) 图2-2 GEC210开发板(b)2.2 硬件电路设计粤嵌GEC210开发板为硬件平台,Ubuntu为开发环境,通过串口进行文件的传输,在工程师给定的项目基础函数上,通过修改和运用“void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)”函数实现图片位置,大小的改变,再加上延时函数的运用,实现五种图片特效。ARM芯片Cortex A8时钟电路LCD显示USB接口电路图2-3 硬件总框图2.3 软件程序设计总设计方案:大层叠(图形浮现大小及位置)反转(反转函数)小大3. 方案实施3.1软件程序调试过程安装虚拟机和linux软件。搭建环境和安装交叉编译。1)找到ubuntu系统工作目录图3-12)在windos系统下找到该工作目录并创建一个文件夹,将arm-2009q3.tar.bz2复制过去。图3-23)启用共享文件夹图3-34)主机路径为windos系统下arm-2009q3.tar.bz2的目录,名称自动生成图3-4图3-55)可以在文件系统中/mnt/hgfs/share目录下看到这些。图3-66)为了可以将arm-2009q3.tar.bz2复制到/opt目录下,/opt默认所有者为root,所以要更改/opt的所有者为我登陆的账户。图3-77)将文件复制到/opt 目录下。图3-88)执行如下解压命令。 聚焦逐现特效部分调试原本打算做图片翻转的特效,在网上查到图片翻转特效的算法并经过修改如下: /24bit to 32bit for(x=0,y=800*480*4-1;x<800*480*3;x+=3) pic_memy-3 = bmp_memx ; pic_memy-2 = bmp_memx+1 ; pic_memy-1 = bmp_memx+2 ; y-=4; 但是在调试时总是出错,寻找最终的原因,应该是图片转换为矩阵时和图片翻转之间的步骤有误,导致调试时一直报错。因此转变设计方案,先确定所要出现图片的位置,再通过在不同位置处显示不同图片的大小依次出现达到一个三维视觉动态效果,最后经过反转函数实现图片的反转,在制作过程中想要加入音乐,但是由于时间有限就未能实现。图片显示函数如下:/显示一张24位的bmp图片,图片的宽度必须为4的倍数void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)int fd;fd = open(name, O_RDWR);if (-1 = fd)printf("open %s error!n", name);return ;图片反转函数如下:/位运算int x, y, k,i = 0;for (y = 0; y < h; y+)for (x = w; x >0; x-)b = chi;g = chi+1;r = chi+2;i += 3;color = (r << 16) | (g << 8) | b;lcd_draw_point(x+x0, h-y+y0,color);显示界面调用函数如下:/显示BMP图片lcd_draw_bmp("zs.bmp", 1, 1, 796, 477); delayms(3000000); lcd_draw_bmp("zsone.bmp", 100, 60, 600, 360); delayms(3000000); lcd_draw_bmp("zstwo.bmp", 200, 120, 400, 240); delayms(3000000); lcd_draw_bmp("zsthree.bmp", 300, 140, 200, 200); delayms(3000000); lcd_draw_bmpop("zs.bmp", 1, 1, 796, 477);图片效果的速度可通过改变延时函数的时间来改变。4. 结果与结论4.1 设计结果 设计结果实现了以下4点:1) 在LCD上显示图片,文字;2) 关于GEC210芯片的使用,Ubuntu环境下的操作;3) 可随时更换图片,具有串行通信功能;4) 聚焦逐现图片特效。效果分布展示如下:图4-1 开始界面图4-2 逐步缩小界面图4-3 放大反转界面4.2 结论设计优缺点:1) 实现了多种不同的图片播放特效。2) 二次开发容易实现。3) 图片的自动播放。4) 未实现手动播放和音乐功能。设计的核心及工程实用价值:随着数码相机的大量普及和人们对多媒体播放的需求,不同用户的计算机中存满各种照片,连桌上相框中照片的更换频率也提高了。对数码相片进行便捷的显示、分享、编辑、删除、打印等操作逐渐成为市场的需求。电子相框,数码伴侣等概念型产品逐渐出现在数码市场,电子相册也由概念型产品进入市场已有六、七年。目前,电子相册产品主要应用于礼品市场,其真正的目标用户却是非常广的,并且它的最终消费人群应该是以家庭为主的普通消费者,其应用的领域将更广阔。改进意见:1) 实现通过触屏实现图片特效间的切换。2) 音乐播放功能的增加。3) 多张图片合成一张图片播放功能的实现。展望:电子相框结合液晶显示技术、电视技术、数字存储技术,日益成为面向时尚个性的数码相机、数码摄像的最佳伴侣。随着核心器件NandFlash和LCD屏的降价,必将进一步刺激电子相框的市场需求。多功能电子相册方便携带、重量轻、样式丰富,在今后必定有更大发展空间。5. 收获与致谢在本次设计开始前,我们最先开始的是查资料,通过查找资料了解图片显示和各种特效的实现原理,然后再自己尝试设计特效,一开始我们想的特效都很复杂,想要一步实现,尝试了很多方法,都没能成功。最后,我们改变了思路,用图片逐层显示来实现动态过程,这个特效虽然简单,但它是复杂特效的一个基础,让我明白了复杂的设计要从简单开始,不能想着一口吃个大胖子。到答辩前一天我们各自设计的特效才有了一点自己想要的效果,当时还很想实现触屏和音乐播放功能,但前期尝试时一直调试不成功所以就没有来得及实现,这是本次设计中的一个遗憾。通过本次设计也更加熟悉了linux的操作流程,熟悉了做实验中的搭建环境和交叉编译,开始时很多步骤都记不太清楚了,所以又复习了一遍以前的实验。在这里我体会到了平时的学习都是为了以后的复杂工程做铺垫,让我们能更好的解决一些设计工程,理论是基础,只有基础打好了,上层建筑才会更加稳和顺利。同时完成了图片在LED屏上的显示和聚焦逐现特效。在显示图片的操作上,开始屏幕总是会花,显示的图片不理想,后来仔细看了工程师给的显示图片代码和清屏代码,通过和同学商量最终完成了图片的显示。在特效的实现过程中,一开始很想做一个立体的炫酷的特效,也通过查找资料理解了其原理和算法实现流程,但在调试时总是不成功,在这里用了很长时间。最后,改变了设计思路,觉得应该从简单的开始做,再一步步增加功能,通过和同学的商量与摸索,终于实现了简单的特效。虽然从设计到实现的过程有很多困难,但是体会到了和同学一起完成同一个任务的快了,也收获了很多课本上没有的知识,体会到了实践的乐趣。在此,感谢我的队友给予的帮助,老师和粤嵌工程师给的平台和机会,尤其是粤嵌工程师给我的学习指导。6. 参考文献 1 童凯. 基于Linux以及Qt的网络电子相框设计与实现D. 电子科技大学, 2014.2 林锋. 基于ARM7TDMI芯片的嵌入式LINUX交叉调试器的设计和实现D. 四川大学, 2002.3 王浩, 陈邦琼. 嵌入式Qt开发项目教程M. 中国水利水电出版社, 2014.4 梁融凌, 余昌嵩. 基于嵌入式 Linux 电子书的设计与实现J. 牡丹江师范学院学报(自然科学版), 2014(4):12-14.5 Yan H, Liu L, Xue T. SPLIT-SCREEN PROCESSING METHOD AND DEVICE, AND COMPUTER STORAGE MEDIUM:, WO/2015/123937P. 2015.6 燕丽红, 林志雄, 杨星. 基于Windows 7操作系统和Qt技术的电子相册设计Design of electronic photo album based on Windows 7 operating system and QTJ. 现代电子技术, 2013. 7 范定焓. 基于ARM9平台的便携式媒体播放器的设计与开发D. 复旦大学, 2009.8 朱涛. 一种基于互联网络的电子相册: CN, CN 201846349 UP. 2011.9 范定焓. 基于ARM9平台的便携式媒体播放器的设计与开发D. 复旦大学, 2009.10 Zhu M. CATERING INFORMATION SYSTEM BASED ON DIGITAL MENU SUPPORTING CARD SWIPING:, WO 2013152620 A1P. 2013.11 杨燕, 陈祝. 一种基于Cortex内核的家用电子相册设计C/ 2014全国半导体器件产业发展、创新产品和新技术研讨会暨第七届中国微纳电子技术交流与学术研讨会. 2014.7. 附件1)答辩问题回答记录(必需)问:有没有实现手动播放功能?答:没有,目前我们完成的只有自动播放和图片替换功能。2)元器件清单粤嵌GEC210开发板、安装有虚拟机和LINUX的电脑。3)设计代码NAME open and possibly create a file or deviceSYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); file descriptor:文件描述符#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>/for open#include <sys/mman.h>#include <linux/input.h>#include<termios.h>#include<unistd.h>/for closeint *plcd = NULL;char wo = 0x04,0x40,0x0E,0x50,0x78,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x44,0x0A,0x44,0x0C,0x48,0x18,0x30,0x68,0x22,0x08,0x52,0x08,0x8A,0x2B,0x06,0x10,0x02void lcd_draw_point(int x0, int y0, int color)*(plcd + y0*800 + x0) = color;/在顶点为x0,y0的位置开始显示一个颜色矩形,矩形的宽/度为w, 高度为h,颜色为colorvoid lcd_draw_rect(int x0, int y0, int w, int h, int color)int x, y;for (y = y0; y < y0+h; y+)for (x = x0; x < x0+w; x+)lcd_draw_point(x, y, color);/把lcd清成color颜色void lcd_clean_screen(int color)int x, y;for (y = 0; y < 480; y+)for (x = 0; x < 800; x+)lcd_draw_point(x, y, color);void delayms(int xms)int i,j;for( i = 0; i < xms; i+)for( j = 110; j > 0; j-);/显示一张24位的bmp图片,图片的宽度必须为4的倍数void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)int fd;fd = open(name, O_RDWR);if (-1 = fd)printf("open %s error!n", name);return ;/1、跳过前54个bytelseek(fd, 54, SEEK_SET);char chw*h*3;read(fd, ch, sizeof(ch);close(fd);/lcd 的像素点占4byte, 24位bmp 3byteint color;char r, g, b;/位运算int x, y, i = 0;for (y = 0; y < h; y+)for (x = 0; x < w; x+)b = chi;g = chi+1;r = chi+2;i += 3;color = (r << 16) | (g << 8) | b;lcd_draw_point(x+x0, h-y+y0, color);delayms(1);/显示一张24位的bmp图片,图片的宽度必须为4的倍数 ,左右颠倒void lcd_draw_bmpop(char *name, int x0, int y0, int w, int h)int fd;fd = open(name, O_RDWR);if (-1 = fd)printf("open %s error!n", name);return ;/1、跳过前54个bytelseek(fd, 54, SEEK_SET);char chw*h*3;read(fd, ch, sizeof(ch);close(fd);/lcd 的像素点占4byte, 24位bmp 3byteint color;char r, g, b;/位运算int x, y, k,i = 0;for (y = 0; y < h; y+)for (x = w; x >0; x-)b = chi;g = chi+1;r = chi+2;i += 3;color = (r << 16) | (g << 8) | b;lcd_draw_point(x+x0, h-y+y0,color);void monitor_touch()int fd;fd = open("/dev/event0", O_RDWR);if (-1 = fd)return ;struct input_event ev;int x, y;while (1)read(fd, &ev, sizeof(ev);/如何判断该事件是一个触摸事件if (ev.type = EV_ABS) && (ev.code = ABS_X)x = ev.value;else if (ev.type = EV_ABS) && (ev.code = ABS_Y)y = ev.value;/手指弹起if (ev.type = EV_ABS) && (ev.code = ABS_PRESSURE) && (ev.value = 0)printf("x: %d, y: %dn", x, y);close(fd);/显示一个字void lcd_draw_word(unsigned char *ch, int color, int len, int w, int x, int y)int i, j;int high;/32 * 64/ 一个字的显示:画点(一个一个像素点)/ 八个点用一个 unsigned char / 已知:数组长度:len => 像素点的个数:len * 8/ 已知:字的宽度=> 高度:len*8/w high = len*8 / w; /64 int flag;flag = w/8; / 4for (i = 0; i < len; i+)for (j = 7; j >= 0; j-)if (chi >> j) & 1 = 1)if (i%flag = 0)lcd_draw_point(7-j+x, i/flag+y, color);elselcd_draw_point(8*(i%flag)+7-j+x, i/flag+y, color);int main(int argc, char *argv)int fd;/O_RDWR: 可读可写fd = open("/dev/fb0", O_RDWR);/ if(fd = -1)/if (fd = -1)if (-1 = fd)printf("open dev/fb0 error !n");return 0;/内存映射,吧一个文件或者设备映射到一个进程的/地址空间中(内存),在进程中操作这块映射的内/存就相当于操作 被映射的文件/plcd 存储了映射的地址空间的首地址plcd = mmap(NULL, 800*480*4, PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);/如何把lcd上的第n个像素点 显示成红色?/*(plcd + n) = 0x00ff0000;/如何把坐标为(x, y)的像素点,显示成红色?/*(plcd + y*800+x) = 0x00ff0000;/如何把整个屏幕全部显示白色?/循环lcd_clean_screen(0xFFFFFFFF);/如何显示一个矩形/lcd_draw_rect(50, 50, 100, 100, 0x00ff0000);/显示BMP图片lcd_draw_bmp("zs.bmp", 1, 1, 796, 477); delayms(3000000); lcd_draw_bmp("zsone.bmp", 100, 60, 600, 360); delayms(3000000); lcd_draw_bmp("zstwo.bmp", 200, 120, 400, 240); delayms(3000000); lcd_draw_bmp("zsthree.bmp", 300, 140, 200, 200); delayms(3000000); lcd_draw_bmpop("zs.bmp", 1, 1, 796, 477);/初始化串口/int com_fd = init_serial("/dev/s3c2410_serial3", 9600);/lcd_draw_word(wo, 0x00ff0000, 32, 16, 100, 100);monitor_touch();close(fd);return 0;5) 实物上电效果图图7-1效果图1图7-1效果图2图7-1效果图3附件1 :答辩问题回答记录表学号: 2014550808 姓名: 陈茜茜 专业、班级: 14电子信息工程4班 老师所提问题:能不能手动播放,实现上一张下一张和暂停?学生回答问题: 还未实现,我们只实现了图片显示,每人一种特效和自动播放以及照片替换。有尝试过实现手动播放和音乐播放,但是调试还没有成功。设计成绩评定:序号考核内容评定权重系数评分1设计方案是否正确,是否有创新之处0.23硬件制作、软件程序设计是否规范0.24硬件运行结果是否正确0.25答辩成绩0.16设计报告是否规范、组织表述是否准确、清晰0.3加权总分百分制成绩与等级制成绩对应关系如下:90分(含)以上优秀;80(含)-90之间良好;70(含)-80之间中等;60(含)-70之间及格;60分以下不及格。总 成 绩: 指导教师: 年 月 日