基于STM32的数码相框设计与实现本科论文.doc

上传人:来看看 文档编号:3921950 上传时间:2019-10-10 格式:DOC 页数:69 大小:2.68MB
返回 下载 相关 举报
基于STM32的数码相框设计与实现本科论文.doc_第1页
第1页 / 共69页
基于STM32的数码相框设计与实现本科论文.doc_第2页
第2页 / 共69页
基于STM32的数码相框设计与实现本科论文.doc_第3页
第3页 / 共69页
基于STM32的数码相框设计与实现本科论文.doc_第4页
第4页 / 共69页
基于STM32的数码相框设计与实现本科论文.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《基于STM32的数码相框设计与实现本科论文.doc》由会员分享,可在线阅读,更多相关《基于STM32的数码相框设计与实现本科论文.doc(69页珍藏版)》请在三一文库上搜索。

1、北京邮电大学毕业设计 1 基于基于STM32STM32的数码相框设计与实现的数码相框设计与实现 摘 要 嵌入式系统是当前最有发展前途的 IT 应用领域之一,近年来数字摄影业的兴 起带动了嵌入式产品数码相框的发展。本设计是一款基于 ARM Cortex-M3 内 核的 STM32 嵌入式硬件平台设计的数码相框,主要优势是应用了 Stm32 杰出的功 耗控制和极低的开发成本、超多的外设等特点。 设计主要本设计是一款基于包括主控制器核心板、LCD 液晶显示、SD 卡存储 器等多个功能模块。 开发过程大致为:在 PC 机 win7 系统中使用 RVMDK3.80 版本的编译器撰写工 程代码,之后通过

2、mcuisp 串口下载软件将编译器编译生成.hex 下载到开发板内,最 终实现通过 FAT 文件系统读取 SD 卡内存储的 BMP、JPEG、JPG 格式图片,把多 幅图片以幻灯片的形式从 TFT 屏上显示出来。实现了对 SD 卡里多幅图片以幻灯片 形式在 TFT 屏上动态显示的效果。 关键词:数码相框; STM 32; LCD 液晶显示; SD 卡 北京邮电大学毕业设计 2 The design of digital photo frames based on the STM32 Abstract Embedded systems is one of the most promising a

3、pplications of IT in recent years, driven by the rise of digital photography embedded products - digital photo frame development. The design is based on a STM32 ARM Cortex-M3 core embedded hardware platform design digital photo frame, both of todays digital photo frame industry, market demand and St

4、m32 excellent power control and low development costs. Core design includes the main controller board, LCD liquid crystal display, a number of functional modules SD card memory. Development process is roughly: Use RVMDK3.80 version of the compiler writing project code in the PC win7 system, after pa

5、ssing through mcuisp serial download software compiler to generate hex downloaded to the development board, and ultimately the system by reading the FAT file system. within the SD card storage BMP, JPEG, JPG format images, the pieces of the picture in the form of a slide from the TFT screen is displ

6、ayed. Keywords: Digital Photo Frame; STM32;LCD liquid crystal display ;SD card memory. 北京邮电大学毕业设计 目目 录录 摘要.1 ABSTRACT2 目 录.1 第一章 绪论.1 1.1 数码相框的技术背景.1 1.2 数码相框的市场背景.1 1.3 本课题主要研究内容与特点.1 1.3.1 本课题的主要研究内容.1 1.3.2 本设计的主要特点.1 第二章 硬件介绍.3 2.1 MCU 主控模块 .3 2.2 LCD 模块.4 2.3 SD 存储卡模块 .7 第三章 软件介绍.10 3.1 安装 MDK3

7、.8A10 3.2 注册 LICENSE.10 3.3 新建工程.12 3.4 MCUISP与SSCOM软件 18 第四章 程序设计.20 4.1 整体描述.20 4.2 各模块描述.20 4.2.1 SD 卡图片文件读取20 4.2.2 图像解码与显示21 4.3 主程序设计.28 4.3 程序调试.31 第五章 结束语.33 参考文献(REFERENCES)34 致 谢.35 外文文献.36 外文译文.45 北京邮电大学毕业设计 1 第一章第一章 绪论绪论 引引 言言 1.11.11 1 数码相框的技术背景数码相框的技术背景 嵌入式是以应用为中心,以计算机技术为基础,软件硬件可裁剪适合于应

