GUI图形屏在emWin应用中使用Unicode字库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GUI图形屏在emWin应用中使用Unicode字库相关的知识,希望对你有一定的参考价值。
1.1需要安装的软件
①MDK-ARM V5.10:
安装完MDK-ARMV5.10 以后还要安装STM32F2xx 的PACK(MDK V5.10 只能安装Keil.STM32F2xx_DFP.2.1.0.pack或-更低版本),如果不想安装PACK,安装MDKCortex-M Legacy Device Support V5.10(mdkcm510.exe)也是可以的;另外MDK-ARMV5.10以后的版本是无法支持中文UTF-8编码的。
② C文件编码格式更改工具:..\docs\tools\EditPlus
③J-LINK相关驱动程序。
1.2连接硬件
1.3访问GUI图形屏的Nand-Flash
①通电GUI图形屏并将N-LINK下载线插入电脑USB接口(两步骤不分先后)。
②按一下N-LINK的连接键,GUI图形屏即可进入U盘模式(使用系统自带驱动),之后就可以跟U盘一模一样访问GUI图形屏的Nand-Flash了(写速度3.2Mbytes/S,读速度5.6Mbytes/S);GUI图形屏进入U盘模式后屏幕是没显示的。
③拷贝Nand-Flash资料到本地磁盘,然后格式化Nand-Flash:
备注:256Mbyte产品格式化为FAT32或FAT都可以,但128Mbyte产品只能格式化为FAT。
1.4 建立HelloWord例程
①用MDK打开工程:
..\docs\democodes\empty_prj_emwin_noOS_207ve_SPI\mdk_proj\demo_emwin.uvproj
②修改maintask.c文件:
#include "dialog.h"
#include <string.h>
#include <stdio.h>
#include "stm32f2xx.h"
#include "glcd.h"
void MainTask(void)
{
GUI_Init();
_mHelloWord(WM_HBKWIN);
while(1) {GUI_Delay(20);}
}
③在..\docs\democodes\empty_prj_emwin_noOS_207ve_SPI\application目录创建helloword.c文件并加入工程:
④编写helloword.c程序:
#include"GUI.h"
#include"dialog.h"
externGUI_CONST_STORAGE GUI_FONT_GL font_uni_16m16;
#define ID_WIN 1001
#define ID_BUT 1002
static constGUI_WIDGET_CREATE_INFO _aHelloWord[] = //控件结构体数组
{
{WINDOW_CreateIndirect,0, ID_WIN, 0, 0, 640, 480, 0, 0},
{BUTTON_CreateIndirect,"HelloWord", ID_BUT, 280, 430,80, 20},
};
static void_cbHelloWord(WM_MESSAGE* pMsg) //窗体回调函数
{
switch(pMsg->MsgId)
{
case WM_PAINT:
GUI_SetColor(GUI_BLUE);
GUI_SetFont((GUI_FONT*)&font_uni_16m16); //设置当前字库
GUI_SetTextMode(GUI_TEXTMODE_TRANS);
GUI_DispStringAt("HelloWord 您好!", 3, 3); //重绘文字
break;
case WM_INIT_DIALOG:
break;
case WM_NOTIFY_PARENT:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
WM_HWIN_mHelloWord(WM_HWIN hParent) //窗体创建函数
{
WM_HWIN hWIN;
hWIN = GUI_CreateDialogBox(_aHelloWord,GUI_COUNTOF(_aHelloWord), _cbHelloWord, hParent, 0, 0);
return hWIN;
}
⑤更改HelloWord.c文件编码格式为UTF-8编码:
使用UNICODE字库还有个重要的工作就是修改包含有中文的c 文件编码格式(没有中文的c 文件可以不修改),因为总要告诉编译器用什么编码格式去编译中文文字(否则会按照电脑操作系统的编码格式编译),因为我们使用的是UNICODE 编码,所以要告诉编译器用UTF-8编码格式编译中文(因为MDK 编译器不支持UNICODE编码,emWin程序运行时再在已移植好的驱动层将UTF-8转成UNICODE编码) ,需安装EditPlus软件。
⑥创建UNICODE字库程序font_uni_16m16.c:
#include"GUI.h"
staticGUI_CONST_STORAGE unsigned char font_uni_16m16_xsize2[]= {16}; //字库第2分段字符的宽(数组)
staticGUI_CONST_STORAGE unsigned char font_uni_16m16_xsize1[]= {8}; //字库第1分段字符的宽(数组)
staticGUI_CONST_STORAGE GUI_FONT_PROP_GL font_uni_16m16_prop2 = { //字库第2分段
0x0080 //起始字符
,0xffff //结束字符
,&font_uni_16m16_xsize2[0]
,0
};
staticGUI_CONST_STORAGE GUI_FONT_PROP_GL font_uni_16m16_prop1 = { //字库第1分段
0x0020 //起始字符
,0x007f //结束字符
,&font_uni_16m16_xsize1[0]
,&font_uni_16m16_prop2 //指向下1分段
};
GUI_CONST_STORAGEGUI_FONT_GL font_uni_16m16 ={
GUI_FONTTYPE_PROP_GL
,16 //height of font
,16 //space of font y
,1 //magnification x(not support)
,1 //magnification y(not support)
,&font_uni_16m16_prop1
,0 //Baseline
,0 //Height of lowercase characters
,0 //Height of capital characters
,8 //1:gb2312 2:gbk 4:big5 8:unicode(monospaced) 16:unicode(non-monospaced)
,"a16:u16" //Library of [ascii]:[gb2312/gbk/big5/unicode/utf-8]
};
⑦用..\docs\tools\fontGen.exe字库工具创建ASCII字库:a16.bin
⑧用..\docs\tools\fontGen.exe字库工具创建UNICODE字库:u16.bin
⑨编译HelloWord工程
1.5卸载GUI图形屏的Nand-Flash
在N-LINK下载线处于空闲状态时(指示灯不再闪烁),按一下N-LINK下载线的连接键(或者跟U盘一样卸载、直接从电脑上拔掉N-LINK下载线都可以),GUI图形屏会重启并进入工作模式。
1.6下载并运行HelloWord例程
诺嵌光电
www.neqee.com
以上是关于GUI图形屏在emWin应用中使用Unicode字库的主要内容,如果未能解决你的问题,请参考以下文章
emWin 2天速成实例教程000_如何快速入门ucGUI/emWin
第3版emWin教程第30章 emWin6.x的SIF格式全字库生成和使用方法(Unicode编码,QSPI Flash方案)
第3版emWin教程第28章 emWin6.x的C文件格式的汉字生成和实现(Unicode编码)
第3版emWin教程第30章 emWin6.x的SIF格式全字库生成和使用方法(Unicode编码,QSPI Flash方案)