数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 7473|回复: 19

[STM] 0.96_OLED大字符显示

[复制链接]
发表于 2019-2-22 15:13:05 | 显示全部楼层 |阅读模式
如何显示32*32的大字符,下面是软件设置,不废话,看图




下面是主程序,字符编码及程序调用


主程序



字符编码


主程序调用main函数

最后当然是附件了,








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1 +1 家元 +60 收起 理由
家睦 + 1 + 60

查看全部打赏

发表于 2019-10-18 22:56:48 来自手机浏览器 | 显示全部楼层
寄存器还是库?
回复 支持 反对

使用道具 举报

发表于 2019-10-18 21:57:30 | 显示全部楼层
fryefryefrye 发表于 2019-3-25 22:31
你这是直接生成32×32的字模啊。耗费了存储空间。

我还是用的16×16的字模,不过在代码里面纵向和横向放大 ...

0元不是不要钱嘛:titter:
回复 支持 反对

使用道具 举报

发表于 2019-4-26 15:03:39 | 显示全部楼层
正好用到这个OLED,学习下
回复 支持 反对

使用道具 举报

发表于 2019-3-28 08:53:37 | 显示全部楼层
fryefryefrye 发表于 2019-3-26 14:55
Arduino NANO.应该Mega 8 单片机吧。我也不大清楚。

推荐个字库,gt20l16或者gt20l24,一个是24*24,一个是16*16
回复 支持 反对

使用道具 举报

发表于 2019-3-27 08:05:59 | 显示全部楼层
fryefryefrye 发表于 2019-3-26 14:55
Arduino NANO.应该Mega 8 单片机吧。我也不大清楚。

怀疑Arduino编译吃了内存,要么换编译平台,要么继续优化,我1.25kB的stc12都能运行,1k作12864显存(一次过顺序写入12864),0.25k运行代码用,直接对单片机内的1k显存操作,主要写个译码底层
回复 支持 反对

使用道具 举报

发表于 2019-3-26 14:55:37 | 显示全部楼层
cbcb4cb 发表于 2019-3-26 13:21
单片机配置发一下

Arduino NANO.应该Mega 8 单片机吧。我也不大清楚。
回复 支持 反对

使用道具 举报

发表于 2019-3-26 13:21:42 | 显示全部楼层
fryefryefrye 发表于 2019-3-26 08:42
我内存不够啊,16*16的字模放大之后,只用了64字节的局部变量,暂时存储1个32×32的汉字,然后写到显示屏 ...

单片机配置发一下
回复 支持 反对

使用道具 举报

发表于 2019-3-26 08:42:24 | 显示全部楼层
cbcb4cb 发表于 2019-3-26 08:33
我是在单片机拿1kB,ram作显存,方便操作。
我的代码是将1个字节放大成两个字节,也就是纵向拉伸放大两倍 ...

我内存不够啊,16*16的字模放大之后,只用了64字节的局部变量,暂时存储1个32×32的汉字,然后写到显示屏,然后就释放了。
回复 支持 反对

使用道具 举报

发表于 2019-3-26 08:33:57 | 显示全部楼层
fryefryefrye 发表于 2019-3-25 22:35
为啥你的代码这么短。我要写这么长?

//显示32x32的中文

我是在单片机拿1kB,ram作显存,方便操作。
我的代码是将1个字节放大成两个字节,也就是纵向拉伸放大两倍。
然后再将读回来的值连续赋值两次,以横向放大两倍。
回复 支持 反对

使用道具 举报

发表于 2019-3-25 22:35:11 | 显示全部楼层
cbcb4cb 发表于 2019-2-24 20:36
缩成4分1

uchar enlarge(uchar dat,cmd)

为啥你的代码这么短。我要写这么长?