8、用系 统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统无疑是当前最热门最有发展前途的作为如今最有发展前途的 IT 应 用领域之一。嵌入式系统一般用在一些专用设备上,通常这些设备的硬件资源(如处 理器、存储器等)非常有限,并且对成本很敏感、对成本很敏感,有时对实时响应要 求很高。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手 机、PDA、电子字典、可视电话、VCDDVD、MP3 播放器、数码相机、数字 摄像机、U-Disk、机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控 设备、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式

9、产品。 随着数字摄影的兴起不可避免地引起了数码相框产业得以的发展,因为仅有不 到 35%的数码照片被打印出来。数码相框的基本原理就是采用普通相框的造型是, 将把原来相框中间放的照片的部分换成了液晶显示屏,外加配上电源,存储介质等, 使得同一个相框内可以循环播放照片比普通相框的优势是在同一个相框内可以循环 播放照片,比普通照片的单一显示功能更有优势。此外,本设计属于数字影音娱乐 产品,需要较为强劲的处理器进行图像解码的工作,而 STM32 具有超低的价格、 超多的外设、丰富的型号、优异的实时性能、杰出的功耗控制和极低的开发成本等 特点。因此,进行基于 STM32 平台的数码相框系统的设计具有重要

10、的理论意义和 实用价值。 1.21.2 数码相框的市场背景数码相框的市场背景 市场方面,自从 2007 年开始,数码相框的市场关注度开始激增。在 2008 年开始,数码相框市场就呈现出了高速发展的态势,并一直持续至今,因此本课题 的研究具有极高的商业潜在市场价值与意义。 1.2.11.2.1 数码相框的发展现状数码相框的发展现状 数码相框产品的首次出现是在是 2001 年开始出现的,但直至 2003 年市场都一 直低迷,由于当时消费者的接受度及价格过高的因素其原因在于产品的价格过高, 使这一市场一直到 2003 年都很低迷。之后在随着主要器件价格的下降等因素的促 使下,数码相框的价格也逐步下降

11、其价格也得以下降,于是市场自在 2004 年开始 有了起色,尤其在 2005 年,数码相框产品开始在欧美热销,但出货量也只有 150 万台左右, 到了 2006 年的出货量同比上涨 133,为 280 万台,2007 年的出货量 同比上涨 185,为 800 万台, 预计到 2011 年出货量将达到 4000 万台。从屏幕尺 寸来看,2006 年 5-6.9 英寸产品占主流,2007 年 7、8、9 英寸产品成为最大市场。 预计 2011 年,7、8、9 英寸产品的供货比例将持续保持首位,而平均销售单价将以 每年 16.5左右的速度降低。 2006 年以前,中国生产的数码相框绝大多数出口国外。

12、2005 年底 Philips 率先 将数码相框在中国推广,在礼品市场上取得了一些成绩,但由于销售价格较高,约 为 2050 元/台,这一年中国数码相框的销售量仅有 1.7 万台。2006 年下半年,开始 北京邮电大学毕业设计 2 有更多的国内厂商在中国市场推出数码相框,因而也带动了此产品价格的下降,这 一年的平均售价为 1150 元/台,仍然较高,市场也以商务礼品为主,但由于 2005 年 销售量的基数较低,2006 年的销售量同比增长了 470.6,达到 9.7 万台。直到 2007 年下半年,业界才感到这个一直处于培育期的市场,开始了真正的起飞。这得 益于对数码相框产品认知度的提高、价格

13、的下滑和需求量的提高。 从 IT 厂商来看,仅 2007 年下半年以来,就有惠普、三星、优派、AOC、明基、 柯达、长城等众多新军加入数码相框阵营。其中,巨头惠普 2007 年 7 月底在美国 宣布进入数码相框市场,2007 年数码相框出货量设定为 50 万台。除新军外,数码 相框老牌劲旅的出货量表现也令业界振奋,如飞利浦 2006 年数码相框出货量达到 50 万台,而 2007 年上半年出货量已达去年总和,2007 年全年出货量达 150 万台。 而从上游面板厂商的动作来看,也显示出乐观的发展态势。中华映管、群创等厂商 均显著调高了配套数码相框产品的中尺寸面板的出货量目标,2007 年出货量

