基于ARM7芯片的数码相框开发.docx
- 文档编号:8471351
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:54
- 大小:1.01MB
基于ARM7芯片的数码相框开发.docx
《基于ARM7芯片的数码相框开发.docx》由会员分享,可在线阅读,更多相关《基于ARM7芯片的数码相框开发.docx(54页珍藏版)》请在冰豆网上搜索。
基于基于ARM7芯片的数码相框开发芯片的数码相框开发深圳大学实验报告实验课程名称:
实验项目名称:
基于ARM7芯片的数码相框开发学院:
计算机与软件学院专业:
软件工程报告人:
学号:
班级:
同组人:
学号:
班级:
指导教师:
实验时间:
2009-10-122010-9-12实验报告提交时间:
教务处制实验目的与要求:
(1)了解ARM指令集;
(2)掌握直入键盘与矩阵键盘的原理和键盘寄存器的功能;(3)掌握图像处理算法;(4)掌握配置LCD控制器实现显示图片与文字。
(5)使用实验箱实现数码相框的功能;(6)了解AXDDebugger仿真调试的使用方法;(7)掌握8段码的知识;方法、步骤:
系统设计思路:
实验中使用的硬件设备是实验箱的LCD显示模块,LED显示模块,4*4键盘模块。
系统开始时,先显示开机图片,然后进入图片播放模式,当有按键捕获信号时,在LED上显示相应的值并进入相对应的按键中断程序。
当要进行图片处理时,使用按键上一张或下一张选择要处理的图片、再按对应的图片处理按键进行图片处理。
系统流程图:
以上为整个系统简要流程图,之后各种模块实现皆是为此展开。
LCD显示图片原理:
在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为FrameBuffer,或显存,显示屏上的每一点都必然与FrameBuffer里的某一位置对应,所以解决显示屏的显示问题,首先需要解决的是FrameBuffer的大小以及屏上的每一象素与FrameBuffer的映射关系。
按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用的是16位色(65536种颜色)显示。
计算机反映自然界的颜色是通过RGB值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出响应的RGB值,FrameBuffer为屏幕提供显示的内容,就必须能够从FrameBuffer里得到每一个象素的RGB值,在16位/象素的模式下,FrameBuffer里的每个单元16位,每个单元代表一个象素的RGB值,如下图显示:
FrameBufferSize的大小计算公式如下图,所以640480,16位/象素,单屏幕模式,Framebuffer大小为614400个字节。
我们使用image2LCD软件将图片装换成数组形式,数组开始的8个数据为图片信息,之后数组中每2个数据为一个像素点的颜色,由数组开始的8个数据得出图片大小,按顺序排列之后数据便可在LCD中显示整个图片。
由于长度问题,存在高8位与低8位,所以像素点的对应RGB值为后一个数据左移8位再加上前一个数据。
LCD像素显示主要函数:
voidlcd_put_pixel(intx,inty,unsignedcharc)longintbase_addr;base_addr=0xa0500000;if(x1280&y480)/限制图片显示范围(*(unsignedchar*)(base_addr+y*1280+x)=c;4*4键盘捕获原理:
通过调用直入键盘接口和矩阵键盘、并初始化和调用键盘寄存器,实现了4*4键盘同时使用,使得系统可以通过键盘的按键来驱动8段数码管的点亮(在此实验中,LED的点亮是为了检验按键是否正常,在日后版本中此功能可去掉)和做出相应图片处理效果。
4*4键盘的主要功能:
系统进入图片处理时,通过按键捕获进行相应的图片处理效果。
同时也会显示相应的LED。
(测试期间方便检验按键是否正确)实验过程及内容:
图像处理算法:
(所有效果图请见数据处理分析)正常图片显示:
(之后所有图像处理的基础)判断图片数组前8个数据得到图片长宽后,通过LCD像素显示主要函数按顺序把图片数组数据填充到FrameBuffer中,最终LCD得以把图片显示出来。
(之后各图像处理算法均通过此算法基础进行修改得来)图片放大:
图片放大采用整数倍放大,简单来说就是原来一个像素点在放大后显示4个像素点。
例如2倍放大时就是将每个像素点的颜色填充为以他为左上角的2*2矩形的4个像素点,此时图片长宽都增大一倍实现图像放大效果。
灰度效果:
灰度效果就是将图像各个像素的RGB值提取出来进行加权运算后再填充回去,便可达到灰度效果。
值得注意的是,在本实验中,加权运算之前G值需要右移一位(因为本实验中LCD显示的R、G、B长度分别为5、6、5,经过实验多次尝试,要得到灰度需要在加权运算中保持长度一致),加权运算后G值再左移一位,并RGB值判断是否溢出。
图片镜像:
镜像变换是指将指定区域的图像左右翻转地显示在屏幕。
分析镜像变换过程可以发现:
每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。
因此,采用按行逐点变换的方式实现图像的镜像。
图片缩小:
图片缩小采用整数倍缩小,简单来说就是像素点间隔显示。
例如2倍缩小时就是将像素点矩阵的奇数坐标保留,偶数坐标舍去来实现图像缩小效果。
石雕效果:
浮雕效果就是只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果,实验采用的算法是将要处理的像素取值为与处于对角线上的另一个像素间的差值,然后在让对应的RGB值分别加上16、32、16,作为新像素点的值。
颜色翻转:
反色的原理是将R、G、B值反转。
用0XFF减去数组中的每一个值即可以得到新的数组,在对应显示即可。
旋转90:
图片旋转的原理就是将像素点矩阵旋转90,然后将再将新的矩阵显示出来。
如下图:
百叶窗效果:
图片百叶窗效果显示就是显示图片时按一定的数目间隔显示(实验中取10)。
例如纵向的百叶窗效果就是当第1列显示完毕后显示第11列,当超多图片长度后回到第2列显示,如此类推知道显示完图片。
图像切换的算法:
程序一开始声明一指针,通过按键捕获和指针切换指向不同的图像数组便可实现不同图片间的切换。
以此为基础,实现了图片的幻灯片播放效果、下一张和上一张的切换等。
下一张图片切换的流程图:
数据处理分析:
图像放大:
(左边为原图(正常效果),右边为效果图)灰度效果:
(左边为原图,右边为效果图)镜像效果:
(左边为原图,右边为效果图)图像缩小:
(左边为原图,右边为效果图)石雕效果:
(左边为原图,右边为效果图)颜色翻转:
(左边为原图,右边为效果图)旋转90:
(左边为原图,右边为效果图)百叶窗效果:
(左边为原图,中间为横向效果图,右边为纵向效果图)图像切换效果:
数目相框市场调研与功能设想PPT:
数码相框功能实现PPT:
实验结论:
通过本次实验,使我对汇编与C语言混合编程,掌握了8段码的知识,直入键盘与矩阵键盘的原理和键盘寄存器的功能有了更深入的了解,并清楚了解到如何配置LCD控制器,实现显示图片与文字,还有学会许多图像处理算法。
在实验中,使得自己学到的东西得以学以致用,并成功实现各种功能,那种喜悦心情令人难以忘怀。
但同时在实验中也认识到了自己学习中的不足。
在实验中遇到关于过不少的难题,如:
图像显示的实验、系统架构、图像处理方面的算法等。
但通过与队友相互讨论,上网或去图书馆找资料,最终都一一克服了这些难题并最后成功地完成实验。
期间不仅增强了自己团队合作能力与自我学习能力,更使自己的编程能力在本次实验中得到了很大的提升。
虽然本次实验完成的数码相框还有一些代码没有很好完善,例如实数倍缩放,任意角度旋转等功能。
功能效果方面也还存在一些不足,例如图像不能二次处理,图像压缩,缺少系统菜单等不足。
但我相信通过本次实验种种成功的、不足的、失败的经验,能使我在日后的实验中更好地发挥,并使我不断进步。
缺陷与不足是在所难免的,但它们却能鞭策我向前。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
附录:
(源程序代码)library_register.sEXPORTgpio_GPDR1EXPORTgpio_GPDR2EXPORTgpio_GAFR1_UEXPORTgpio_GAFR2_LEXPORTinit_GPDR1EXPORTinit_GPDR2EXPORTinit_GAFR1_UEXPORTinit_GAFR2_LEXPORTdesc_word_0EXPORTdesc_word_1EXPORTdesc_word_2EXPORTdesc_word_3EXPORTinit_word_0EXPORTinit_word_1EXPORTinit_word_2EXPORTinit_word_3EXPORTLCCR0EXPORTLCCR1EXPORTLCCR2EXPORTLCCR3EXPORTFBR0EXPORTFBR1EXPORTLCSREXPORTLIIDREXPORTFDADR0EXPORTFDADR1EXPORTinit_LCCR0EXPORTinit_LCCR1EXPORTinit_LCCR2EXPORTinit_LCCR3EXPORTinit_FBR0EXPORTinit_FBR1EXPORTinit_FDADR0EXPORTbacklight_csEXPORTlcdlightEXPORTMDCNFGEXPORTMDREFREXPORTMSC0EXPORTMSC1EXPORTMSC2EXPORTMECREXPORTSXCNFGEXPORTSXMRSEXPORTMDMRSEXPORTBOOT_DEFEXPORTinit_MDCNFGEXPORTinit_MDREFREXPORTinit_MSC0EXPORTinit_MSC1EXPORTinit_MSC2EXPORTinit_MECREXPORTinit_SXCNFGEXPORTinit_SXMRSEXPORTinit_MDMRSEXPORTinit_BOOT_DEFAREAlibrary_register,DATA,READONLY;GPIOconfigurationgpio_GPDR1EQU0x40e00010gpio_GPDR2EQU0x40e00014gpio_GAFR1_UEQU0x40e00060gpio_GAFR2_LEQU0x40e00064init_GPDR1EQU0xfc000000init_GPDR2EQU0x7fffinit_GAFR1_UEQU0xaaa00000init_GAFR2_LEQU0x2aaaaaaa;FrameDescriptordesc_word_0EQU0xa0300000desc_word_1EQU0xa0300004desc_word_2EQU0xa0300008desc_word_3EQU0xa030000cinit_word_0EQU0xa0300000init_word_1EQU0xa0500000init_word_2EQU0x0init_word_3EQU0x00096000;LCDControllerLCCR0EQU0x44000000LCCR1EQU0x44000004LCCR2EQU0x44000008LCCR3EQU0x4400000CFBR0EQU0x44000020FBR1EQU0x44000024LCSREQU0x44000038LIIDREQU0x4400003CFDADR0EQU0x44000200FDADR1EQU0x44000210init_LCCR0EQU0x7b008f9;3b008f8;003008f8init_LCCR1EQU0x6481067f;530fee7finit_LCCR2EQU0x220001df;210a05dfinit_LCCR3EQU0x4400006;0440ff07init_FBR0EQU0x0init_FBR1EQU0x0init_FDADR0EQU0xa0300000backlight_csEQU0x08000000lcdlightEQU0x80;MemoryControllerMDCNFGEQU0x48000000MDREFREQU0x48000004MSC0EQU0x48000008MSC1EQU0x4800000cMSC2EQU0x48000010MECREQU0x48000014SXCNFGEQU0x4800001CSXMRSEQU0x48000024MDMRSEQU0x48000040BOOT_DEFEQU0x48000044init_MDCNFGEQU0x02000ac9init_MDREFREQU0x0011e018init_MSC0EQU0x95c095c0init_MSC1EQU0xb884a691init_MSC2EQU0x7ff4b88cinit_MECREQU0x1init_SXCNFGEQU0x0;6011init_SXMRSEQU0x0init_MDMRSEQU0x320032init_BOOT_DEFEQU0x00000008ENDlibrary_variant.sEXPORTpostDelayEXPORTstack_myselfAREAlibrary_variant,DATA,READONLYpostDelayEQU0x1000stack_myselfEQU0xa0700000ENDos_lcd.cexternvoidprint_3232(char*,int,int);/externvoidprint_0808(char*,int,int);/externvoidprint_0813(char*,int,int);externvoidprint_song2312(char*,int,int);externvoiddisable_lcd(void);externvoidenable_lcd(void);externvoidlighton1(void);externvoidlighton2(void);externvoidlightoff1(void);externvoidlightoff2(void);/externvoidtypename(void);externchargImage_00;externchargImage_01;externchargImage_02;externchargImage_03;externchargImage_04;externchargImage_4114;externchargImage_123;externchargImage_pic;externchargImage_111;externchargImage_11;externchargImage_22;externchargImage_33;externchargImage_0;externchargImage_1;externchargImage_2;externchargImage_3;externchargImage_4;externchargImage_5;externvoidprint_pic(char*);externvoidprint_pic1(char*);externvoidprint_pic2(char*);externvoidprint_pic5(char*);externvoidprint_pic6(char*);externvoidprint_pic7(char*);externvoidprint_pic8(char*);externvoidprint_pic9(char*);externvoidprint_pic10(char*);externvoidprint_pic_test(char*);externvoidprint_pic_exchange(char*);externvoidprint_pic_exchange2(char*);externvoidscreen_clean(int);/externcharword_1324;/externcharword_2324;/externcharword_3324;/externcharword_4324;/externcharword_5324;/externcharword_6324;/externcharword_7324;/externcharcharacter8_8;/externcharcharacter8_13;externcharsong2312_1612;#defineLED_CS3(*(volatileunsignedshortint*)(0x10300000)#defineLED_CS4(*(volatileunsignedshortint*)(0x10400000)/键盘设置寄存器#defineKEYPAD_1(*(volatileunsignedint*)(0x41500000)#defineKEYPAD_2(*(volatileunsignedint*)(0x41500048)/键盘允许中断设置#defineINTERRUPTION(*(volatileunsignedint*)(0x40d00004)/只读寄存器#defineKEYPAD_8(*(volatileunsignedchar*)(0x41500008)#defineKEYPAD0_11(*(volatileunsignedchar*)(0x41500020)char*pictest;intpic_no=0;voidudelay(intmulti)longintdelay_1,delay_2;multi*=5;for(delay_2=0;delay_2multi;delay_2+)for(delay_1=0;delay_1100000;delay_1+);voidtest()/whitescreen_clean(0xFFFFFFFF);print_pic(gImage_pic);udelay(50);screen_clean(0xFFFFFFFF);print_pic5(gImage_pic);udelay(50);/选择显示图片voidpic_test(inti)switch(i)case0:
pictest=gImage_01;break;case1:
pictest=gImage_02;break;case2:
pictest=gImage_03;break;case3:
pictest=gImage_04;break;default:
break;/全部自动播放voidpic_all()inti;for(i=0;i3)pic_no=0;pic_test(pic_no);udelay(40);voidIRQ_keypad(void)chark;charch;k=KEYPAD_8;ch=KEYPAD0_11;switch(k)case0x40:
LED_CS3=0xf040;screen_clean(0xFFFFFFFF);print_pic(pictest);/由上到下,左到右显示图片break;case0x02:
LED_CS3=0xf079;screen_clean(0xFFFFFFFF);print_pic5(pictest);/左右交换,显示图片break;case0x04:
LED_CS3=0xf024;screen_clean(0xFFFFFFFF);print_pic2(pictest);/由上到下,左到右显示图片(长宽各*2)break;case0x20:
LED_CS3=0xf030;screen_clean(0xFFFFFFFF);print_pic10(pictest);/缩小break;default:
break;switch(ch)case0x00:
LED_CS3=0xf019;screen_clean(0xFFFFFFFF);print_pic_exchange2(pictest);/石雕break;case0x01:
LED_CS3=0xf012;screen_clean(0xFFFFFFFF);print_pic6(pictest);/灰度显示break;case0x02:
LED_CS3=0xf003;screen_clean(0xFFFFFFFF);print_pic_exchange(pictest);/颜色反转break;case0x05:
LED_CS3=0xf078;screen_clean(0xFFFFFFFF);print_pic7(pictest);/图片旋转90度break;case0x10:
LED_CS3=0xf000;screen_clean(0xFFFFFFFF);print_pic8(pictest);/百叶窗横向break;case0x11:
LED_CS3=0xf018;screen_clean(0xFFFFFFFF);print_pic9(pictest);/百叶窗纵向break;case0x12:
screen_clean(0xFFFFFFFF);pic_all();/播放全部图片LED_CS3=0xf008;break;case0x15:
LED_CS3=0xf000;test();break;case0x20:
LED_CS3=0xf046;screen_clean(0xFFFFFFFF);pic_no+;/播放下一张图片if(pic_no3)pic_no=0;pic_test(pic_no);print_pic(pictest);udelay(20);break;case0x21:
LED_CS3=0xf040;screen_clean(0xFFFFFFFF);pic_no-;/播放下一张图片if(pic_no0)pic_no=3;pic_test(pic_no);print_pic(pictest);udelay(20);break;case0x22:
LED_CS3=0xf006;screen_clean(0xFFFFFFFF);print_pic(gImage_123);break;case0x25:
LED_CS3=0xf00e;screen_clean(0xFFFFFFFF);/清屏break;default:
break;voiddummyOs()/screen_clean(0xFFFFFFFF);/charpictest;/intpic_no;pictest=gImage_01;KEYPAD_1=0x7ffffff3;/中断直
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM7 芯片 数码 开发