datasheet

LPC54608生成PDF文件

2018-10-23来源: eefocus 关键字:LPC54608  PDF文件

主机环境:Win10 64bit


开发环境:MDK5.23


目标板:LPC54608


之前在NXP论坛里得到了一块LPC54608开发板,最吸引人的地方是带了一块屏,如下图:

这也是第一次接触NXP的开发板,之前一直都是用的ST的MCU,NXP的库跟ST的还是差别蛮大的,自我感觉ST的开发入手要快一些,而NXP的相对慢一些,入手开发板之后就看了库里面自带的一些基本驱动例程,只熟悉了一下基本外设的开发,之前有次在群里看到有人询问单片机生成PDF的问题,突然觉得有些兴趣所以就有了前面的libHaru学习笔记,libHaru库是一个十分不错的库,对于PDF的实现来说也是相当齐全的,在PC上使用是完全没有问题的,但在资源紧张的MCU上,还是有些困难的,因此就想找一下适用于MCU的生成PDF的库,结果不太理想,都是一些需要实现动态内存管理的平台才行,而且这些库都是把生成的数据放在了内存中,直到保存文件时才写入到文件中,这对于一般只有几十或者几百KB级别的单片机来说更不可能了,于是乎,萌发了自己动手写一个基本的能用于MCU的生成PDF文件的库,我称之为libpdf,其中的接口参考了libHaru,如下所示:

当然有些接口还没有实现,但基本的操作还是可以的,等以后再逐渐完善吧,pdflib是生成pdf文件的,因此要基于Fatfs来实现文件的操作,pdflib库只有两个文件,也相应的参考了pdfgen库,该库在后面有链接,


头文件如下:



#ifndef __PDFLIB_H__

#define __PDFLIB_H__

 

#include "ff.h"

/*----- standard C library functions -----------------------------------------*/

 

#define LPDF_FOPEN                  f_open

#define LPDF_FCLOSE                 f_close

#define LPDF_FREAD                  f_read

#define LPDF_FWRITE                 f_write

#define LPDF_FFLUSH                 f_sync

#define LPDF_FSEEK                  f_seek

#define LPDF_FTELL                  f_tell

#define LPDF_FEOF                   f_eof

#define LPDF_FERROR                 f_error

#define LPDF_RENAME                 f_rename

#define LPDF_REMOVE                 f_unlink

#define LPDF_MALLOC                 malloc

#define LPDF_FREE                   free

#define LPDF_FILE                   FIL

#define LPDF_TIME                   time

#define LPDF_PRINTF                 printf

#define LPDF_SPRINTF                sprintf

#define LPDF_FPRINTF                f_printf

#define LPDF_VOID                   void

#define LPDF_SIN                    sin

#define LPDF_COS                    cos

 

/*  native OS integer types */

typedef  signed int          LPDF_INT;

typedef  unsigned int        LPDF_UINT;

 

 

/*  32bit integer types

 */

typedef  signed int          LPDF_INT32;

typedef  unsigned int        LPDF_UINT32;

 

 

/*  16bit integer types

 */

typedef  signed short        LPDF_INT16;

typedef  unsigned short      LPDF_UINT16;

 

 

/*  8bit integer types

 */

typedef  signed char         LPDF_INT8;

typedef  unsigned char       LPDF_UINT8;

 

 

/*  8bit binary types

 */

typedef  unsigned char       LPDF_BYTE;

 

 

/*  float type (32bit IEEE754)

 */

typedef  float               LPDF_REAL;

 

 

/*  double type (64bit IEEE754)

 */

typedef  double              LPDF_DOUBLE;

 

 

/*  boolean type (0: False, !0: True)

 */

typedef  signed int          LPDF_BOOL;

 

 

/*  error-no type (32bit unsigned integer)

 */

typedef  unsigned long       LPDF_STATUS;

 

#define LPDF_OK                     0

#define LPDF_FAILED                 1

 

/*----- font state -----------------------------------------------------------*/

#define   LPDF_FONT_INVALID                 0x00FF

#define   LPDF_FONT_COURIER                 0x0000

#define   LPDF_FONT_COURIER_B               0x0001

#define   LPDF_FONT_COURIER_O               0x0002

#define   LPDF_FONT_COURIER_OB              0x0003

#define   LPDF_FONT_HELVETICA               0x0004

#define   LPDF_FONT_HELVETICA_B             0x0005

#define   LPDF_FONT_HELVETICA_O             0x0006