14、达 1000 万台,预计 2008 年更将倍增至 2000 万台。其中,中华映管目前已调配一座 4.5 代面板厂来支持生产中尺寸面板,主要生产可携式 DVD 播放机面板与数码相框 面板,其数码相框面板以 7 英寸、8 英寸、10.2 英寸为主要尺寸,数码相框面板占 其中尺寸面板的比重提高到 40。 1.2.21.2.2 数码相框的发展趋势数码相框的发展趋势 从长远来看,2008 年及今后几年将为处在数码相框产品供应链的各企业带来巨 大的商机。未来几年,数码相框的市场将处在逐渐步入走向成熟期的阶段,其产销 量和市场需求依然将仍会保持大幅度的增长,在未来的三年内,市场尚无萎缩的可 能。 北京邮电大

15、学毕业设计 3 从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强 调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品 走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特 效,已成为效,已成为 DC/DV 的附属物;另一部分产品将会添加一些新的功能,的附属物;另一部分产品将会添加一些新的功能, 如如 WiFi,还可即时报告天气、股票等信息,从而有望成为,还可即时报告天气、股票

16、等信息,从而有望成为“桌面信息桌面信息 中心中心”。此外,触摸面板会成为一个应用的新亮点。此外,触摸面板会成为一个应用的新亮点。 从产品形态上来说,数码相框的市场将会有非常明确的细分。从产品形态上来说,数码相框的市场将会有非常明确的细分。 1 数码相框:数码相框: 这将是以数字照片的重显为主要功能的产品,其功能更接近于传统意义这将是以数字照片的重显为主要功能的产品,其功能更接近于传统意义 上的相框。上的相框。 由于人机界面的限制,为了更方便的重显和浏览以及确定重显的规则,由于人机界面的限制,为了更方便的重显和浏览以及确定重显的规则, 这类产品并不强调有大容量的内存以及丰富的存储卡接口,这类产品

17、的这类产品并不强调有大容量的内存以及丰富的存储卡接口,这类产品的 主要特征是:主要特征是: 1) 支持支持 USB Device int main(void) SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP

