单片机学习小组
直播中

话多显蠢

9年用户 812经验值
擅长:479461
私信 关注

怎样使用OLED模块显示自己想要的字和图片呢

PCtoLCD2002取模软件有何作用?

怎样使用OLED模块显示自己想要的字和图片呢?

回帖(1)

张秀珍

2022-1-21 15:37:14

一、汉字取模
我们需要先有一个取模软件,我这里演示的是PCtoLCD2002,实际为白嫖软件。
二、使用步骤
1.新建文档

点击文件→新建

之后会弹出这个窗口,输入你想要的尺寸。这里我采取12*12的格式。

之后在模式中选择字符模式
字宽字高调节为12*12 具体尺寸看最开始新建的尺寸
截图时我并没有修改
之后点击选项,弹出这个

在我画蓝线的位置进行修改,点阵索引根据刚才自己设置的规格设置
这是我设置好后的样子

之后就可以在中间的框里输入你想要显示的字

字模就已经取好了。
2.写入程序
找到程序的字符库数组
unsigned char Hzk5[16][12]={
{0x02,0x04,0x80,0x20,0x18,0x87,0x74,0x84,0x04,0x14,0x0C,0x00},
{0x02,0x01,0x08,0x04,0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x00},
{0x48,0x2A,0x98,0x7F,0x28,0x4A,0x10,0xEF,0x08,0xF8,0x08,0x00},
{0x09,0x0B,0x05,0x05,0x0B,0x00,0x08,0x05,0x02,0x05,0x08,0x00},
{0xFE,0x22,0x22,0xFE,0x00,0x08,0x48,0x88,0x08,0xFF,0x08,0x00},
{0x07,0x02,0x02,0x07,0x00,0x00,0x00,0x09,0x08,0x0F,0x00,0x00},
{0x00,0xF9,0x02,0xF8,0x49,0x49,0x49,0x49,0xF9,0x01,0xFF,0x00},
{0x00,0x0F,0x00,0x03,0x02,0x02,0x02,0x02,0x0B,0x08,0x0F,0x00},
{0x20,0x10,0x2C,0x23,0xE0,0x20,0x20,0x23,0xEC,0x10,0x20,0x00},
{0x00,0x08,0x04,0x03,0x00,0x08,0x08,0x08,0x07,0x00,0x00,0x00},
{0x12,0xD2,0xFE,0x91,0x40,0x38,0x00,0xFF,0x00,0x04,0xB8,0x00},
{0x01,0x00,0x0F,0x00,0x08,0x08,0x04,0x04,0x02,0x01,0x00,0x00},
{0x62,0x22,0xBA,0xAA,0xAA,0xAB,0x6A,0x6A,0x3A,0x22,0x62,0x00},
{0x00,0x08,0x0A,0x0A,0x0A,0x07,0x0D,0x0D,0x09,0x08,0x0C,0x00},
{0x62,0x22,0xBA,0xAA,0xAA,0xAB,0x6A,0x6A,0x3A,0x22,0x62,0x00},
{0x00,0x08,0x0A,0x0A,0x0A,0x07,0x0D,0x0D,0x09,0x08,0x0C,0x00},
};

将转换好的字模数组替换到程序源码里的字符库内,一定注意不同尺寸的字符库不是一个数组。并且这里每一个字的数组被分为了两个,所以注意修改数组定义的第一个参数。
之后再在显示函数中使用就可以了,这里一定要注意字对应的x,y坐标,往往两个字之间取2个单位作为间隔。
下面给出我的效果
三、显示图片
照片格式转换
这里需要将我们想要转换的照片进行格式转化,并且转换成像素为128*64以内的大小。
这里我使用的是Img2lcd(提取码:rw4k)
如图

点击左上角的 “打开”,选择我们想要进行转换的照片,将 **“最大宽度和高度”**设置为128和64来匹配我们的oled屏幕,上面的扫描模式不需要我们进行设置,因为 **“输出数据类型”**我们设置的是BMP格式,不同的扫描模式没有区别。
我们还可以看到右侧的图片预览图,通过调整下方的亮度与对比度来调整线条。
最后我们点击上方的保存即可。
BMP图片转换为代码
这里我们还是使用PCtoLCD2002取模软件。

点击那个文件夹图标,选择上我们的BMP照片,之后点击选项,像汉字取模一样进行设置。

生成字模之后,我们需要注意字宽,字高旁边有个图像大小,这里的大小我们需要记住,后面写函数的时候需要用到。
代码
在代码中我们先定义一个数组保存我们的这个字模数据,之后调用库里的绘图函数。
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
  if(y1%8==0)
y = y1/8;
  else
y = y1/8 + 1;
for(y=y0;y {
OLED_SetPos(y,x0);
    for(x=x0;x {
WriteDat(BMP[j++]);
}

可以看到这个函数入口参数有五个,第一个和第二个为一对,代表图片左上角坐标,第三个和第二个为一对,代表右下角坐标,这里的y坐标代表的是第几页,所以参数范围为0-8,根据y在哪一页进行写函数,第五个参数为数组指针,将这些参数正确编写之后就可以让oled进行图片的显示。
下面是样例:
但是因为图片分辨率太小,导致显示效果不佳,但是还是大致能看出效果的。
根据两个图片的延迟、切换,就能够实现gif的显示,还需要大家自己进行尝试了。
总结
OLED显示可以很有趣味显示一些自己想要的东西,这篇文章仅供参考。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分