基于ARM芯片的数码相框开发(完整资料)_第1页
基于ARM芯片的数码相框开发(完整资料)_第2页
基于ARM芯片的数码相框开发(完整资料)_第3页
基于ARM芯片的数码相框开发(完整资料)_第4页
基于ARM芯片的数码相框开发(完整资料)_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ARM芯片的数码相框开发(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

基于ARM芯片的数码相框开发(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)深圳大学实验报告实验课程名称:实验项目名称:基于ARM7芯片的数码相框开发学院:计算机与软件学院专业:软件工程报告人:学号:班级:同组人:学号:班级:指导教师:实验时间:2009-10-12~2010-9—12实验报告提交时间:教务处制实验目的与要求:了解ARM指令集;掌握直入键盘与矩阵键盘的原理和键盘寄存器的功能;掌握图像处理算法;掌握配置LCD控制器实现显示图片与文字。使用实验箱实现数码相框的功能;了解AXDDebugger仿真调试的使用方法;掌握8段码的知识;方法、步骤:系统设计思路:实验中使用的硬件设备是实验箱的LCD显示模块,LED显示模块,4*4键盘模块.系统开始时,先显示开机图片,然后进入图片播放模式,当有按键捕获信号时,在LED上显示相应的值并进入相对应的按键中断程序。当要进行图片处理时,使用按键上一张或下一张选择要处理的图片、再按对应的图片处理按键进行图片处理.系统流程图:以上为整个系统简要流程图,之后各种模块实现皆是为此展开.LCD显示图片原理:在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为FrameBuffer,或显存,显示屏上的每一点都必然与FrameBuffer里的某一位置对应,所以解决显示屏的显示问题,首先需要解决的是FrameBuffer的大小以及屏上的每一象素与FrameBuffer的映射关系.按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用的是16位色(65536种颜色)显示。计算机反映自然界的颜色是通过RGB值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出响应的RGB值,FrameBuffer为屏幕提供显示的内容,就必须能够从FrameBuffer里得到每一个象素的RGB值,在16位/象素的模式下,FrameBuffer里的每个单元16位,每个单元代表一个象素的RGB值,如下图显示:FrameBufferSize的大小计算公式如下图,所以640×480,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(x〈1280&&y<480)//限制图片显示范围 (*((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_DEF AREAlibrary_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_DEFEQU0x00000008 ENDlibrary_variant。s EXPORT postDelay EXPORTstack_myselfﻩAREAlibrary_variant,DATA,READONLYpostDelay EQUﻩ0x1000stack_myselfEQU0xa0700000 ENDos_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_1[32][4];//externcharword_2[32][4];//externcharword_3[32][4];//externcharword_4[32][4];//externcharword_5[32][4];//externcharword_6[32][4];//externcharword_7[32][4];//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_2〈multi;delay_2++)for(delay_1=0;delay_1〈100000;delay_1++);}voidtest(){ //white ﻩscreen_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;i<4;i++) { screen_clean(0xFFFFFFFF); print_pic(pictest);ﻩ pic_no++;if(pic_no>3)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_no>3)pic_no=0;pic_test(pic_no);print_pic(pictest);udelay(20);break;case0x21:LED_CS3=0xf040;screen_clean(0xFFFFFFFF);pic_no--;//播放下一张图片if(pic_no〈0)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;//中断直接键盘0x600003f3;//0x2faff1c2;//KEYPAD_2=0x00000303;INTERRUPTION=0x00000010;LED_CS3=0x007f;LED_CS4=0xf0f0;ﻩwhile(1) {ﻩ //white ﻩscreen_clean(0xFFFFFFFF); //typename(); print_pic8(gImage_00); udelay(100);ﻩﻩscreen_clean(0xFFFFFFFF); ﻩ//typename(); print_pic9(gImage_00);ﻩﻩudelay(100);ﻩﻩlighton1();ﻩ lightoff2(); }}boot.s IMPORT postDelay IMPORTﻩpost_initGpioﻩIMPORTﻩdummyOs IMPORT post_LcdControllerﻩIMPORT backlight_csﻩIMPORTﻩlcdlightﻩIMPORTﻩstack_myself IMPORT init_MemoryﻩIMPORT screen_cleanﻩIMPORTﻩIRQ_HandlerﻩAREAboot,CODE,READONLYﻩENTRYResetEntry ﻩBReset_HandlerﻩBUndefined_Handler BSWI_Handler BPrefetch_Handler BDataAbort_HandlerﻩNOPﻩBIRQ_HandlerﻩBFIQ_HandlerUndefined_Handler ﻩB Undefined_HandlerSWI_Handler B SWI_HandlerPrefetch_HandlerﻩB Prefetch_HandlerDataAbort_HandlerﻩB DataAbort_Handler;IRQ_Handler ;BﻩIRQ_Handler FIQ_HandlerﻩB FIQ_Handlerﻩﻩﻩ;DefinedbyyourselfReset_Handlerﻩﻩ;**************************ﻩ;InitGPIO ;**************************ﻩmovr14,pc ldrpc,=post_initGpio ;**************************ﻩ;InitMemory ;**************************ﻩmovr14,pc ldrpc,=init_Memory ;**************************ﻩ;InitStack ;************************** ldrr11,=stack_myself movr13,r11ﻩ;************************** ;堆栈init_Stack ;**************************MSRCPSR_c,#0xd2;MRS和MSR都是程序状态寄存器传指令。把0XD2送到CPSR_c中的低字节中[7~0]ﻩLDRSP,=0xa0605000;LDR是把一个数字常量或一个地址加载到寄存器伪指令0xa0605000MSRCPSR_c,#0xd1ﻩLDRSP,=0xa060a000MSRCPSR_c,#0xd7 LDRSP,=0xa060e000MSRCPSR_c,#0xdb LDRSP,=0xa0714000ﻩMSRCPSR_c,#0xdf LDRSP,=0xa0720000ﻩMSRCPSR_c,#0xd3ﻩLDRSP,=0xa0600000;///////////////////////;I位置1才允许IRQ中断P23 MRSR1,CPSRﻩBICR1,R1,#0x80 MSRCPSR_c,r1;***************************** IMPORT|Image$$RO$$Base|IMPORT|Image$$RO$$Limit| IMPORT|Image$$RW$$Base| IMPORT|Image$$ZI$$Base| IMPORT|Image$$ZI$$Limit|BaseOfROM DCD |Image$$RO$$Base|TopOfROMﻩDCDﻩ|Image$$RO$$Limit|BaseOfRWﻩDCD |Image$$RW$$Base|BaseOfZero DCD |Image$$ZI$$Base|EndOfBSS DCDﻩ|Image$$ZI$$Limit| adrr0,ResetEntry ldrr2,BaseOfROMﻩcmpr0,r2ﻩldreqr0,TopOfROM beqInitRAMﻩldrr3,TopOfROMﻩ;copyROData0ﻩ ldmiar0!,{r4-r7}ﻩstmiar2!,{r4-r7}ﻩcmpr2,r3 bcc%B0 subr2,r2,r3ﻩsubr0,r0,r2InitRAMﻩ;copyRWDataﻩldrr2,BaseOfRW ldrr3,BaseOfZero1 cmpr2,r3 ldrccr1,[r0],#4ﻩstrccr1,[r2],#4 bcc%B1 ;zeroinit movr0,#0 ldrr3,EndOfBSS2 cmpr2,r3 strccr0,[r2],#4bcc%B2ﻩ;movr14,pc ;ldrpc,=screen_cleanﻩ;*************************** ;LCD_Controllerﻩ;***************************ﻩmovr14,pcﻩldrpc,=post_LcdControllerﻩ;*************************** ;Loopﻩ;***************************ﻩldrr0,=postDelaypostLoopﻩsubr0,r0,#0x1ﻩcmpr0,#0x0bnepostLoopﻩ;**************************** ;turnonthelightofboard;**************************** MOVR0,#0xa000000ﻩ ﻩLDRHR2,[R0,#0]ﻩANDﻩR2,R2,#0xFFFFCFFFﻩSTRHR2,[R0,#0];**************************** ;turnonbacklight ;**************************** LDRHR2,[R0,#0]ﻩﻩORR R2,R2,#0x100 STRHR2,[R0,#0]ldrpc,=dummyOs ENDpost_initDescriptor.sIMPORTdesc_word_0IMPORTdesc_word_1IMPORTdesc_word_2IMPORTdesc_word_3IMPORTinit_word_0IMPORTinit_word_1IMPORTinit_word_2IMPORTinit_word_3IMPORTLCCR0IMPORTLCCR1IMPORTLCCR2IMPORTLCCR3IMPORTFBR0IMPORTFBR1IMPORTLCSRIMPORTLIIDRIMPORTFDADR0IMPORTFDADR1IMPORTinit_LCCR0IMPORTinit_LCCR1IMPORTinit_LCCR2IMPORTinit_LCCR3IMPORTinit_FBR0IMPORTinit_FBR1IMPORTinit_FDADR0EXPORTpost_LcdControllerAREApost_LcdController,CODE,READONLYldrr11,=desc_word_0ldrr1,=init_word_0strr1,[r11]nopnopldrr11,=desc_word_1ldrr1,=init_word_1strr1,[r11]nopnopldrr11,=desc_word_2ldrr1,=init_word_2strr1,[r11]nopnopldrr11,=desc_word_3ldrr1,=init_word_3strr1,[r11]nopnopnopnopldrr11,=LCCR1ldrr1,=init_LCCR1strr1,[r11]nopnopldrr11,=LCCR2ldrr1,=init_LCCR2strr1,[r11]nopnopldrr11,=LCCR3ldrr1,=init_LCCR3strr1,[r11]nopnopldrr11,=FDADR0ldrr1,=init_FDADR0strr1,[r11]nopnopldrr11,=LCCR0ldrr1,=init_LCCR0strr1,[r11]nopnopldrr11,=LCCR0ldrr1,[r11]orrr1,r1,#0x01strr1,[r11]movpc,r14ENDpost_initGpio.sIMPORTgpio_GPDR1IMPORTﻩgpio_GPDR2IMPORTgpio_GAFR1_UIMPORTgpio_GAFR2_LIMPORTinit_GPDR1IMPORTinit_GPDR2IMPORTinit_GAFR1_UIMPORTinit_GAFR2_L EXPORT post_initGpio AREApost_initGpio,CODE,READONLYldrr1,=0x40e00000ﻩMOVR0,#0x3000ﻩSTRR0,[R1,#0x18]ﻩMOVR0,#0x800 STRR0,[R1,#0x24]ﻩMOVR0,#0x80000000 STRR0,[R1,#0x54] ldrR0,=0x10 ;0xa5000010 STRR0,[R1,#0x58] ldrR0,=0xc1a08000 STRR0,[R1,#0xc] MOVR0,#0ﻩSTRR0,[R1,#0x1c] MOVR0,#0 STRR0,[R1,#0x28] LDRR0,=0xc9cﻩﻩ;0xa9558 STRR0,[R1,#0x5c] LDRR0,=0xca0 ;0xaaa590aaﻩSTRR0,[R1,#0x60]ﻩLDRR0,=0xca4 ;0xfccf0382ﻩSTRR0,[R1,#0x10] MOVR0,#0x10000 STRR0,[R1,#0x20]ﻩMOVR0,#0ﻩSTRR0,[R1,#0x2c] ldrR0,=0xa0000000ﻩ;0xaaaaaaaa STRR0,[R1,#0x64] ldrR0,=0x400ﻩ ;0x90402ﻩSTRR0,[R1,#0x68]ﻩldrR0,=0x0221ffffﻩSTRR0,[R1,#0x14]; LDRR0,=0xca8;ﻩSTRR0,[R1,#0x68]ﻩMOVR0,#0x20000ﻩSTRR0,[R1,#0x118]ﻩMOVR0,#0ﻩSTRR0,[R1,#0x124]ﻩLDRﻩ R0,=0x020a9550;0xa9510;0x020a9950ﻩSTRR0,[R1,#0x6c]ﻩldrR0,=0x1408 STRR0,[R1,#0x70] LDRﻩ R0,=0x21380;0x20380ﻩSTRR0,[R1,#0x10c];configtwice: ldrR0,=0xa5000010 ;0x0x10 STRR0,[R1,#0x58]ﻩLDRR0,=0xa9558 ;0xc9c STRR0,[R1,#0x5c] LDRR0,=0xaaa590aa ;0xca0 STRR0,[R1,#0x60] LDRR0,=0xfccf0382 ;0xca4 STRR0,[R1,#0x10]ﻩldrR0,=0xaaaaaaaaﻩ;0xa0000000 STRR0,[R1,#0x64] ldrR0,=0x50090402 ﻩ;0x400 STRR0,[R1,#0x68]movpc,r14 ENDpost_initMemory。sIMPORTMDCNFGIMPORTMDREFRIMPORTMSC0IMPORTMSC1IMPORTMSC2IMPORTMECRIMPORTSXCNFGIMPORTSXMRSIMPORTMDMRSIMPORTBOOT_DEFIMPORTinit_MDCNFGIMPORTinit_MDREFRIMPORTinit_MSC0IMPORTinit_MSC1IMPORTinit_MSC2IMPORTinit_MECRIMPORTinit_SXCNFGIMPORTinit_SXMRSIMPORTinit_MDMRSIMPORTinit_BOOT_DEFEXPORTinit_MemoryAREAinit_Memory,CODE,READONLYldrr11,=MDCNFGldrr1,=init_MDCNFGstrr1,[r11]nopnopldrr11,=MDREFRldrr1,=init_MDREFRstrr1,[r11]nopnopldrr11,=MSC0ldrr1,=init_MSC0strr1,[r11]nopnopldrr11,=MSC1ldrr1,=init_MSC1strr1,[r11]nopnopldrr11,=MSC2ldrr1,=init_MSC2strr1,[r11]nopnopldrr11,=MECRldrr1,=init_MECRstrr1,[r11]nopnopldrr11,=SXCNFGldrr1,=init_SXCNFGstrr1,[r11]nopnopldrr11,=SXMRSldrr1,=init_SXMRSstrr1,[r11]nopnopldrr11,=MDMRSldrr1,=init_MDMRSstrr1,[r11]nopnopldrr11,=BOOT_DEFldrr1,=init_BOOT_DEFstrr1,[r11]nopnopmovpc,r14ENDprint_method。c#defineLCD_LCCR0(*(volatileunsignedlong*)(0x44000000))#defineLCD_FDADR0(*(volatileunsignedlong*)(0x44000200))#defineLCD_FSADR0(*(volatileunsignedlong*)(0xa0300004))#defineLCD_LCSR(*(volatileunsignedlong*)(0x44000038))#defineLCD_LIGHT(*(volatileunsignedlong*)(0xa000000))#defineLIGHT1ﻩ(1<<12)#defineLIGHT2ﻩ(1〈<13)#defineBACKLIGHT(1〈<8)externvoidudelay(intmulti);externcharword_1[32][4];externcharword_2[32][4];externcharword_3[32][4];externcharword_4[32][4];externcharword_5[32][4];externcharword_6[32][4];externcharword_7[32][4];externvoidprint_3232(char*,int,int);externvoidlcd_put_pixel(int,int,unsignedchar);externvoidlcd_put_pixel2(int,int,longint);voidlighton1(void){ LCD_LIGHT=(~LIGHT1)|BACKLIGHT; }voidlighton2(void){ﻩLCD_LIGHT=(~LIGHT2)|BACKLIGHT;}voidlightoff1(void){ LCD_LIGHT=LIGHT1|BACKLIGHT; }voidlightoff2(void){ﻩLCD_LIGHT=LIGHT2|BACKLIGHT;}voidtypename(void){print_3232(word_1[0],200,200);print_3232(word_2[0],250,200);print_3232(word_3[0],300,200);print_3232(word_4[0],350,200);print_3232(word_5[0],400,200);print_3232(word_6[0],450,200);}voidscreen_clean(longintcolor){longinti,fill_color;i=0x96000/4;fill_color=color;for(;i>0;i--)(*(volatileunsignedlongint*)(0xa0500000+i*4))=fill_color;}voidlcd_put_pixel(intx,inty,unsignedcharc){longintbase_addr;base_addr=0xa0500000;if(x<1280&&y<480)ﻩ (*((unsignedchar*)(base_addr+y*1280+x)))=c;}voidlcd_put_pixel2(intx,inty,longintc){longintbase_addr;base_addr=0xa0500000;if(x〈1280&&y〈480)ﻩﻩ(*((volatileunsignedlongint*)(base_addr+y*1280+x)))=c;}//由上到下,左到右显示图片voidprint_pic(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y〈height;y++)ﻩ for(x=0;x<width*2;x++)ﻩ lcd_put_pixel(640-width+x,240-height/2+y,*(pic+8+y*width*2+x));}//缩小voidprint_pic10(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y=y+2)ﻩﻩfor(x=0;x<width*2;x=x+4)ﻩ {ﻩ lcd_put_pixel(640-width+x/2,240-height/2+y/2,*(pic+8+y*2*width+x));ﻩ lcd_put_pixel(640-width+x/2+1,240—height/2+y/2,*(pic+8+y*2*width+x+1));}}//百叶窗横向voidprint_pic8(char*pic){intx,y,i;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<10;y++) for(i=0;i〈height/10;i++)ﻩﻩ for(x=0;x〈width*2;x++) ﻩﻩlcd_put_pixel(640-width+x,240-height/2+y+i*10,*(pic+8+(y+i*10)*width*2+x));}//百叶窗纵向voidprint_pic9(char*pic){intx,y,i;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(x=0;x<10;x++)ﻩfor(i=0;i<width*2/10;i++)ﻩﻩ for(y=0;y〈height;y++)ﻩﻩ lcd_put_pixel(640—width+x+i*10,240-height/2+y,*(pic+8+y*width*2+x+i*10));}//由左到右,上到下显示图片voidprint_pic1(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(x=0;x<width*2;x++)ﻩ for(y=0;y<height;y++)ﻩ lcd_put_pixel(640-width+x,240-height/2+y,*(pic+8+y*width*2+x));}//图片旋转90度voidprint_pic7(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++) for(x=0;x〈width*2;x=x+2) {ﻩﻩlcd_put_pixel(640-height+y*2,240-width/2+x/2,*(pic+8+(height—y-1)*width*2+x));ﻩﻩlcd_put_pixel(640-height+y*2+1,240-width/2+x/2+1,*(pic+8+(height-y-1)*width*2+x+1));ﻩ}}//灰度显示voidprint_pic6(char*pic){intx,y;intwidth,height,rw,rh;intr,g,b,rr,gg,bb,temp1,temp2,temp3,result1,result2;longtemp4;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)ﻩﻩfor(x=0;x<width*2;x=x+2) { ﻩ temp1=*(pic+8+y*width*2+x);ﻩﻩﻩtemp2=*(pic+8+y*width*2+x+1);r=(temp2>>3);ﻩ ﻩg=(temp2%8)*8+(temp1>>5); ﻩ b=temp1%32; ﻩ temp3=(30*r+59*g/2+11*b)/100;rr=temp3; ﻩgg=temp3*2;ﻩﻩﻩbb=temp3;ﻩﻩﻩif(rr>0x1f)rr=0x1f; ﻩﻩif(rr<0)rr=0;ﻩ if(gg〉0x3f)gg=0x3f;ﻩﻩ if(gg<0)gg=0; ﻩif(bb〉0x1f)bb=0x1f; ﻩ if(bb〈0)bb=0; ﻩtemp4=rr*2048+gg*32+bb;ﻩﻩﻩresult1=(temp4〉〉8); result2=temp4%256;ﻩ lcd_put_pixel(640-width+x,240-height/2+y,result2); lcd_put_pixel(640-width+x+1,240-height/2+y,result1);ﻩ }}//testvoidprint_pic_test(char*pic){intx,y;intwidth,height,rw,rh;intr,g,b,temp1,temp2,result1,result2;longtemp3;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)ﻩﻩfor(x=0;x〈width*2;x=x+2) ﻩ{ ﻩﻩtemp1=*(pic+8+y*width*2+x); ﻩtemp2=*(pic+8+y*width*2+x+1);r=(temp2〉〉3); ﻩg=(temp2%8)*8+(temp1〉>5); b=temp1%32; ﻩﻩtemp3=r*2048+32*g+b;result1=(temp3>〉8); ﻩresult2=temp3%256; ﻩlcd_put_pixel(640-width+x,240-height/2+y,result2); ﻩ lcd_put_pixel(640—width+x+1,240—height/2+y,result1); ﻩ}}//左右交换,显示图片voidprint_pic5(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y〈height;y++) ﻩfor(x=0;x〈width*2;x=x+2)ﻩﻩ{ﻩﻩlcd_put_pixel(640+width-x—2,240-height/2+y,*(pic+8+y*width*2+x));ﻩ lcd_put_pixel(640+width-x-1,240-height/2+y,*(pic+8+y*width*2+x+1));ﻩ}}//由上到下,左到右显示图片(长宽各*2)voidprint_pic2(char*pic){inti,j,x,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(j=0;j〈height*4;j=j+2) for(i=0;i〈width*4;i=i+4)ﻩ { ﻩﻩy=j/2;ﻩ ﻩx=i/2;ﻩﻩ lcd_put_pixel(640-width*2+i,240—height+y,*(pic+8+y/2*width*2+x)); lcd_put_pixel(640-width*2+i+1,240-height+y,*(pic+8+y/2*width*2+x+1)); ﻩlcd_put_pixel(640—width*2+i+2,240—height+y,*(pic+8+y/2*width*2+x));ﻩ lcd_put_pixel(640-width*2+i+3,240-height+y,*(pic+8+y/2*width*2+x+1)); ﻩlcd_put_pixel(640—width*2+i,240—height+y+1,*(pic+8+y/2*width*2+x)); lcd_put_pixel(640-width*2+i+1,240—height+y+1,*(pic+8+y/2*width*2+x+1)); lcd_put_pixel(640—width*2+i+2,240-height+y+1,*(pic+8+y/2*width*2+x));ﻩﻩlcd_put_pixel(640—width*2+i+3,240—height+y+1,*(pic+8+y/2*width*2+x+1)); ﻩ}}//颜色反转voidprint_pic_exchange(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++) for(x=0;x〈width*2;x++)ﻩ lcd_put_pixel(640—width+x,240—height/2+y,0xff—*(pic+8+y*2*width+x));}//石雕voidprint_pic_exchange2(char*pic){intx,y;intwidth,height,rw,rh;intr1,g1,b1,rr,gg,bb,temp1,temp2,result1,result2;intr2,g2,b2,temp5,temp6;longtemp4;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)ﻩﻩfor(x=0;x〈width*2;x=x+2) ﻩ{ ﻩ temp1=*(pic+8+y*width*2+x);ﻩﻩ temp2=*(pic+8+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论