18、; GPIO_Init(GPIOD, while (1) /* Set PD0 and PD2 */ GPIOD-BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD-BRR = 0x00000005; #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line) 北京邮电大学毕业设计 27 while (1) #endif 这次编译可以看出,已经成功了。这样一个工程模版建立完毕。下面还需要配 置,让编译之后能够生成 hex 文件。同样点击魔术棒,进入配置菜单,选择 O

19、utput。然后勾上下三个选项。其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义,这里我们不做过多解释,在我们的不完全 手册里面有讲解。 重新编译代码,可以看到生成了 hex 文件,这个文件我们用 mcuisp 下载到 mcu 即可。 选中之后点击 OK,重新编译,编译结果如下图所示: 图 3-15 重新编译结果 从上图中可以看到,编译器已经产生了 hex 文件了,然后我们打开 USER 文件 夹,看看里面发生了什么变化?重新编译产生了很多文件,其中就有我们所需要的 北京邮电大学毕业设计 28 hex 文件(图中红

20、圈圈中),至此,我们就可以开始下载了。 3.43.4 mcuispmcuisp 与与 sscomsscom 软件软件 用 mcuisp 软件打开 USER 文件夹,找到 TEST.hex,打开并进行相应设置后。 编程前重装文件,该选项也比较有用,当选中该选项之后,mcuisp 会在每次编 程之前,将 hex 文件重新装载一遍,这对于代码调试的时候是比较有用的。 最后,我们选择的 DTR 的低电平复位,RTS 高电平进 BootLoader,这个选择 项选中,mcuisp 就会通过 DTR 和 RTS 信号来控制板载的一键下载功能电路,以实现 一键下载功能。如果不选择,则无法实现一键下载功能。这

21、个是必要的选项(在 BOOT0 接 GND 的条件下)。 在装载了 hex 文件之后,我们要下载代码还需要选择串口,这里 mcuisp 有智 能串口搜索功能。每次打开 mcuisp 软件,软件会自动去搜索当前电脑上可用的串 口,然后选中一个作为默认的串口(一般是您最后一次关闭时所选则的串口)。也 可以通过点击菜单栏的搜索串口,来实现自动搜索当前可用串口。串口波特率则可 以通过 bps 那里设置,对于 STM32,该波特率最大为 230400bps,这里我们一般选 择最高的波特率:460800,让 mcuisp 自动去同步。 从之前 USB 串口的安装可知,开发板的串口被识别为 COM5 了,所

22、以我选择 COM5。选择了相应串口之后就可以通过按”开始编程(P)”这个按钮,一键下载 代码到 STM32 上,下载成功后如下图所示: 图 3-16 下载完成 下载完成下载完成 上图中,我用圈圈圈出了 mcuisp 对一键下载电路的控制过程,其实就是控制 DTR 和 RTS 电平的变化,控制 BOOT0 和 RESET,从而实现自动下载。另外界面提示 已经下载完成(如果老提示:开始连接,需要检查一下,开发板的设置是否正确, 是否有其他因素干扰等),并且从 0X80000000 处开始运行了,我打开串口调试助 手选择 COM5,会发现从硬件板发回来的信息,如下图所示: 北京邮电大学毕业设计 29

23、 图 3-17 串口调试助手 sscom 图图 3-403-40 程序开始运行了程序开始运行了 接收到的数据和我仿真的是一样的,证明程序没有问题。至此,说明下载代码成功了,并 且也从硬件上验证了代码的正确性。 第四章第四章 程序设计程序设计与调试与调试 4.14.1 整体整体系统系统描述描述 本设计实现了对 SD 卡里多幅图片以幻灯片形式在 TFT 屏上动态显示的效果。 主要的三大部分为:SD 卡图片文件读取、图像解码与显示、系统主程序。本系统 采用基于 ARM Cortex-M3 内核的 STM32 作为主控制器,外扩 SD 卡以及 TFT 彩屏。 系统通过文件系统读取 SD 卡内存储的 B

24、MP、JPEG、JPG 格式图片,把多幅图片以 幻灯片的形式从 TFT 屏上显示出来。同时,通过 STM32 内部的 RTC 模块使系统具 有掉电不遗失日期及时钟的功能。系统框图如图 4-1 所示。 北京邮电大学毕业设计 30 图图 4-14-1 系统框图系统框图 4.2 各模块描述各模块描述 4.2.14.2.1 SDSD 卡图片文件读取卡图片文件读取 软件设计 4.2.1 文件读取 本次试验读取 SD 卡上的字库以及 UNICODE 到 GBK 的转换码表到 W25X16 部分需要用到 FAT 文件系统。 常用的文件系统有 FAT12/16/32 等,FAT12,现在基本淘汰了。FAT16

25、 则可以管 理 2G 的空间(通过特殊处理也能管理 2G 以上的空间),而 FAT32 则能管理到 2TB(2048GB)的空间。FAT32 较 FAT16 的优势还在于 FAT32 采用了更小的簇,可以 更有效的保存信息,而不会造成较多的浪费。 Win7 在格式化 SD 卡的时候建立的,通常 SD 卡上的数据信息由 MBR、DBR、FAT、FDT 和数据区 5 个部分组成(有的也没有 MBR)。我们以 FAT32 为例做介绍。 MBR 称为主引导记录区,该区存储了分区表等信息,位于 SD 卡的扇区 0(物 理扇区),在其分区信息里面记录了 DBR 所在的位置,SD 卡一般只会有一个分区, 所

26、以也就只要找到分区 1 的 DBR 所在位置就可以了。 DBR 称为操作系统引导记录区,如果没有 MBR,那么 DBR 就位于 0 扇区,如 果有则必须通过 MBR 区得到 DBR 所在的地址,然后读出 DBR 信息。在 DBR 区, 我们可以知道每个扇区所占用的字节数包含了每个扇区所占用的字节数、每个簇的 扇区数、FAT 表的份数、每个 FAT 表的扇区数、跟目录簇号、FAT 表 1 所在的扇 区等一系列非常重要的信息。 FAT 称为文件分配表(FAT 表),一般一个卡上会存在 2 个 FAT 表,一个用 作备份,一个用作使用。FAT 表一般紧随 DBR,另一个 FAT 表则紧随第一个 FA

27、T 表, 这样只要知道了第一个 FAT 表的位置及大小,那么第二个 FAT 表的位置也就确定 了。FAT 表记录了每个文件的位置和区域,是一种链式结构,FAT 以“F8 FF FF 0F FF FF FF FF”这样的 8 个字节为表头,用以表示 FAT 表的开始,后面的数据 每四个字节为一个簇项(从第 2 簇开始),用来标记下一个簇所在的位置,这样每个 位置都存储了下一个簇,只要按着这个表走,就可以找到文件的所有内容。如果找 到下一个簇位置,里面记录的是最后一个簇的标记是“FF FF FF 0F”,代表这个文 件到此就结束了,没有后续簇了,这样一个文件的读取就结束了。 FDT 称为文件根目录

28、表,这个区域固定为 32 个扇区,假设每个扇区为 512 个 字节,那么更目录下最多存放 512 个文件(假设都用短文件名存储,每个短文件名 占 32 个字节)。 文件目录表是另一个重要的部分,FAT 文件系统中(仅以短文件名介绍),文 件目录项在目录表下以 32 个字节的方式记录,各字段定义如下: 北京邮电大学毕业设计 31 表 4.1 文件目录项各字节定义 从上表可知,我们在文件的目录项就可以找到该文件的其实簇,然后在 FAT 表里面找到该簇开始的下一个簇,依次读取这些簇就可以把整个文件读出来了。 4.4.2.22.22.22.2 图像解码与显示图像解码与显示 BMP 是一种与硬件设备无关

29、的图像文件格式,使用非常广。它采用位映射存储 格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP 文件所占用的空 间很大。BMP 文件的图像深度可选 lbit、4bit、8bit 及 24bit。 BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 典型的 BMP 图像文件由三部分组成:位图文件头数据结构,它包含 BMP 图像 文件的类型、显示内容等信息;位图信息数据结构,它包含有 BMP 图像的宽、高、 压缩方法,以及定义颜色等信息。 JPEG 是 Joint Photographic Experts Grou 的缩写,是最常用的图像文件格式。 其特点是用有损压缩

30、方式去除冗余的图像数据,在获得极高的压缩率的同时能展现 十分丰富生动的图像。JPEG 具有调节图像质量的功能,允许用不同的压缩比例对 文件进行压缩,支持多种压缩级别,压缩比率通常在 10:1 到 40:1 之间,压缩与 图像品质成反比。 JPEG 格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联 网,可减少图像的传输时间,可以支持 24bit 真彩色,也普遍应用于需要连续色调 的图像。 JPEG/JPG 的解码过程可以简单的概述为如下几个部分: 1) 从文件头读出文件的相关信息。 JPEG 文件数据分为文件头和图像数据两大部分,其中文件头记录了图像的版 本、长宽、采样因子、量化表