#define   LPDF_FONT_HELVETICA_BO            0x0007

#define   LPDF_FONT_TIMES_R                 0x0008

#define   LPDF_FONT_TIMES_B                 0x0009

#define   LPDF_FONT_TIMES_I                 0x000A

#define   LPDF_FONT_TIMES_BI                0x000B

#define   LPDF_FONT_SYMBOL                  0x000C

#define   LPDF_FONT_ZAP                     0x000D

/*----- Graphis mode ---------------------------------------------------------*/

#define   LPDF_GMODE_PAGE_DESCRIPTION       0x0001

#define   LPDF_GMODE_PATH_OBJECT            0x0002

#define   LPDF_GMODE_TEXT_OBJECT            0x0004

#define   LPDF_GMODE_CLIPPING_PATH          0x0008

#define   LPDF_GMODE_SHADING                0x0010

#define   LPDF_GMODE_INLINE_IMAGE           0x0020

#define   LPDF_GMODE_EXTERNAL_OBJECT        0x0040

#define   LPDF_GMODE_INVALID                0x0080

#define   LPDF_GMODE_OVER                   0x0100

 

#define OBJ_MAX_NUM     256

 

/* Page的结构信息是否需要树形结构 */

typedef enum 

{

    OBJ_info,

    OBJ_stream,

    OBJ_font,

    OBJ_page,

    OBJ_catalog,

    OBJ_pages,

    OBJ_image,

}LPDF_ObjType;

 

typedef struct

{

    LPDF_ObjType objType;

    LPDF_UINT16 objIdx;

    LPDF_UINT16 height;

    LPDF_UINT16 width;

    LPDF_UINT16 length;

    LPDF_UINT gMode;

    LPDF_BYTE fontType;

    LPDF_BYTE fontSize;

    LPDF_BYTE pState;

    LPDF_VOID *doc;

}LPDF_Obj;

 

typedef struct

{

    LPDF_Obj obj[OBJ_MAX_NUM];

    LPDF_UINT32 offset;

    LPDF_UINT16 objNumber;

    LPDF_FILE file;

}LPDF_Doc_Rec;

 

typedef LPDF_Doc_Rec *LPDF_Doc;

typedef LPDF_Obj *LPDF_Page;

typedef LPDF_Obj *LPDF_Image;

extern const char *font_list[];

/*----- LPDF Interfaces-------------------------------------------------------*/

const char * LPDF_GetVersion(void);

LPDF_Doc LPDF_New(void);

LPDF_Page LPDF_AddPage(LPDF_Doc pdf);

LPDF_STATUS LPDF_SaveToFile(LPDF_Doc pdf,const char *file_name);

LPDF_STATUS LPDF_Free(LPDF_Doc pdf);

LPDF_STATUS LPDF_Page_CheckState(LPDF_Page page, LPDF_UINT mode);

LPDF_STATUS LPDF_Page_SetFontAndSize(LPDF_Page page,

                           const char *font_name, LPDF_UINT8 size);

LPDF_STATUS LPDF_Page_SaveParams(LPDF_Page page);

LPDF_STATUS LPDF_Page_SaveContext(LPDF_Page page);

LPDF_STATUS LPDF_Page_BeginText(LPDF_Page page);

LPDF_STATUS LPDF_Page_EndText(LPDF_Page page);

LPDF_UINT16 LPDF_Page_GetHeight(LPDF_Page page);

LPDF_UINT16 LPDF_Page_GetWidth(LPDF_Page page);

LPDF_STATUS LPDF_Page_SetHeight(LPDF_Page page, LPDF_UINT16 value);

LPDF_STATUS LPDF_Page_SetWidth(LPDF_Page page, LPDF_UINT16 value);

LPDF_STATUS LPDF_Page_ShowText(LPDF_Page page, const char *text);

LPDF_STATUS LPDF_Page_MoveTextPos(LPDF_Page page,

                         LPDF_INT x, LPDF_INT y);

LPDF_STATUS LPDF_Page_TextOut(LPDF_Page page, 

                         LPDF_UINT16 x, LPDF_UINT16 y,

                         const char *text);

