本帖最后由 懒猫爱飞 于 2018-10-21 10:10 编辑
这两天从朋友那搞到一块OLED显示屏,是0.96寸,128*64像素,顺便玩了一下,做一下小结
1) 关于OLED 用的是0.96’的,驱动IC是SSD1306
2) 取模软件用的是“字模提取 V2.1 CopyLeft By Horse2000”,如下所示:
图1 软件界面
图
2
取模方式,用的是
C51
取模
关于这个取模方式,简单的说一下,以方便编写驱动程序 下面结合示例进行说明:
图316*16图像纵向取模方式
Ø 每8行为1页,P1,P2分别代表不同的Page
Ø 取模方式是纵向取模,字节倒序,所以先从P1页的第0列,从下到上取模,值为0x01
Ø 当P1页全部取完后,再从P2页的第0列开始取模,一直到P2页的第15列
Ø 如果字节没有倒序,则是从上到下取模,那么P1页第0列的值就变成了0x80
Ø 如果是横向取模,则是一行一行,从左到右取模,这里暂时先不举例
整个图像取完模的数据如下所示:
/*-- 调入了一幅图像:这是您新建的图像 --*/
/*-- 宽度x高度=16x16 --*/
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
1) 关于描点的一些设想
Ø 假设MCU的RAM足够大,那么我们可以开辟一个1K的缓存,用以存储填写的OLED的数据,然后一块刷新到OLED中,例如:tBye oledGram[8][128];
我们设屏左上角为原点,如下图所示:
图4 屏显示布局示意图
Ø 假设A点的坐标为(X1,Y1),那么如果想点亮A点该如何做?
Ø 因为缓存数据已定义为128列,而我们前提是纵向取模,所以主要是找到Y点的位置,并点亮它
Ø 首先,找到Y点处于哪一页 --> yPage = Y / 8,因为每8行为一页,而纵向取模是按页来完成的。
其次找到Y点在该页的位置,就要用到求余运算yBit = Y%8
例如: Y = 25
yPage = 25 /8 = 3,即该点处于第4页(底层驱动是从0开始计数的),
yBit = 25 % 8= 1, 即该点处于第4页第2行(底层驱动是从0开始计数的)
Ø 找到了Y点的具体位置,那么我们就可以对该点进行操作,
例如:定义数据缓存为tByeoledGram[8][128];
#define BV(N) (1<<(N)) // 位移操作
oledGram[yPage][X] |= BV(yBit); // 显示该位
如果要反显,则将该bit位清除:
oledGram[yPage][X] &= ~BV(yBit); // 清除该位
Ø 至此我们可以把描点的函数写出来,如下所示:
#define OLED_XPIXEL_MAX (128)
#define OLED_YPIXEL_MAX (64)
#defineOLED_YPAGE_MAX (OLED_YPIXEL_MAX/8)
typedef tByte unsigned char;
typedeftWorldunsigned short;
typedefenumdisModeDef_t{
REVERSE_DISPLAY= 0, // 反显
NORMAL_DISPLAY, // 正常显示
} disModeDef_T;
// 绘制单个像素点,不改变其它位置数据
voidoled_draw_point(tByte xPixel, tByte yPixel,disModeDef_Tmode)
{
tByte yPage = 0,
tByte yBit = 0;
// 如果超出范围,则直接返回,也可以带返回类型,可以返回错误代码
If((xPixel>= OLED_XPIXEL_MAX )||(yPixel>= OLED_YPIXEL_MAX))
return;
yPage = yPixel / 8;
yBit = yPixel % 8;
if(NORMAL_DISPLAY== mode)
oledGram[yPage][xPixel]|= BV(yBit); //显示该位
else
oledGram[yPage][xPixel] &=~BV(yBit); //清除该位
oled_update_gram(); // 更新OLED数据
}
注意:上面的函数是在word打出来的,还未经实践验证,本文档只讨论理论实现方法。
关于画线
点动成线,线动成面。关于画线的方法,在计算机图形学中已给出了几个方法,今天先不在此总结,回头有空再总结。
下面先附上画线的相关理论知识 1) 几款取模软件
image2lcd32.zip
(732.7 KB, 下载次数: 17)
pctolcd2002.rar
(701.59 KB, 下载次数: 14)
字模软件2.rar
(256.59 KB, 下载次数: 21)
2) 计算机图形理论知识
第3章_点阵图形的基本算法.pdf
(8.26 MB, 下载次数: 28)
此内容由EEWORLD论坛网友懒猫爱飞原创,如需转载或用于商业用途需征得作者同意并注明出处