31、、哈夫曼表等重要信息。 北京邮电大学毕业设计 32 2) 从图像数据流读取一个最小编码单元(MCU),并提取出里边的各个颜色分量 单元。 3) 将颜色分量单元从数据流恢复成矩阵数据。 利用文件头给出的哈夫曼表,对分割出来的颜色分量单元进行解码,把其恢复 成 88 的数据矩阵。 4) 88 的数据矩阵进一步解码。 此部分解码工作以 88 的数据矩阵为单位, 其中包括相邻矩阵的直流系数差 分解码、利用文件头给出的量化表反量化数据、反 Zig-zag 编码、隔行正负纠正、 反向离散余弦变换等 5 个步骤,最终输出仍然是一个 88 的数据矩阵。 5) 颜色系统 YCrCb 向 RGB 转换。 将一个

32、MCU 的各个颜色分量单元解码结果整合起来,将图像颜色系统从 YCrCb 向 RGB 转换。 6) 排列整合各个 MCU 的解码数据。 不断读取数据流中的 MCU 并对其解码,将解码后的数据正确排列成完整的图 像直至读完所有 MCU 为止。 主要代码: #include “jpegbmp.h“ / /全局变量声明,BMP 和 JPEG 共用 FileInfoStruct *CurFile;/当前解码/操作的文件 /图像信息 typedef struct u32 ImgWidth; /图像的实际宽度和高度 u32 ImgHeight; u32 Div_Fac; /缩放系数 (扩大了 10000

