1、 深 圳 大 学 实 验 报 告 实验课程名称: 实验项目名称: 基于 ARM7 芯片的数码相框开发 学院: 计算机与软件学院 专业: 软件工程 报告人: 学号: 班级: 同组人:学号: 班级: 指导教师: 实验时间: 2009-10-12 2010-9-12 实验报告提交时间: 教务处制 实验目的与要求 : ( 1) 了解 ARM 指令集 ; ( 2) 掌握直入键盘与矩阵键盘的原理和键盘寄存器的功能; ( 3) 掌握图像处理算法; ( 4) 掌握配置 LCD 控制器实现显示图片与文字。 ( 5) 使用实验箱实现数码相 框的功能 ; ( 6) 了解 AXD Debugger 仿真调试的使用方法
2、 ; ( 7) 掌握 8 段码的知识; 方法、步骤: 系统设计思路: 实验中使用的硬件设备是实验箱的 LCD 显示模块, LED 显示模块, 4*4 键盘模块。 系统开始时,先显示开机图片,然后进入图片播放模式,当有按键捕获信号时,在 LED上显示相应的值并进入相对应的按键中断程序。当要进行图片处理时,使用按键上一张或下一张选择要处理的图片、再按对应的图片处理按键进行图片处理。 系统流程图: 以上为整个系统简要流程图,之后各种模块实现皆是为此展开。 LCD显示图 片原理: 在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为 Frame
3、 Buffer,或显存,显示屏上的每一点都必然与 Frame Buffer 里的某一位置对应,所以解决显示屏的显示问题,首先需要解决的是 Frame Buffer 的大小以及屏上的每一象素与 Frame Buffer 的映射关系。按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用的是 16位色( 65536 种颜色)显示。 计算机反映自然界的颜色是通过 RGB 值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出响应的 RGB 值, Frame Buffer 为屏幕提供显示的内容,就必须能够从Frame Buffer里得到每一个象素的 RGB 值,在 16 位 /
4、象素的模式下, Frame Buffer 里的每个单元 16 位,每个单元代表一个象素的 RGB 值,如下图显示: FrameBufferSize的大小计算公式如下图,所以 640 480, 16 位 /象素,单屏幕模式,Frame buffer 大小为 614400 个字节。 我们使用 image2LCD软件将图片装换成数组形式,数组开始的 8个数据为图片信息,之后数组中每 2个数据为一个像素点的颜色,由数组开始的 8个数据得出图片大小,按顺序排列之后数据便可在 LCD中显示整个图片。 由于长度问题,存在高 8位与低 8位,所以像素点的对应 RGB值为后一个数据左移 8位再加上前一个数据。
5、LCD像素显示主要函数: void lcd_put_pixel(int x,int y,unsigned char c) long int base_addr; base_addr = 0xa0500000; if(x1280 4*4键盘捕获原理: 通过调用直入键盘接口和矩阵键盘、并初始化和调用键盘寄存器,实现了 4*4键盘同时使用,使得系统可以通过键盘的按键来驱动 8 段数码管的点亮(在此实验中, LED的点亮是为了检验按键是否正常,在日后版本中此功能可去掉)和做出相应图片处理效果。 4*4键盘的主要功能: 系统进入图片处理时,通过按键捕获进行相应的图片处理效果。同时也会显示相应的LED。(
6、测试期间方便检验按键是否正确) 实验过程及内容: 图像处理算法: (所有效果图请见数据处理分析) 正常图片显示 : (之后所有图像处理的基础) 判断图片数组前 8个数据得到图片长宽后,通过 LCD像素显示主要函数 按顺序把图片数组数据填充到 Frame Buffer中 ,最终 LCD得以把图片显示出来。(之后各图像处理算法均通过此算法基础进行修改得来) 图片 放大 : 图片放大采用整数倍放大,简单来说就是原来一个像素点在放大后显示 4个像素点。例如 2倍放大时就是将每个像素点的颜色填充为以他为左上角的 2*2矩形的 4个像素点,此时图片长宽都增大一倍实现图像放大效果。 灰度 效果: 灰度 效果
7、就是 将图像 各个像素的 RGB 值提取出来进行加权运算后再填充回去 , 便可 达到 灰度 效果 。值得注意的是,在本实验中,加权运算之前 G 值需要右移一位(因为本实验中 LCD 显示的 R、 G、 B 长度分别为 5、 6、 5,经过 实验多次尝试,要得到灰度需要在加权运算中保持长度一致),加权运算后 G 值再左移一位,并 RGB 值判断是否溢出。 图片镜像: 镜像变换是指将指定区域的图像左右翻转地显示在屏幕。分析镜像变换过程可以发现:每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。因此,采用按行逐点变换的方式实
8、现图像的镜像。 图片缩小: 图片缩小采用整数倍缩小,简单来说就是像素点间隔显示。例如 2倍缩小时就是将像素点矩阵的奇数坐标保留,偶数坐标舍去来实现图像 缩小效果。 石雕效果: 浮雕效果就是只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果, 实验 采用的算法是将要处理的像素取值为与处于对角线上的另一个像素间的差值, 然后在让对应的 RGB 值分别加上 16、 32、 16,作为新像素点的值。 颜色翻转: 反色的 原理 是将 R、 G、 B 值反转。 用 0XFF 减去数组中的每一个值即可以得到新的数组,在对应显示即可。 旋转 90: 图片旋转的原理就是将像素
9、点矩阵旋转 90,然后将再将新的矩阵显示出来。如下图: 百叶窗效果: 图片百叶窗效果显示就是显示图片时按一定的数目间隔显示(实验中取 10)。例如纵向的百叶窗效果就是当第 1 列显示完毕后显示第 11 列,当超多图片长度后回到第 2 列显示,如此类推知道显示完图片。 图像 切换的算法: 程序一开始声明一指针,通过按键捕获和指针切换指向不同的图像数组便可实现不同图片间的切换。 以此为基础,实现了图片的幻灯片播放效果、下一张和上一张的切换等。 下一张 图片切换 的流程图: 数据处理分析: 图像 放大 :(左边为原图 (正常效果) ,右边为效果图) 灰度效果 :(左边为原图,右边为效果图) 镜像效 果 : (左边为原图,右边为效果图) 图像缩小:(左边为原图,右边为效果图) 石雕效果 :(左边为原图,右边为效果图) 颜色翻转 :(左边为原图,右边为效果图) 旋转 90 :(左边为原图,右边为效果图) 百叶窗效果 :(左边为原图, 中间为横向效果图, 右边为 纵向 效果图) 图像切换效果: 数目相框市场调研 与功能设想 PPT: 数码相框功能实现 PPT: