基于ARM7芯片的数码相框开发.doc

上传人:知****量 文档编号:31719537 上传时间:2022-08-08 格式:DOC 页数:33 大小:103.54KB
返回 下载 相关 举报
基于ARM7芯片的数码相框开发.doc_第1页
第1页 / 共33页
基于ARM7芯片的数码相框开发.doc_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《基于ARM7芯片的数码相框开发.doc》由会员分享,可在线阅读,更多相关《基于ARM7芯片的数码相框开发.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、深 圳 大 学 实 验 报 告实验课程名称: 实验项目名称:基于ARM7芯片的数码相框开发 学院: 计算机与软件学院 专业: 软件工程 报告人:学号:班级: 同组人:学号:班级: 指导教师: 实验时间:2009-10-12 2010-912 实验报告提交时间:教务处制实验目的与要求:(1) 了解ARM指令集;(2) 掌握直入键盘与矩阵键盘的原理和键盘寄存器的功能;(3) 掌握图像处理算法;(4) 掌握配置LCD控制器实现显示图片与文字。(5) 使用实验箱实现数码相框的功能;(6) 了解AXD Debugger 仿真调试的使用方法;(7) 掌握8 段码的知识;方法、步骤:系统设计思路:实验中使用

2、的硬件设备是实验箱的LCD显示模块,LED显示模块,44键盘模块。系统开始时,先显示开机图片,然后进入图片播放模式,当有按键捕获信号时,在LED上显示相应的值并进入相对应的按键中断程序。当要进行图片处理时,使用按键上一张或下一张选择要处理的图片、再按对应的图片处理按键进行图片处理.系统流程图:以上为整个系统简要流程图,之后各种模块实现皆是为此展开.LCD显示图片原理:在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为Frame Buffer,或显存,显示屏上的每一点都必然与Frame Buffer 里的某一位置对应,所以解决显示屏的显

3、示问题,首先需要解决的是Frame Buffer 的大小以及屏上的每一象素与Frame Buffer 的映射关系。按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用的是16位色(65536 种颜色)显示。计算机反映自然界的颜色是通过RGB 值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出响应的RGB 值,Frame Buffer 为屏幕提供显示的内容,就必须能够从Frame Buffer里得到每一个象素的RGB 值,在16 位/象素的模式下,Frame Buffer 里的每个单元16 位,每个单元代表一个象素的RGB 值,如下图显示:FrameBufferSi

4、ze的大小计算公式如下图,所以640480,16 位/象素,单屏幕模式,Frame buffer 大小为614400 个字节。我们使用image2LCD软件将图片装换成数组形式,数组开始的8个数据为图片信息,之后数组中每2个数据为一个像素点的颜色,由数组开始的8个数据得出图片大小,按顺序排列之后数据便可在LCD中显示整个图片.由于长度问题,存在高8位与低8位,所以像素点的对应RGB值为后一个数据左移8位再加上前一个数据。LCD像素显示主要函数:void lcd_put_pixel(int x,int y,unsigned char c) long int base_addr; base_add

5、r = 0xa0500000; if(x1280 & y480)/限制图片显示范围 (*(unsigned char )(base_addr+y1280+x)) = c;4*4键盘捕获原理: 通过调用直入键盘接口和矩阵键盘、并初始化和调用键盘寄存器,实现了44键盘同时使用,使得系统可以通过键盘的按键来驱动8 段数码管的点亮(在此实验中,LED的点亮是为了检验按键是否正常,在日后版本中此功能可去掉)和做出相应图片处理效果.44键盘的主要功能:系统进入图片处理时,通过按键捕获进行相应的图片处理效果.同时也会显示相应的LED。(测试期间方便检验按键是否正确)实验过程及内容:图像处理算法:(所有效果图

6、请见数据处理分析)正常图片显示:(之后所有图像处理的基础) 判断图片数组前8个数据得到图片长宽后,通过LCD像素显示主要函数按顺序把图片数组数据填充到Frame Buffer中,最终LCD得以把图片显示出来。(之后各图像处理算法均通过此算法基础进行修改得来)图片放大:图片放大采用整数倍放大,简单来说就是原来一个像素点在放大后显示4个像素点。例如2倍放大时就是将每个像素点的颜色填充为以他为左上角的2*2矩形的4个像素点,此时图片长宽都增大一倍实现图像放大效果。灰度效果:灰度效果就是将图像各个像素的RGB值提取出来进行加权运算后再填充回去,便可达到灰度效果。值得注意的是,在本实验中,加权运算之前G

7、值需要右移一位(因为本实验中LCD显示的R、G、B长度分别为5、6、5,经过实验多次尝试,要得到灰度需要在加权运算中保持长度一致),加权运算后G值再左移一位,并RGB值判断是否溢出。图片镜像:镜像变换是指将指定区域的图像左右翻转地显示在屏幕。分析镜像变换过程可以发现:每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。因此,采用按行逐点变换的方式实现图像的镜像。图片缩小:图片缩小采用整数倍缩小,简单来说就是像素点间隔显示。例如2倍缩小时就是将像素点矩阵的奇数坐标保留,偶数坐标舍去来实现图像缩小效果。石雕效果:浮雕效果就是

8、只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果,实验采用的算法是将要处理的像素取值为与处于对角线上的另一个像素间的差值,然后在让对应的RGB值分别加上16、32、16,作为新像素点的值。颜色翻转:反色的原理是将R、G、B值反转。用0XFF减去数组中的每一个值即可以得到新的数组,在对应显示即可。旋转90:图片旋转的原理就是将像素点矩阵旋转90,然后将再将新的矩阵显示出来。如下图:百叶窗效果: 图片百叶窗效果显示就是显示图片时按一定的数目间隔显示(实验中取10)。例如纵向的百叶窗效果就是当第1列显示完毕后显示第11列,当超多图片长度后回到第2列显示,如此类推

9、知道显示完图片.图像切换的算法:程序一开始声明一指针,通过按键捕获和指针切换指向不同的图像数组便可实现不同图片间的切换。以此为基础,实现了图片的幻灯片播放效果、下一张和上一张的切换等。下一张图片切换的流程图:数据处理分析:图像放大:(左边为原图(正常效果),右边为效果图)灰度效果:(左边为原图,右边为效果图)镜像效果:(左边为原图,右边为效果图)图像缩小:(左边为原图,右边为效果图)石雕效果:(左边为原图,右边为效果图)颜色翻转:(左边为原图,右边为效果图)旋转90:(左边为原图,右边为效果图)百叶窗效果:(左边为原图,中间为横向效果图,右边为纵向效果图)图像切换效果:数目相框市场调研与功能设

10、想PPT:数码相框功能实现PPT:实验结论:通过本次实验,使我对汇编与C语言混合编程,掌握了8 段码的知识,直入键盘与矩阵键盘的原理和键盘寄存器的功能有了更深入的了解,并清楚了解到如何配置LCD控制器,实现显示图片与文字,还有学会许多图像处理算法.在实验中,使得自己学到的东西得以学以致用,并成功实现各种功能,那种喜悦心情令人难以忘怀。但同时在实验中也认识到了自己学习中的不足。在实验中遇到关于过不少的难题,如:图像显示的实验、系统架构、图像处理方面的算法等.但通过与队友相互讨论,上网或去图书馆找资料,最终都一一克服了这些难题并最后成功地完成实验。期间不仅增强了自己团队合作能力与自我学习能力,更使

11、自己的编程能力在本次实验中得到了很大的提升。虽然本次实验完成的数码相框还有一些代码没有很好完善,例如实数倍缩放,任意角度旋转等功能。功能效果方面也还存在一些不足,例如图像不能二次处理,图像压缩,缺少系统菜单等不足。但我相信通过本次实验种种成功的、不足的、失败的经验,能使我在日后的实验中更好地发挥,并使我不断进步。缺陷与不足是在所难免的,但它们却能鞭策我向前。指导教师批阅意见:成绩评定: 指导教师签字: 年 月 日备注:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。附录:(源程序代码)library_register

12、。s EXPORT gpio_GPDR1 EXPORT gpio_GPDR2 EXPORT gpio_GAFR1_U EXPORT gpio_GAFR2_LEXPORT init_GPDR1 EXPORT init_GPDR2 EXPORT init_GAFR1_U EXPORT init_GAFR2_L EXPORT desc_word_0 EXPORT desc_word_1 EXPORT desc_word_2 EXPORT desc_word_3 EXPORT init_word_0 EXPORT init_word_1 EXPORT init_word_2 EXPORT init_w

13、ord_3 EXPORT LCCR0 EXPORT LCCR1 EXPORT LCCR2 EXPORT LCCR3 EXPORT FBR0 EXPORT FBR1 EXPORT LCSR EXPORT LIIDR EXPORT FDADR0 EXPORT FDADR1 EXPORT init_LCCR0 EXPORT init_LCCR1 EXPORT init_LCCR2 EXPORT init_LCCR3 EXPORT init_FBR0 EXPORT init_FBR1 EXPORT init_FDADR0 EXPORT backlight_cs EXPORT lcdlight EXPO

14、RT MDCNFG EXPORT MDREFR EXPORT MSC0 EXPORT MSC1 EXPORT MSC2 EXPORT MECR EXPORT SXCNFG EXPORT SXMRS EXPORT MDMRS EXPORT BOOT_DEF EXPORT init_MDCNFG EXPORT init_MDREFR EXPORT init_MSC0 EXPORT init_MSC1 EXPORT init_MSC2 EXPORT init_MECR EXPORT init_SXCNFG EXPORT init_SXMRS EXPORT init_MDMRS EXPORT init

15、_BOOT_DEF AREA library_register ,DATA ,READONLY;GPIO configurationgpio_GPDR1 EQU 0x40e00010gpio_GPDR2 EQU 0x40e00014gpio_GAFR1_U EQU 0x40e00060gpio_GAFR2_L EQU 0x40e00064init_GPDR1 EQU 0xfc000000init_GPDR2 EQU 0x7fffinit_GAFR1_U EQU 0xaaa00000init_GAFR2_L EQU 0x2aaaaaaa;Frame Descriptordesc_word_0 E

16、QU 0xa0300000desc_word_1 EQU 0xa0300004desc_word_2 EQU 0xa0300008desc_word_3 EQU 0xa030000cinit_word_0 EQU 0xa0300000init_word_1 EQU 0xa0500000init_word_2 EQU 0x0init_word_3 EQU 0x00096000;LCD ControllerLCCR0 EQU 0x44000000 LCCR1 EQU 0x44000004LCCR2 EQU 0x44000008LCCR3 EQU 0x4400000CFBR0 EQU 0x44000

17、020FBR1 EQU 0x44000024LCSR EQU 0x44000038LIIDR EQU 0x4400003CFDADR0 EQU 0x44000200FDADR1 EQU 0x44000210init_LCCR0 EQU 0x7b008f9;3b008f8;003008f8init_LCCR1 EQU 0x6481067f;530fee7finit_LCCR2 EQU 0x220001df;210a05dfinit_LCCR3 EQU 0x4400006;0440ff07init_FBR0 EQU 0x0init_FBR1 EQU 0x0init_FDADR0 EQU 0xa03

18、00000backlight_cs EQU 0x08000000lcdlight EQU 0x80;Memory ControllerMDCNFG EQU 0x48000000MDREFR EQU 0x48000004MSC0 EQU 0x48000008MSC1 EQU 0x4800000cMSC2 EQU 0x48000010MECR EQU 0x48000014SXCNFG EQU 0x4800001CSXMRS EQU 0x48000024MDMRS EQU 0x48000040BOOT_DEF EQU 0x48000044init_MDCNFG EQU 0x02000ac9init_