33、倍的) u32 S_Height; /设定的高度和宽度 u32 S_Width; u32 S_XOFF; /x 轴和 y 轴的偏移量 u32 S_YOFF; u32 staticx; /当前显示到的坐标 u32 staticy; PIC_POS; PIC_POS PICINFO;/图像位置信息 / void AI_Drow_Init(void); /智能画图,初始化.得到比例因子 PICINFO.Div_Fac / 北京邮电大学毕业设计 33 /在 JPEG 函数里面用到的变量 shortSampRate_Y_H,SampRate_Y_V; shortSampRate_U_H,SampRate

34、_U_V; shortSampRate_V_H,SampRate_V_V; shortH_YtoU,V_YtoU,H_YtoV,V_YtoV; shortY_in_MCU,U_in_MCU,V_in_MCU; unsigned char *lp;/取代 lpJpegBuf shortqt_table364; shortcomp_num; u8comp_index3; u8 YDcIndex,YAcIndex,UVDcIndex,UVAcIndex; u8HufTabIndex; short *YQtTable,*UQtTable,*VQtTable; short code_pos_table4

35、16,code_len_table416; unsigned shortcode_value_table4256; unsigned shorthuf_max_value416,huf_min_value416; shortBitPos,CurByte;/byte 的第几位,当前 byte shortrrun,vvalue; shortMCUBuffer10*64; shortQtZzMCUBuffer10*64; shortBlockBuffer64; shortycoef,ucoef,vcoef; BOOLIntervalFlag; shortinterval=0; shortY4*64,

36、U4*64,V4*64;/ DWORD sizei,sizej; short restart; long iclip1024;/4k BYTES long *iclp; /反 Z 字形编码表 const int Zig_Zag88=0,1,5,6,14,15,27,28, 2,4,7,13,16,26,29,42, 3,8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,6

37、2,63 ; const BYTE And9=0,1,3,7,0xf,0x1f,0x3f,0x7f,0xff; /数据缓冲区 u8 jpg_buffer1024;/数据缓存区 / /初始化智能画点 void AI_Drow_Init(void) float temp,temp1; temp=(float)PICINFO.S_Width/PICINFO.ImgWidth; 北京邮电大学毕业设计 34 temp1=(float)PICINFO.S_Height/PICINFO.ImgHeight; if(temp1)temp1=1; /使图片处于所给区域的中间 PICINFO.S_XOFF+=(P

38、ICINFO.S_Width-temp1*PICINFO.ImgWidth)/2; PICINFO.S_YOFF+=(PICINFO.S_Height-temp1*PICINFO.ImgHeight)/2; temp1*=10000;/扩大 10000 倍 PICINFO.Div_Fac=temp1; PICINFO.staticx=500; PICINFO.staticy=500;/放到一个不可能的值上面 /判断这个像素是否可以显示 /(x,y) :像素原始坐标 /chg :功能变量. /返回值:0,不需要显示.1,需要显示 _inline u8 IsElementOk(u16 x,u16

39、y,u8 chg) if(x!=PICINFO.staticx|y!=PICINFO.staticy) if(chg=1) PICINFO.staticx=x; PICINFO.staticy=y; return 1; else return 0; /智能画图 /FileName:要显示的图片文件 BMP/JPG/JPEG /(sx,sy) :开始显示的坐标点 /(ex,ey) :结束显示的坐标点 /图片在开始和结束的坐标点范围内显示 BOOL AI_LoadPicFile(FileInfoStruct *FileName,u16 sx,u16 sy,u16 ex,u16 ey) int fu

40、ncret;/返回值 /得到显示方框大小 if(eysy)PICINFO.S_Height=ey-sy; else PICINFO.S_Height=sy-ey; if(exsx)PICINFO.S_Width=ex-sx; else PICINFO.S_Width=sx-ex; /显示区域无效 if(PICINFO.S_Height=0|PICINFO.S_Width=0) 北京邮电大学毕业设计 35 PICINFO.S_Height=LCD_H; PICINFO.S_Width=LCD_W; return FALSE; /影响速度 /SD_Init();/初始化 SD 卡,在意外拔出之后可

