日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UCGUI使用外部字库芯片显示汉字

發(fā)布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UCGUI使用外部字库芯片显示汉字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發(fā)板中用的是外部字庫芯片GT21L16S2W

調試步驟:
一、編寫GT21L16S2W驅動,包括GT21L16S2W初始化函數和GT21L16S2W讀函數,并配置好GT21L16S2W引腳,然后在調用GUI_Init()初始化UCGUI之前一定要調用GT21L16S2W初始化函數,剛開始調試的時候就是因為忘記調用,搞了半天才發(fā)現問題。
二、新建字庫文件HZK16.c,建立漢字字庫結構體GUI_FontHZ16,字庫文件HZK16.c一定要引用頭文件SSP_GT21L16S2W.h,因為該頭文件中定義有各種類型字庫在GT21L16S2W芯片中的首地址,如上圖。建立字庫時要引用ASC字符和漢字字庫的首地址。
三、配置UCGUI
1、GUIConf.h

將默認字體設置成新建字庫GUI_FontHZ16
2、GUI.h

在GUI.h中聲明新建字庫GUI_FontHZ16
3、GUICharP.c
修改Core/GUICharP.c中的void GUIPROP_DispChar(U16P c)函數,使其能夠通過調用字符編碼從默認字庫GUI_FontHZ16中打到字符所在點陣的信息,然后計算出字符點陣在GT21L16S2W芯片的中的地址,再調用GT21L16S2W的讀函數讀出字符點陣信息,然后通過LCD_DrawBitmap函數將點陣畫到LCD屏上。

void GUIPROP_DispChar(U16P c) {int BytesPerLine;U16 BytesPerFont;U32 base, oft;U8 MSB, LSB;GUI_DRAWMODE DrawMode = GUI_Context.TextMode;const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);if (pProp) {GUI_DRAWMODE OldDrawMode;const GUI_CHARINFO GUI_UNI_PTR * pCharInfo;if (GUI_Context.pAFont == &GUI_FontHZ16) {pCharInfo = pProp->paCharInfo;base = (U32)pProp->paCharInfo->pData;BytesPerFont = GUI_Context.pAFont->YSize * pProp->paCharInfo->BytesPerLine;if (BytesPerFont > BYTES_PER_FONT) {BytesPerFont = BYTES_PER_FONT;}if (c < 0x80) {oft = (c-0x20) * BytesPerFont + base;GT21L16S2W_Read(oft, GUI_FontDataBuf, BytesPerFont);OldDrawMode = LCD_SetDrawMode(DrawMode);BytesPerLine = pCharInfo->BytesPerLine;LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY,pCharInfo->XSize/2, GUI_Context.pAFont->YSize,GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag,1, BytesPerLine, GUI_FontDataBuf, &LCD_BKCOLORINDEX);} else {MSB = c >> 8;LSB = c & 0xFF;if (MSB == 0xA9 && LSB >= 0xA1)oft = (282 + (LSB - 0xA1)) * BytesPerFont + base;else if (MSB >= 0xA1 && MSB <= 0xA3 && LSB >= 0xA1)oft = ((MSB-0xA1) * 94 + (LSB - 0xA1)) * BytesPerFont + base;else if (MSB >= 0xB0 && MSB <= 0xF7 && LSB >= 0xA1) oft = ((MSB-0xB0) * 94 + (LSB - 0xA1) + 846) * BytesPerFont + base;GT21L16S2W_Read(oft, GUI_FontDataBuf, BytesPerFont);BytesPerLine = pCharInfo->BytesPerLine;OldDrawMode = LCD_SetDrawMode(DrawMode);LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY,pCharInfo->XSize, GUI_Context.pAFont->YSize,GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag,1, BytesPerLine, GUI_FontDataBuf, &LCD_BKCOLORINDEX);}} else {pCharInfo = pProp->paCharInfo+(c-pProp->First);BytesPerLine = pCharInfo->BytesPerLine;OldDrawMode = LCD_SetDrawMode(DrawMode);LCD_DrawBitmap( GUI_Context.DispPosX, GUI_Context.DispPosY,pCharInfo->XSize,GUI_Context.pAFont->YSize,GUI_Context.pAFont->XMag,GUI_Context.pAFont->YMag,1, /* Bits per Pixel */BytesPerLine,pCharInfo->pData,&LCD_BKCOLORINDEX);}/* Fill empty pixel lines */if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) {int YMag = GUI_Context.pAFont->YMag;int YDist = GUI_Context.pAFont->YDist * YMag;int YSize = GUI_Context.pAFont->YSize * YMag;if (DrawMode != LCD_DRAWMODE_TRANS) {LCD_COLOR OldColor = GUI_GetColor();GUI_SetColor(GUI_GetBkColor());LCD_FillRect(GUI_Context.DispPosX, GUI_Context.DispPosY + YSize, GUI_Context.DispPosX + pCharInfo->XSize, GUI_Context.DispPosY + YDist);GUI_SetColor(OldColor);}}LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */GUI_Context.DispPosX += pCharInfo->XDist * GUI_Context.pAFont->XMag;} }

int GUIPROP_GetCharDistX(U16P c)函數也做了修改:

int GUIPROP_GetCharDistX(U16P c) {const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);//return (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XSize * GUI_Context.pAFont->XMag : 0;if(GUI_Context.pAFont == &GUI_FontHZ16){ return (pProp) ? pProp->paCharInfo->XDist * GUI_Context.pAFont->XMag : 0;}else{return (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XDist * GUI_Context.pAFont->XMag : 0;}; }

總結

以上是生活随笔為你收集整理的UCGUI使用外部字库芯片显示汉字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。