//显示32x32的中文
void CN_SSD1306_Wire::ShowCN3232(unsigned char x, unsigned char y, unsigned char N)
{
        unsigned char wm=0;
        unsigned char i=0;
        unsigned int adder=32*N;

        unsigned int CN3232[32];

        for(wm = 0;wm < 32;wm++)
        {
                CN3232[wm] = 0;
                for(i = 0;i < 8;i++)
                {
                        CN3232[wm] = CN3232[wm] + (((((unsigned int)CN16x16[adder]>>i)&1)*3)<<(2*i));
                }
                adder += 1;       
        }

        IIC_SetPos(x , y);
        for(wm = 0;wm < 32;wm++)
        {
                WriteData(*((unsigned char*)(&CN3232[wm/2])));
        }


        IIC_SetPos(x,y + 1);
        for(wm = 0;wm < 32;wm++)
        {
                WriteData(*(((unsigned char*)(&CN3232[wm/2]))+1));
        }

        IIC_SetPos(x , y+2);
        for(wm = 0;wm < 32;wm++)
        {
                WriteData(*(((unsigned char*)(&CN3232[wm/2+16]))));
        }


        IIC_SetPos(x,y + 3);
        for(wm = 0;wm < 32;wm++)
        {
                WriteData(*(((unsigned char*)(&CN3232[wm/2+16]))+1));
        }

}
回复 支持 反对

使用道具 举报

发表于 2019-3-25 22:33:03 | 显示全部楼层
小茅 发表于 2019-2-22 18:41
像STM32这种内存比较大的可以直接建一个1024的char类型数组,用来存储整个屏幕显示的内容。这样的话可以用S ...

这种OLED,可以任意刷新一排8个点,不会影响其他的点,不会闪的。
回复 支持 反对

使用道具 举报

发表于 2019-3-25 22:31:41 | 显示全部楼层
本帖最后由 fryefryefrye 于 2019-3-25 22:41 编辑

你这是直接生成32×32的字模啊。耗费了存储空间。

我还是用的16×16的字模,不过在代码里面纵向和横向放大到两倍。耗费了CPU。
而且8×16的英文字符也可以放大显示的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2019-2-24 20:43:38 | 显示全部楼层
效果123456789

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2019-2-24 20:36:00 | 显示全部楼层
面条数码 发表于 2019-2-24 18:12
说出你的办法,这样是不是能节省字节空间?

缩成4分1

uchar enlarge(uchar dat,cmd)
{
        uchar i,cache=0;
        if(cmd)
                dat>>=4;
        for(i=0;i<4;i++)
        {
                cache>>=2;
                if(dat&1)
                        cache|=0xc0;
                dat>>=1;
        }
        return cache;
}
回复 支持 反对

使用道具 举报

发表于 2019-2-24 18:12:00 | 显示全部楼层
cbcb4cb 发表于 2019-2-23 22:37
我就字库ic取16*16然后一个像素顶四个像素放大成32*32

说出你的办法,这样是不是能节省字节空间?
回复 支持 反对

使用道具 举报

发表于 2019-2-23 22:37:20 | 显示全部楼层
liuyu123sx 发表于 2019-2-23 13:23
我现在弄得也没有闪烁,就是字符大了,数组也跟着大了,存不了多少字

我就字库ic取16*16然后一个像素顶四个像素放大成32*32
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-23 13:23:05 | 显示全部楼层
小茅 发表于 2019-2-22 18:41
像STM32这种内存比较大的可以直接建一个1024的char类型数组,用来存储整个屏幕显示的内容。这样的话可以用S ...

我现在弄得也没有闪烁,就是字符大了,数组也跟着大了,存不了多少字
回复 支持 反对

使用道具 举报

发表于 2019-2-22 18:41:54 | 显示全部楼层
像STM32这种内存比较大的可以直接建一个1024的char类型数组,用来存储整个屏幕显示的内容。这样的话可以用SSD1306的整屏连续写入模式每次都直接刷整屏,这样不会看到闪烁
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-22 15:15:03 | 显示全部楼层
那个字符软件选择C51输出,忘了改了
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-3 14:43 , Processed in 0.171600 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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