41、以正常使用 /显示的开始坐标点 PICINFO.S_YOFF=sy; PICINFO.S_XOFF=sx; /文件名传递 CurFile=FileName; if(CurFile-F_Type=T_BMP)/得到一个 BMP 图像 funcret=BmpDecode(CurFile); /得到一个 BMP 图像 return funcret; else if(CurFile-F_Type=T_JPG|CurFile-F_Type=T_JPEG)/得到 JPG/JPEG 图片 /得到 JPEG/JPG 图片的开始信息 F_Open(CurFile); /开始时读入 1024 个字节到缓存里面.方

42、便后面提取 JPEG 解码的信息 F_Read(CurFile,jpg_buffer); /读第一次 F_Read(CurFile,jpg_buffer+512);/读第二次 InitTable(); /初始化各个数据表 if(funcret=InitTag()!=FUNC_OK)return FALSE;/初始化表头不成功 if(SampRate_Y_H=0)|(SampRate_Y_V=0)return FALSE ;/采样率错 误 AI_Drow_Init(); /初始化 PICINFO.Div_Fac,启动智能画图 funcret=Decode();/解码 JPEG 开始 else r

43、eturn FALSE; /非图片格式! if(funcret=FUNC_OK)return TRUE;/解码成功 else return FALSE; /解码失败 /解码这个 BMP 文件 BOOL BmpDecode(FileInfoStruct *BmpFileName) u16 count; u8 rgb ,color_byte; u16 x ,y,color,tmp_color ; u16 uiTemp; /x 轴方向像素计数器 u16 countpix=0;/记录像素 /x,y 的实际坐标 u8 realx=0; 北京邮电大学毕业设计 36 u16 realy=0; u8 yok=

44、1; BITMAPINFO *pbmp;/临时指针 CurFile=BmpFileName; F_Open(CurFile);/打开文件 F_Read(CurFile,jpg_buffer);/读出 512 个字节 pbmp=(BITMAPINFO*)jpg_buffer;/得到 BMP 的头部信息 count=pbmp-bmfHeader.bfOffBits; /数据偏移,得到数据段的开始地 址 color_byte=pbmp-bmiHeader.biBitCount/8;/彩色位 16/24/32 PICINFO.ImgHeight=pbmp-bmiHeader.biHeight;/得到图

45、片高度 PICINFO.ImgWidth=pbmp-bmiHeader.biWidth; /得到图片宽度 /水平像素必须是 4 的倍数! if(PICINFO.ImgWidth*color_byte)%4) uiTemp=(PICINFO.ImgWidth*color_byte)/4+1)*4; else uiTemp=PICINFO.ImgWidth*color_byte; AI_Drow_Init();/初始化智能画图 /开始解码 BMP x =0 ; y=PICINFO.ImgHeight; rgb=0; realy=y*PICINFO.Div_Fac/10000; while(1) w

46、hile(count3 ; color |= tmp_color; break ; case 1: tmp_color = jpg_buffercount2 ; tmp_color 3 ; tmp_color 5; tmp_color3; break ; case 1 : tmp_color=jpg_buffercount; tmp_color=2; color|=tmp_color=3; color|=tmp_color=uiTemp)/水平方向像素值到了.换行 y-; if(ybmfHeader.bfOffBits; /数据偏移,得到数据段的开始地 址 color_byte=pbmp-bm

47、iHeader.biBitCount/8;/彩色位 16/24/32 PICINFO.ImgHeight=pbmp-bmiHeader.biHeight;/得到图片高度 PICINFO.ImgWidth=pbmp-bmiHeader.biWidth; /得到图片宽度 /水平像素必须是 4 的倍数! if(PICINFO.ImgWidth*color_byte)%4) uiTemp=(PICINFO.ImgWidth*color_byte)/4+1)*4; else uiTemp=PICINFO.ImgWidth*color_byte; AI_Drow_Init();/初始化智能画图 /开始解码

48、 BMP x =0 ; y=PICINFO.ImgHeight; rgb=0; realy=y*PICINFO.Div_Fac/10000; while(1) while(count3 ; color |= tmp_color; break ; case 1: tmp_color = jpg_buffercount2 ; tmp_color 3 ; 北京邮电大学毕业设计 41 tmp_color 5; tmp_color3; break ; case 1 : tmp_color=jpg_buffercount; tmp_color=2; color|=tmp_color=3; color|=tmp_color=uiTemp)/水平方向像素值到了.换行 y-; if(y=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1