[请教]关于ucGUI的字体翻转问题

[复制链接]
8423|23
 楼主| yxdengos 发表于 2009-12-4 13:09 | 显示全部楼层 |阅读模式
请大家帮帮忙 我移植了ucGUI到UCOS下 显示ASCII字符的时候 发现字符逆时针旋转了90度 不知什么原因?

ucGUI的英文字体是对所有液晶都通用吗?和我的液晶如何显示每个字节有没有关系呢?

谢谢!
fq1110 发表于 2009-12-4 16:53 | 显示全部楼层
请修改你的设置坐标函数。
 楼主| yxdengos 发表于 2009-12-5 13:18 | 显示全部楼层
谢谢ls

如果我显示“H”字符,我使用默认字体是8*8,调出来的字模就是倾斜了90°的,我输出位图的函数理应没有问题

请问你指得设置坐标函数具体是什么呢?
gxgclg 发表于 2009-12-5 20:33 | 显示全部楼层
我现在正在做UCOS的移植,处于起步阶段,楼主能不能给点资料,谢谢
 楼主| yxdengos 发表于 2009-12-6 11:54 | 显示全部楼层
ls 你是移植到什么芯片啊?
 楼主| yxdengos 发表于 2009-12-6 13:36 | 显示全部楼层
ucGUI中的字模是以行的形式定义的,而我需要移植的液晶屏则是以列的方式定义的,所以发生了翻转

请问有没有什么宏定义开关之类的东西,可以讲字模本身翻转过来?
IJK 发表于 2009-12-7 10:08 | 显示全部楼层
修改对液晶屏的初始化代码,应该可以实现你的目的
fq1110 发表于 2009-12-7 10:33 | 显示全部楼层
这段代码对ST7781,ILI9320IC都有效,看对你是否有帮助。
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{       
        u16 xpos=Xpos;
        u16 ypos=Ypos;
        switch(g_Direction)
        {
        case 0:
                 break;
        case 1:
                xpos=Ypos;
                ypos=Xpos;
                ypos=abs(ypos-319);
                break;
        case 2:
                xpos=abs(239-Xpos);
                ypos=abs(319-Ypos);
                break;
        case 3:
                xpos=Ypos;
                ypos=Xpos;
                xpos=abs(xpos-239);
                break;
        default:
                break;
        }
        LCD_WriteReg(R32, xpos);
        LCD_WriteReg(R33, ypos);
}
这是让屏幕往四个不同的方向输出。
 楼主| yxdengos 发表于 2009-12-7 11:06 | 显示全部楼层
谢谢楼上两位

我参考了这两个LCD07X1 LCD13XX液晶的驱动,因为二者液晶显示差别在于一个是纵向取模(前者),另一个是横向取模,我使用8*8的字体,发现GUI中都是横向取模的,所以在LCD07X1 中的位图输出较为复杂

不知我的理解是否正确?问题应该是我的驱动函数应该写一个横向取模到纵向取模的转换
请问GUI中是否存在宏开关,可以使得字体由横向取模变成纵向吗?
fq1110 发表于 2009-12-7 11:24 | 显示全部楼层
LCD_SWAP_XY说明中是讲交换行列的,我也没有完全理解。但我简单实验后,发现方向没有变,只是坐标值变了。具体的还没有研究过。你如果只是想把字体顺时针转动90度,按我的那样做,应该是可以的。
 楼主| yxdengos 发表于 2009-12-8 10:47 | 显示全部楼层
ls
我的认为是:你的LCD_SetCursor可以理解为将当前坐标值按照某一个轴进行了对称变换,仅仅改变了坐标的值,无论在哪个坐标输出,由于GUI中的字模就是和我的液晶屏不一致,所以结果肯定都是翻转的

我正在试着修改液晶的驱动程序,成功了给你答复!欢迎继续讨论
fq1110 发表于 2009-12-8 17:05 | 显示全部楼层
祝你早日成功。。
zbh912c 发表于 2009-12-8 17:08 | 显示全部楼层
可能要修改字库才行吧,
IJK 发表于 2009-12-8 17:44 | 显示全部楼层
我用过 LCD控制器ILI9320,它的一个寄存器决定了LCD刷新的顺序,跟你的问题有关:

LCD控制器ILI9320

LCD控制器ILI9320
 楼主| yxdengos 发表于 2009-12-9 10:29 | 显示全部楼层
谢谢大家的大力支持

ls的图 应该特指ILI9320的控制器吧!

感觉上面显示的是LCD显示一个字节以后,行列指针的增加规则,不过我看到图中“F”还能变化也不理解。

我的屏中明确了字符时纵向取模,我认为这个应该是不能变的吧,我参考了UCGUI的中文手册中,LCD驱动程序一章,上面有很多驱动程序,其中每个LCD都有一个固定的取模方式。

不知我说得对不对,呵呵
 楼主| yxdengos 发表于 2009-12-9 12:21 | 显示全部楼层
我目前遇到了一个问题,请大家持续关注下,谢谢

因为GUI中对字体的输出都是使用位图,如果我将位图改为了横向取模,那么日后我如果要添加中文的话,那么也要进行修改为横向取模,关键是要在屏中实现任意坐标显示,我是将字模整体偏移offset的方法,如果修改为横向的话,那么改动很大。而且会造成GUI有或没有,LCD的驱动兼容性很差。

请问大家添加中文有什么更好的方法吗?网上大多数产生一个.c文件,我在没有GUI的时候已经实现了中文显示,在外部Flash中存有字模
 楼主| yxdengos 发表于 2009-12-11 13:21 | 显示全部楼层


希望大家对16楼我提的问题发表下意见
五谷道场 发表于 2009-12-11 18:56 | 显示全部楼层
学习到不少东西
xsgy123 发表于 2009-12-12 17:35 | 显示全部楼层
楼主有没UC/OS的源码,我也想学习下这个操作系统
pkat 发表于 2009-12-12 17:48 | 显示全部楼层
要想看懂里面的代码,要花很长时间,不过比linux简单
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

132

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部