LPDF_STATUS LPDF_Page_SetRGBStroke(LPDF_Page page,

                         LPDF_REAL r,

                         LPDF_REAL g,

[1] [2] [3] [4]

关键字:LPC54608  PDF文件

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news102341971.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32学习笔记之USB工程目录文件分析
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

大联大世平集团推出基于NXP LPC54606的以太网接口电瓶车充电站解决方案

2018年9月18日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下世平推出基于恩智浦(NXP)LPC54606的以太网接口电瓶车充电站解决方案。目前电瓶车充电站正在向联网电瓶车充电站转换,用微信支付的方式来取代传统的投币或刷卡付款的方式。图示1-大联大世平推出基于NXP LPC54606的以太网接口电瓶车充电站解决方案的系统方案图功能描述该方案带有联网控制、16路IO控制等功能的共用插座;通过以太网连接云端,可以实现微信控制插座开关和收费;可以通过设备管控系统实现OTA;16路独立过流保护。图示2-大联大世平推出基于NXP LPC54606的以太网接口电瓶车充电站解决方案的照片重要特征以太网连接网络,具有
发表于 2018-09-19
大联大世平集团推出基于NXP LPC54606的以太网接口电瓶车充电站解决方案

LPC1768 -- RTC实时时钟

RTC是当下设备中比较普遍的一个部件,很多设备都需要查看时间。RTC实时时钟已经在很多的单片机中集成,以前还要专门的时钟芯片,现在Cortex-M3内核都包括了这个部件了。和以前NXP的ARM7内核不同的是,LPC1768的时钟源只有32K时钟源提供,这一点是要注意的,其他和ARM7一致。RTC其实也就是一个定时,可以理解为秒定时器,RTC寄存器挺多的,不过寄存器结构相对简单,操作起来还是很方便的。讲解几个重要的寄存器,中断位置寄存器ILR、时钟控制寄存器CCR、计数器增量中断寄存器CIIR、报警屏蔽寄存器AMR第一个ILR中断位置寄存器BIT0,当为1时计数器增量模块产生中断。BIT1,当为1是报警寄存器产生中断 
发表于 2018-07-24

LPC1768 WAV播放器 笔记

实验使用的是LPC1768   DMA + 10bit DAC作为音频信号输出,使用USB HOST 读取U盘中存储的WAV格式的音频文件,读取和播放数据文件使用的是乒乓算法。WAV文件格式见:http://blog.csdn.net/seeker_zeroone/article/details/17526523(备注: 网络转载)以下是根据文件格式定义的结构图。typedef struct  RIFF_HEADER{uint32_t RiffFlg; //RIFFuint32_t FileSize; //整个文件大小(不包含 RiffFlg FileSize
发表于 2018-07-24

LPC1788内部EEPROM使用的问题

最近使用LPC1788内部EEPROM存储数据时候发现问题:LPC1788的EEPROM扇区只有 0-62 63扇区不存在 uint32_t i, j; uint8_t count;    uint8_t error = 0;  debug_frmwrk_init(); _DBG(menu); EEPROM_Init();  count = sizeof(write_buffer);    count &= 0xFC;     _DBG_("Erase EEPROM");    for(i
发表于 2018-07-17

LPC17xx的MCPWM周期设置与计算

界限寄存器MCLIM0-2控制PWM的周期,假设MCLIM寄存器的值为 X,MCPWM的外甥时钟为PCLKy MHz,那么可以通过计算得到PWM的周期。计算如下 X/PCLKy = T周期例如,MCLIM为500时,f=50 kHz,周期T=20us,MCLIM为500*2时,f=20 kHz,周期T=40us,    计算过程:MCLIM/外设时钟PCLKy=500/25M (S)=500/25000000(s)=5/250000 * 1000 *1000 us= 20us用逻辑分析仪采集波形,看周期占空比,在此过程中,占空比控制寄存器MCMAT不能为0,逻辑分析仪参数设置1 M
发表于 2018-06-28

IAP一个实例---LPC2214的IAP实现方案

60 MHz的操作频率;配置有2个uART接口、4个外部片选,支持8、16、32外部总线;片内boot下载程序可以实现在系统编程(ISP)和在应用中编程(IAP)。由于该芯片的内置Flash速度很快,并且支持128位宽度接口/加速,应用程序存储并运行在片内Flash中可以获得较快的执行速度。本文提供一种基于LPC2214的在应用编程方案,可以实现应用程序方便、可靠的升级,以及当地维护串口或远方GPRS方式的代码更新。更新过程中,通信中断、装置异常复位、装置停电等异常情况的发生,都不会导致因程序更新而造成的产品死机。1嵌入式产品应用程序启动方式在嵌入式产品中,应用程序可以运行在RAM或Flash中。对于中高端产品,由于要求较高
发表于 2018-06-27
IAP一个实例---LPC2214的IAP实现方案

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved