ZLG GUI学习试验心得及GB2312字库移植

本文介绍了ZLG GUI在嵌入式系统中的移植过程,包括所需的文件结构、LCD驱动编写、配置文件配置。同时,作者发现并修复了GUI_PutChar24_32函数的BUG,并添加了输出GB2312字库的函数,实现了汉字的显示。此外,还提供了水平和垂直输出汉字字符串的函数。
摘要由CSDN通过智能技术生成
 

 zlggui是一个简单的GUI,前后共花了半天时间来试验,有些心得;个人觉得这个UI用在一些需求一个简单的UI嵌入式系统中还是挺好的,移植方便,容易修改。其实现了基本的画线、画长方形、画圆/椭圆、画弧、曲线、填充、5*7\8*8字\24*32ASCII字符、简单窗体、菜单、按键等功能。在试验过程中,修改了一处BUG及增加了几个用来输出GB2312字库的函数。以下详细说明。


源程序中的各功能部分文件逻辑关系结构:
顶层:font_24_32 Font5_7 Font8_8 Menu Spline Windows Loadbit
中层:Gui_basic GUI_StockC ConvertColor
底层:需要由用户根据硬件编写LCD的驱动,并且要符合中层的函数声明要求
配置层:Gui_CONFIG.h,另外需要用户提供一个全局的配置文件(数据类型等)

在移植过程中,只需设计四个文件即可(文件名自定,文件数量也算定,只要功能实现即可):lcd_driver.h lcd_driver.c config.h。其中lcd_driver.c、lcd_driver.h和 config.h需要由用户提供。除了要符合中层Gui_BASIC.H所要求的函数定义外,在lcd_driver.c/h  中还需要定义两个宏(函数):GUI_CmpColor和GUI_CopyColor,注意这两个宏需要根据LCD的显示类型来定义,单色屏和彩色屏不同。

lcd_driver.h中的一些示例:
//这两个宏根据LCD的像素位数不同而不同,以 下是彩色屏定义
#define  GUI_CmpColor(color1, color2) ((color1) == (color2))
#define  GUI_CopyColor(color1, color2)  ((*color1) = (color2))

//单色屏定义
#define  GUI_CmpColor(color1, color2) ( (color1&0x01) == (color2&0x01) )
#define  GUI_CopyColor(color1, color2)  ((*color1) =( color2&0x01))

//定义一些颜色值
#define  red   0x001f
#define  blue   0xf800
#define  green   0x07e0
#define  black   0x0000
=====================================
lcd_driver.c中的一些示例:
在这个驱动文件中,需要定义几个函数:画点、取点、画水平线、画垂直线、画任意两点线四个函数,且要和Gui_basic.h中的函数声明符合。在我的移植中,我在lcd_driver.h中用宏来联系这些函数,这样就不用改变我lcd_driver.c中的函数名,如下:
#define GUI_Point set_pixel
#define GUI_HLine draw_hline
#define GUI_RLine draw_vline
#define GUI_ReadPoint get_pixel 

config.h中的一些示例:
typedef unsigned char  uint8;                    /* 无符号8位整型变量  */
typedef signed   char  int8;                    /* 有符号8位整型变量  */
typedef unsigned short uint16;                   /* 无符号16位整型变量 */
typedef signed   short int16;                   /* 有符号16位整型变量 */
typedef unsigned int   uint32;                   /* 无符号32位整型变量 */
typedef signed   int   int32;                   /* 有符号32位整型变量 */
typedef unsigned short TCOLOR;
//包含文件,根据工程的环境来包含
#include "GUI_BASIC.H"
#include "font5_7.h"
#include "font24_32.h"
#include "font8_8.h"
#include "font_macro.h"
#include "windows.h"

在移植过程中,发现zlggui的一个BUG。在font_24_32.c中,GUI_PutChar24_32函数设计有误,导致不能正确输出字体数据。按照我的理解逻辑,修改后如下:
uint8  GUI_PutChar24_32(uint32 x, uint32 y, uint8 ch)
{  uint8   font_dat;
   uint8   i, j, k;
   TCOLOR  bakc;

   /* 参数过滤 */
   if( x>(GUI_LCM_XMAX-32) ) return(0);
   if( y>(GUI_LCM_YMAX-32) ) return(0);
   for(i=0; i<14; i++)
   {  if(FONT24x32_TAB[i]==ch) break;
   }
   ch =

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值