19、MDREFR EQU 0x0011e018init_MSC0 EQU 0x95c095c0init_MSC1 EQU 0xb884a691init_MSC2 EQU 0x7ff4b88cinit_MECR EQU 0x1init_SXCNFG EQU 0x0;6011init_SXMRS EQU 0x0init_MDMRS EQU 0x320032init_BOOT_DEF EQU 0x00000008ENDlibrary_variant。sEXPORTpostDelayEXPORT stack_myselfAREA library_variant ,DATA ,READONLYpostDel

20、ayEQU0x1000stack_myself EQU 0xa0700000ENDos_lcd.cextern void print_3232(char *,int, int);/extern void print_0808(char ,int, int);/extern void print_0813(char ,int, int);extern void print_song2312(char *, int, int);extern void disable_lcd(void);extern void enable_lcd(void);extern void lighton1(void);

21、extern void lighton2(void);extern void lightoff1(void);extern void lightoff2(void);/extern void typename(void);extern char gImage_00;extern char gImage_01;extern char gImage_02;extern char gImage_03;extern char gImage_04;extern char gImage_4114;extern char gImage_123;extern char gImage_pic;extern ch

22、ar gImage_111;extern char gImage_11;extern char gImage_22;extern char gImage_33;extern char gImage_0;extern char gImage_1;extern char gImage_2;extern char gImage_3;extern char gImage_4;extern char gImage_5;extern void print_pic(char );extern void print_pic1(char *);extern void print_pic2(char );exte

23、rn void print_pic5(char *);extern void print_pic6(char *);extern void print_pic7(char *);extern void print_pic8(char *);extern void print_pic9(char *);extern void print_pic10(char *);extern void print_pic_test(char *);extern void print_pic_exchange(char );extern void print_pic_exchange2(char *);exte

