Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RTGUI是否支持ra8875外接字库芯片(结贴)
发布于 2013-06-14 22:13:12 浏览:3992
订阅该版
因为目标板上没有sd卡,但ra8875外接了GT23L32S4W字库芯片,打算用字库芯片作为系统的字库,不知道这个方案是否可行,望大家提供一下方案思路。
查看更多
8
个回答
默认排序
按发布时间排序
xdzy
2013-06-15
这家伙很懒,什么也没写!
尝试过添加字体和引擎,但显示的位置老是不对。button里面的字都显示到起始位置(0,0)去了。求解
xdzy
2013-06-15
这家伙很懒,什么也没写!
追了一天,终于能用字库芯片了,rtgui强大!
aozima
2013-06-16
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
欢迎分享。
xdzy
2013-06-16
这家伙很懒,什么也没写!
``` #include
#include "ra8875.h" #include "dc.h" #ifdef RTGUI_USING_FONT_GT23L32S4W typedef struct { rt_uint8_t Type; /* 字体代码 0 表示16点阵 */ rt_uint8_t Background; /*是否带背景*/ unsigned long Color; /* 字体颜色 */ rt_uint16_t BackColor; /* 文字背景颜色*/ rt_uint8_t Hsize; /*水平放大倍数*/ rt_uint8_t Vsize; /*垂直放大倍数*/ rt_uint8_t Hspace; /* 文字水平间距,单位 = 像素 */ rt_uint8_t Vspace; /* 文字行间距,单位 = 像素 */ }FONT_T; /*字体枚举成员*/ enum { Font_16 = 0x00, //16x16 Font_24 = 0x40, //24x24 Font_32 = 0x80, //32x32 }; enum { Font_BC = 0x00, //带背景颜色 Font_BT = 0x40, //背景颜色通透 }; /*ra8875使用外部字库显示函数*/ static void rtgui_ra8875_font_draw_text( struct rtgui_font *font, struct rtgui_dc *dc, const char *text, rt_ubase_t len, struct rtgui_rect *rect) { FONT_T *tFont = RT_NULL; struct rtgui_dc_hw *self = RT_NULL; self = (struct rtgui_dc_hw *) dc; //提取显示位置 rect->x1 += self->owner->extent.x1; rect->y1 += self->owner->extent.y1; tFont = (FONT_T *)font->data; //提取私有数据 tFont->BackColor = rtgui_dc_get_gc(dc)->background; tFont->Color = rtgui_dc_get_gc(dc)->foreground; LCD_CmdWrite(0x2A);//HOFS0 写入位置 LCD_DataWrite(rect->x1); LCD_CmdWrite(0x2B);//HOFS1 LCD_DataWrite(rect->x1>>8); LCD_CmdWrite(0x2C);//VOFS0 LCD_DataWrite(rect->y1); LCD_CmdWrite(0x2D);//VOFS1 LCD_DataWrite(rect->y1>>8); LCD_CmdWrite(0x40);// 文本模式 LCD_DataWrite(0X80 | LCD_DATA); LCD_CmdWrite(0x21);// 选择CGRAM 、外部字库RAM LCD_DataWrite((LCD_DATA & 0x7f)| 0x20 ); LCD_CmdWrite(0x05);// 选择外部flash0 LCD_DataWrite((LCD_DATA & 0x03)| 0x08); LCD_CmdWrite(0x06); //字库总线时钟分频 LCD_DataWrite(0x03); LCD_CmdWrite(0x2F);// GT23L32S4W、GB2312、ascll码粗笔画 LCD_DataWrite(0x82); LCD_CmdWrite(0x2E);// 水平间距 LCD_DataWrite((tFont -> Hspace&0x3F) | tFont ->Type); LCD_CmdWrite(0x29);// 垂直间距 LCD_DataWrite(tFont -> Vspace); LCD_CmdWrite(0x22);// 水平、垂直放大倍数 是否带背景颜色 LCD_DataWrite((LCD_DATA & 0xB0)| tFont->Hsize<<2 | tFont ->Vsize | tFont -> Background); LCD_CmdWrite(0x60);// 背景颜色 LCD_DataWrite((tFont -> BackColor&0x001f)); LCD_CmdWrite(0x61);//BGCR0 LCD_DataWrite((tFont -> BackColor&0x07e0)>>5); LCD_CmdWrite(0x62);//BGCR0 LCD_DataWrite((tFont -> BackColor&0xf800)>>11); LCD_CmdWrite(0x63);// 前景颜色 LCD_DataWrite((tFont -> Color&0x001f)); LCD_CmdWrite(0x64);//BGCR0 LCD_DataWrite((tFont -> Color&0x07e0)>>5); LCD_CmdWrite(0x65);//BGCR0 LCD_DataWrite((tFont -> Color&0xf800)>>11); LCD_CmdWrite(0x02); //开始写入 while(*text) LCD_DataWrite(*text++); LCD_CmdWrite(0x40);// 退回绘图模式 LCD_DataWrite(0X7f& LCD_DATA); } static void rtgui_ra8875_font_get_metrics(struct rtgui_font *font, const char *text, rtgui_rect_t *rect) { rt_uint32_t length = 0, width = 0; FONT_T *ra8875_font = (FONT_T *)(font->data); RT_ASSERT(ra8875_font != RT_NULL); switch(ra8875_font->Type) { case 0x00: width = 16; break; case 0x40: width = 24; break; case 0x80: width = 32; break; default: break; } /* set init metrics rect */ rect->x1 = 0; rect->y1 = 0; rect->x2 = 0; rect->y2 = font->height; while (*text) { length = 0; while ((rt_uint8_t) * (text + length) >= 80) length ++; /* it's not a ascii character */ rect->x2 += (width / 2) * length; text += length; length = 0; while (((rt_uint8_t) * (text + length) < 80) && *(text + length)) length ++; rect->x2 += width* length; text += length; } } const struct rtgui_font_engine ra8875_font_engine = { RT_NULL, RT_NULL, rtgui_ra8875_font_draw_text, rtgui_ra8875_font_get_metrics, }; FONT_T font16 = { Font_16, /* 字体16x16 */ Font_BT, //背景颜色为通透 }; FONT_T font24 = { Font_24, /* 字体16x16 */ Font_BT, //背景颜色为通透 }; FONT_T font32 = { Font_32, /* 字体16x16 */ Font_BT, //背景颜色为通透 }; struct rtgui_font rtgui_font16 = { "ic", 16, /* height */ 1, /* refer count */ &ra8875_font_engine, /* font engine */ (void *) &font16, /* font private data */ }; struct rtgui_font rtgui_font24 = { "ic", 24, /* height */ 1, /* refer count */ &ra8875_font_engine, /* font engine */ (void *) &font24, /* font private data */ }; struct rtgui_font rtgui_font32 = { "ic", 32, /* height */ 1, /* refer count */ &ra8875_font_engine, /* font engine */ (void *) &font32, /* font private data */ }; #endif ``` 呵呵,写得很烂,望大家见谅。
aozima
2013-06-16
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
很好很强大。
saiyn
2013-09-06
这家伙很懒,什么也没写!
>追了一天,终于能用字库芯片了,rtgui强大! --- 你移植RT-GUI到RA8875刷屏速度怎样啊,我移植GUI到RA8870刷屏速度很慢?
xdzy
2013-09-10
这家伙很懒,什么也没写!
挺快的,一般显示没有任何压力
撰写答案
登录
注册新账号
关注者
0
被浏览
4k
关于作者
xdzy
这家伙很懒,什么也没写!
提问
7
回答
31
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
env中添加lvgl软件包后,keil编译包--c99错误
2
【NXP-MCXA153】 定时器驱动移植
3
GD32F450 看门狗驱动适配
4
【NXP-MCXA153】看门狗驱动移植
5
RT-Thread Studio V2.2.9 Release Note
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
5
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
10
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部