OLED_12896_GR_Lib函数是用来在开发板上的OLED显示器上绘制基本图形的函数。包括画点、线、圆、矩形框等一系列函数。虽然该函数是以开发板上的OLED显示器为原型设计的,但是其硬件相关的函数只占一小部分,简单修改后可用在其他显示器上。
一 函数构架
开发板上的OLED显示器采用的是采用SPI接口连接的,这种显示器在SPI接口下数据只能单向传输,即只能写数据,不能读数据。而其最小写入单位一个字节控制两个像素。因此,为了在写入新的像素的时候,不影响其他没有用到的像素,我们必须知道当前要改写的字节的值。在无法读取数据的情况下,只能采用在内存中建立显示缓冲区的方式来实现。当然,这需要一定的内存开销,大概是6K多一点。这在微控制器的内存中也算是不小的开销了,不过如果不使用显示器的灰度显示的话用一位来表示一个像素,这个数据就会下降到1.5K,基本上大家都可以接受了吧。
基本绘制方式是,绘制函数先在数据缓冲区模拟绘制图形,然后再将所影响的像素写入OLED显示器(本来我想使用DMA来刷新显示器的,可惜8962好像不带DMA功能)。
好了,现在先说说这个函数的基本构架吧:
1、 基本变量
基本变量是指对几乎所有函数有影响全局变量,现已确定以下几个变量:
P_Cursor_X 图形模式下光标的横坐标;
P_Cursor_Y 图形模式下光标的纵坐标;
T_Cursor_X 文本模式下光标的横坐标;
T_Cursor_Y 文本模式下光标的纵坐标;
2、 基本函数(硬件相关)
_PSET(x,y,color) 在x,y坐标位置画一个点,颜色(灰度)由color指定;
_LINEH(x1,y1,x2,y2,color) 要求y1=y2,绘制一条水平横线,采用水平自动增量写入数据,颜色由color指定;
_LINEV(x1,y1,x2,y2,color) 要求x1=x2,绘制一条垂直竖线,采用垂直自动增量写入数据,颜色由color指定。
3、 函数介绍及实现方法(以下函数均与硬件无关,调用前面函数来实现)
PSET函数
函数原型:void PSET(x,y,color);
用来在x,y坐标位置绘制一个点,颜色由color指定;
实现方法:调用_PSET来实现。
LINE函数
函数原型:void LINE(x1,y1,x2,y2,color);
绘制一条从x1,y1到x2,y2的直线,颜色由color指定;
实现方法:如果y1=y2,则调用_LINEH函数来实现,如果x1=x2,则调用_LINEV函数来实现,其他情况调用_PSET函数逐点绘制。
BOX函数
函数原型:void BOX(x1,y1,x2,y2,B/F,color);
以x1,y1;x2,y2为对角顶点坐标,绘制一个矩形。
当指定B时绘制矩形外框,当指定F时,填充矩形区域;
实现方法:当指定B时,分别用_LINEH和_LINEV函数来绘制矩形的四条外框线;当指定F时,调用_LINEH函数逐行填充矩形框。
CIRCLE函数
函数原型:void CIRCLE(x,y,r,s,C/F,color);
以x,y为圆心,r为横向半径,绘制一个纵横比为s的椭圆,当s=1时即为圆。
当指定C时,绘制椭圆外框,当指定F时,填充整个椭圆区域。
实现方法:当指定C时,从0~180°和0~-180°分别绘制上下两个半圆弧,调用_PSET成对画点;当指定F时,从0~180°和0~-180°中每对点用_LINEV函数逐行填充。
ARC函数
函数原型:void ARC(x,y,r,s,s_d,f_d,color);
函数功能:以x,y为圆心,r为横向半径,s为纵横半径比,绘制一条从s_d角度到f_d角度的椭圆弧,颜色由color指定;
实现方法:调用_PSET函数逐点绘制。
CLS函数
函数原型:void CLS(color);
函数功能:清屏函数,当然,不仅仅将屏幕清除成黑色,还可以指定清屏后屏幕的颜色。
目前准备实现的函数就这些,字符处理的函数(已确定有locate函数和print函数)稍后实现。