OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10177|回复: 10

请教OLED不跑GUI如何显示比1608更大的字体

[复制链接]

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
发表于 2014-11-21 22:08:27 | 显示全部楼层 |阅读模式
5金钱
请教一下,原子哥的OLED例程中,字体是1206和1608两种,如果不跑GUI,要如何才能实现显示更大的字体。
我想显示数字,1608字体还是太小。

最佳答案

查看完整内容[请看2#楼]

论坛中就有这样的帖子,你为什么不搜索一下呢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

278

帖子

1

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2013-12-27
在线时间
0 小时
发表于 2014-11-21 22:08:28 | 显示全部楼层
论坛中就有这样的帖子,你为什么不搜索一下呢。
水的比较多。
回复

使用道具 举报

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
 楼主| 发表于 2014-11-21 22:08:28 | 显示全部楼层
问题已经解决,谢谢各位的帮忙和指点,
1.先是弄懂了取字模软件的使用
2.取出字模之后,还是无法正常显示,显示一半,另外一半不能显示,最终发现是OLED_ShowChar();函数的问题。

我的程序原来是参考了“某舟”的开发板的例程,
[mw_shl_code=c,true]void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) { u8 temp,t,t1; u8 y0=y; chr=chr-' ';//?????????ó???? for(t=0;t<size;t++) { if(size==12)temp=oled_asc2_1206[chr][t]; //?÷??1206×??? else if (size==16)temp=oled_asc2_1608[chr][t]; //?÷??1608×??? else if (size==32)temp=oled_asc2_3216[chr][t]; for(t1=0;t1<8;t1++) { if(temp&0x80)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp<<=1; y++; if((y-y0)==size) { y=y0; x++; break; } } } }[/mw_shl_code]
然后发现问题,参考了原子大大的例程
[mw_shl_code=c,true]void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) { u8 temp,t,t1; u8 y0=y; u8 csize=(size/8+((size%8)?1:0))*(size/2); chr=chr-' ';//?????????ó???? for(t=0;t<csize;t++) { if(size==12)temp=oled_asc2_1206[chr][t]; //?÷??1206×??? else if (size==16)temp=oled_asc2_1608[chr][t]; //?÷??1608×??? else if (size==32)temp=oled_asc2_3216[chr][t]; for(t1=0;t1<8;t1++) { if(temp&0x80)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp<<=1; y++; if((y-y0)==size) { y=y0; x++; break; } } } }[/mw_shl_code]
关键点就在这一句
[mw_shl_code=c,true]u8 csize=(size/8+((size%8)?1:0))*(size/2);[/mw_shl_code] [mw_shl_code=c,true]以及循环条件[/mw_shl_code] [mw_shl_code=c,true]t<csize[/mw_shl_code] [mw_shl_code=c,true]在此,再次鄙视一下“某舟”的例程[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]再次感谢原子大大的分享。[/mw_shl_code]
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-11-21 22:21:55 | 显示全部楼层
用取模软件取出自己想要的字体    以数组形式放到程序中  
 然后用OLED显示出来
回复

使用道具 举报

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
 楼主| 发表于 2014-11-21 22:34:48 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
谢谢楼上指点,我还是有点不明白,我试过修改原有的字体的那些数组,不成功。
请问能给个例程我参考下或者其他参考资料吗?谢谢
回复

使用道具 举报

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
 楼主| 发表于 2014-11-21 23:37:53 | 显示全部楼层
回复【4楼】青苹果PAD:
---------------------------------
谢谢提醒。
我现在已经用取模软件取了字模,但是总是显示乱码
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-11-22 11:22:45 | 显示全部楼层
回复【5楼】adaphoto:
---------------------------------
因为你的扫描方式不对,我显示64*32没压力
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
发表于 2016-7-3 20:49:09 | 显示全部楼层
八度空间 发表于 2014-11-22 11:22
回复【5楼】adaphoto:
---------------------------------
因为你的扫描方式不对,我显示64*32没压力

能给个你的程序看看吗,我现在想把显示的字体变大,一直调不通~邮箱:824695709@qq.com,可以的话发我看下 非常感谢
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-7-3 21:24:52 | 显示全部楼层
comprends 发表于 2016-7-3 20:49
能给个你的程序看看吗,我现在想把显示的字体变大,一直调不通~邮箱:,可以的话发我看下 非常感谢

取好模数组,然后按照你的去模顺序来进行扫描就是了,很简单的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
发表于 2016-7-3 21:47:22 | 显示全部楼层
本帖最后由 comprends 于 2016-7-3 21:49 编辑
八度空间 发表于 2016-7-3 21:24
取好模数组,然后按照你的去模顺序来进行扫描就是了,很简单的

我用的是这样一个函数,void OLED_ShowStr(unsigned char x,unsigned char y,unsigned char ch[],unsigned char TextSize)
{
        unsigned char c = 0,i = 0,j = 0;
        switch(TextSize)
        {
/*                case 1:
                {
                while(ch[j] != '\0')
                {
                        c = ch[j] - 32;
                        if(x > 126)
                        {
                                x = 0;
                                y++;        
                        }
                        OLED_SetPos(x,y);
                        for(i=0;i<6;i++)
                                WriteDat(F6x8[c]);
                        x += 6;
                        j++;
                }
        }break;*/
                case 2:
                {
                        while(ch[j] !='\0')
                        {
                                c = ch[j]-32;
                                if(x>120)
                                {
                                        x = 0;
                                        y++;
                                }
                                OLED_SetPos(x,y);
                                for(i=0;i<8;i++)
                                        WriteDat(F8X16[c*16+i]);
                                OLED_SetPos(x,y+1);
                                for(i=0;i<8;i++)
                                        WriteDat(F8X16[c*16+i+8]);
                                x +=8;
                                j++;
                        }
                }break;
        }
}      



是例程里面的,我用这个可以把他对应的字库调通点亮,想改变那个字库,while(ch[j] !='\0')
                        {
                                c = ch[j]-32;
                                if(x>120)
                                {
                                        x = 0;
                                        y++;
                                }
                                OLED_SetPos(x,y);
                                for(i=0;i<8;i++)
                                        WriteDat(F8X16[c*16+i]);
                                OLED_SetPos(x,y+1);
                                for(i=0;i<8;i++)
                                        WriteDat(F8X16[c*16+i+8]);
                                x +=8;
                                j++;
对于这段代码不是很懂,这句里面的
    WriteDat(F8X16[c*16+i+8]);    c*16+i+8这段是什么意思呢
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-7-3 21:52:56 | 显示全部楼层
comprends 发表于 2016-7-3 21:47
我用的是这样一个函数,void OLED_ShowStr(unsigned char x,unsigned char y,unsigned char ch[],unsigne ...

F4开发板LCD显示字符里边就有大字体的显示,自己仔细看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 11:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表