打印

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

[复制链接]
6826|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请大家帮帮忙 我移植了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的移植,处于起步阶段,楼主能不能给点资料,谢谢

使用特权

评论回复
5
yxdengos|  楼主 | 2009-12-6 11:54 | 只看该作者
ls 你是移植到什么芯片啊?

使用特权

评论回复
6
yxdengos|  楼主 | 2009-12-6 13:36 | 只看该作者
ucGUI中的字模是以行的形式定义的,而我需要移植的液晶屏则是以列的方式定义的,所以发生了翻转

请问有没有什么宏定义开关之类的东西,可以讲字模本身翻转过来?

使用特权

评论回复
7
IJK| | 2009-12-7 10:08 | 只看该作者
修改对液晶屏的初始化代码,应该可以实现你的目的

使用特权

评论回复
8
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);
}
这是让屏幕往四个不同的方向输出。

使用特权

评论回复
9
yxdengos|  楼主 | 2009-12-7 11:06 | 只看该作者
谢谢楼上两位

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

不知我的理解是否正确?问题应该是我的驱动函数应该写一个横向取模到纵向取模的转换
请问GUI中是否存在宏开关,可以使得字体由横向取模变成纵向吗?

使用特权

评论回复
10
fq1110| | 2009-12-7 11:24 | 只看该作者
LCD_SWAP_XY说明中是讲交换行列的,我也没有完全理解。但我简单实验后,发现方向没有变,只是坐标值变了。具体的还没有研究过。你如果只是想把字体顺时针转动90度,按我的那样做,应该是可以的。

使用特权

评论回复
11
yxdengos|  楼主 | 2009-12-8 10:47 | 只看该作者
ls
我的认为是:你的LCD_SetCursor可以理解为将当前坐标值按照某一个轴进行了对称变换,仅仅改变了坐标的值,无论在哪个坐标输出,由于GUI中的字模就是和我的液晶屏不一致,所以结果肯定都是翻转的

我正在试着修改液晶的驱动程序,成功了给你答复!欢迎继续讨论

使用特权

评论回复
12
fq1110| | 2009-12-8 17:05 | 只看该作者
祝你早日成功。。

使用特权

评论回复
13
zbh912c| | 2009-12-8 17:08 | 只看该作者
可能要修改字库才行吧,

使用特权

评论回复
14
IJK| | 2009-12-8 17:44 | 只看该作者
我用过 LCD控制器ILI9320,它的一个寄存器决定了LCD刷新的顺序,跟你的问题有关:

使用特权

评论回复
15
yxdengos|  楼主 | 2009-12-9 10:29 | 只看该作者
谢谢大家的大力支持

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

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

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

不知我说得对不对,呵呵

使用特权

评论回复
16
yxdengos|  楼主 | 2009-12-9 12:21 | 只看该作者
我目前遇到了一个问题,请大家持续关注下,谢谢

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

请问大家添加中文有什么更好的方法吗?网上大多数产生一个.c文件,我在没有GUI的时候已经实现了中文显示,在外部Flash中存有字模

使用特权

评论回复
17
yxdengos|  楼主 | 2009-12-11 13:21 | 只看该作者


希望大家对16楼我提的问题发表下意见

使用特权

评论回复
18
五谷道场| | 2009-12-11 18:56 | 只看该作者
学习到不少东西

使用特权

评论回复
19
xsgy123| | 2009-12-12 17:35 | 只看该作者
楼主有没UC/OS的源码,我也想学习下这个操作系统

使用特权

评论回复
20
pkat| | 2009-12-12 17:48 | 只看该作者
要想看懂里面的代码,要花很长时间,不过比linux简单

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

132

帖子

0

粉丝