24、rn void screen_clean(int);/extern char word_1324 ;/extern char word_2324 ;/extern char word_3324 ;/extern char word_4324 ;/extern char word_5324 ;/extern char word_6324 ;/extern char word_7324 ;/extern char character8_8;/extern char character8_13;extern char song2312_1612;define LED_CS3(((volatile u

25、nsigned short int )(0x10300000)define LED_CS4(*((volatile unsigned short int )(0x10400000)))/键盘设置寄存器define KEYPAD_1 (*((volatile unsigned int )(0x41500000)define KEYPAD_2 (*(volatile unsigned int )(0x41500048))/键盘允许中断设置define INTERRUPTION ((volatile unsigned int )(0x40d00004))/只读寄存器define KEYPAD_8((

26、volatile unsigned char *)(0x41500008))#define KEYPAD0_11((volatile unsigned char *)(0x41500020)))char pictest;int pic_no = 0;void udelay(int multi) long int delay_1,delay_2; multi*=5; for (delay_2=0;delay_2multi;delay_2+) for(delay_1=0;delay_13)pic_no=0; pic_test(pic_no); udelay(40);void IRQ_keypad(

27、void) char k; char ch; k=KEYPAD_8; ch=KEYPAD0_11; switch(k) case 0x40: LED_CS3=0xf040; screen_clean(0xFFFFFFFF); print_pic(pictest);/由上到下,左到右显示图片 break; case 0x02: LED_CS3=0xf079; screen_clean(0xFFFFFFFF); print_pic5(pictest);/左右交换,显示图片 break; case 0x04: LED_CS3=0xf024; screen_clean(0xFFFFFFFF); pri

28、nt_pic2(pictest);/由上到下,左到右显示图片(长宽各*2) break; case 0x20: LED_CS3=0xf030; screen_clean(0xFFFFFFFF); print_pic10(pictest);/缩小 break; default: break; switch(ch) case 0x00: LED_CS3=0xf019; screen_clean(0xFFFFFFFF); print_pic_exchange2(pictest);/石雕 break; case 0x01: LED_CS3=0xf012; screen_clean(0xFFFFFFFF

29、); print_pic6(pictest);/灰度显示 break; case 0x02: LED_CS3=0xf003; screen_clean(0xFFFFFFFF); print_pic_exchange(pictest);/颜色反转 break; case 0x05: LED_CS3=0xf078; screen_clean(0xFFFFFFFF); print_pic7(pictest);/ 图片旋转90度 break; case 0x10: LED_CS3=0xf000; screen_clean(0xFFFFFFFF); print_pic8(pictest);/百叶窗横向

30、break; case 0x11: LED_CS3=0xf018; screen_clean(0xFFFFFFFF); print_pic9(pictest);/百叶窗纵向 break; case 0x12: screen_clean(0xFFFFFFFF); pic_all();/播放全部图片 LED_CS3=0xf008; break; case 0x15: LED_CS3=0xf000; test(); break; case 0x20: LED_CS3=0xf046; screen_clean(0xFFFFFFFF); pic_no+;/播放下一张图片 if(pic_no3)pic_n

31、o=0; pic_test(pic_no); print_pic(pictest); udelay(20); break; case 0x21: LED_CS3=0xf040; screen_clean(0xFFFFFFFF); pic_no-;/播放下一张图片 if(pic_no0)pic_no=3; pic_test(pic_no); print_pic(pictest); udelay(20); break; case 0x22: LED_CS3=0xf006; screen_clean(0xFFFFFFFF); print_pic(gImage_123); break; case 0x

32、25: LED_CS3=0xf00e; screen_clean(0xFFFFFFFF);/清屏 break; default: break; void dummyOs()/screen_clean(0xFFFFFFFF);/char pictest;/int pic_no;pictest = gImage_01;KEYPAD_1=0x7ffffff3; /中断直接键盘0x600003f3;/0x2faff1c2;/ KEYPAD_2=0x00000303; INTERRUPTION=0x00000010; LED_CS3=0x007f; LED_CS4=0xf0f0;while(1)/whi

33、tescreen_clean(0xFFFFFFFF);/typename();print_pic8(gImage_00);udelay(100);screen_clean(0xFFFFFFFF);/typename();print_pic9(gImage_00);udelay(100);lighton1();lightoff2();boot.sIMPORTpostDelayIMPORTpost_initGpioIMPORTdummyOsIMPORTpost_LcdControllerIMPORTbacklight_csIMPORTlcdlight IMPORTstack_myselfIMPOR

34、Tinit_MemoryIMPORTscreen_cleanIMPORTIRQ_HandlerAREA boot ,CODE ,READONLYENTRYResetEntryB Reset_HandlerB Undefined_HandlerB SWI_HandlerB Prefetch_HandlerB DataAbort_HandlerNOPB IRQ_Handler B FIQ_HandlerUndefined_HandlerBUndefined_HandlerSWI_Handler BSWI_HandlerPrefetch_HandlerBPrefetch_HandlerDataAbo

35、rt_HandlerBDataAbort_Handler;IRQ_Handler;BIRQ_HandlerFIQ_HandlerBFIQ_Handler;Defined by yourselfReset_Handler;*;Init GPIO;*mov r14,pcldr pc,=post_initGpio ;*;Init Memory;*mov r14,pc ldr pc,=init_Memory;*;Init Stack;*ldr r11, =stack_myselfmov r13, r11;*;堆栈init_Stack;* MSR CPSR_c, #0xd2 ;MRS和MSR都是程序状态寄存器传指令.把0XD2送到CPSR_c中的低字节中70LDR SP, =0xa0605000 ;LDR 是把一个数字常量或一个地址加载到寄存器伪指令0x

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