第5节 LCD驱动功能接口程序(LCD_Dis)
推荐给好友
打印
加入收藏
更新于2009-04-21 15:51:43

LCD驱动功能接口程序主要包括两大类:

  • 基本绘图功能函数:绘点、直线、矩形、矩形框、圆形、圆框等;
  • 字符显示功能函数:西文字符显示、西文字符串显示、中文字符显示;

这些功能接口程序都是基于前面介绍的绘点函数的,其实,这样的做法并不是很高效,可以说是利用软件而牺牲了硬件的速度;但主要考虑到普通的人机界面程序要求的并不是非常快,只要在人眼能反映过来的时间里完成显示的刷新就可以了,而且主要考虑了移植性、可读性,才选用了这样的程序架构。

一般LCD模块都会提供了这样或者那样的特性,以便于MCU对其的显示控制,但通常都是每种LCD模块都会有自己的一套特殊功能;所以想要编写最高效的LCD驱动程序的,就不心参考本书所介绍的架构了,直接根据每个LCD屏的特性来编写;不过现在常用的MCU性能已经不同于原始的MCS51了,利用一下软件牺牲一下硬件也何偿不可。

3.5.1. 基本绘图功能函数
在我们提供的MzL02的通用版LCD驱动程序当中,基本绘图功能函数一共提供了如下几个:
绘点:PutPixel
绘直线:Line
绘矩形(框):Rectangle

而鉴于圆形(框)绘制的功能极少用到,将这块的代码裁减掉了,感兴趣的朋友可以参考MzDesign为其它的LCD模块所提供的驱动程序。
绘点程序的代码如下:


绘点程序非常简单,就是直接调用了在前些节中介绍的绘点函数;这里只不过重新作一下包装,统一下一函数接口。

不过,在代码中可以看到有一个屏蔽掉的函数:Writ_Dot,它就是我们前面所说的实现坐标变换功能的软绘点子程序,这个函数中与LCD驱动配置头文件里的坐标轴相关的定义有在联,实现了在软件上的坐标轴变换处理。

绘直线程序是基于绘点函数的,依据的是直线起始坐标位置算出的斜率,然后从起点开始一个点一个点的绘制。源码如下:


在绘直线的子程序里面,首先会对起始点和结束点的坐标值进行判断,以便统一从x轴由小到大的方向绘直线上的点;然后计算直线的起始点和结束点相对的偏移值,并绘制起始点。假设直线的相对斜率K=offset_x/offset_y,同在后续的代码当中会判断K值是否大于1,并据此选择以X轴还是以Y轴为基准绘制直线;在绘制直线的过程中,实际上就是从起始点开始一个点一个点的绘制,每个绘制的点的位置都是紧随着上一个绘制的点的位置依据K值的计算而得出的,程序中使用的是简化的算法,如果不太理解的话,建议自行将假设的起始点和结束点的值代入程序中,心算一下。

在上面的代码当中,利用LCD驱动配置头文件中的定义Dis_X_MAX和Dis_Y_MAX限制X和Y轴的范围,以防止绘直线过程中直线超出LCD的显示范围。

矩形绘制程序则是基于绘制直线函数的,代码如下:



绘制矩形的程序较简单,这里不作过多的分析了。
调用该程序时需要传递进来矩形的左上角的坐标值以及右下角的坐标值,还有要绘制的类形:Mode,包括矩形框和矩形块。

绘图设置子程序
在前面介绍的三个绘图功能接口程序当中,实际上有一个全局的变量是很重要的:BMP_Color;它管控着绘图的前景色,其实对于单色的LCD模块无非就是黑与白的区分,只不过为了扩展通用版的驱动程序应用于彩色LCD模块上,所以使用了一个变量来表示,它可以通过一个接口函数来进行设置,如下:


在整个LCD的驱动程序当中,Mode并没有使用到,仅仅是为了保留功能的扩展。

关于数据类型
从前面的程序可看出,使用的基本上是unsigned char(即上述程序中的LCDBYTE、DOTBYTE)型数据;其实是为了针对MCS51的系列MCU而修改的,仅仅是为了减少RAM的占用;所以这版的LCD通用版驱动程序会与其它的稍稍有些不太一样,希望读者理解,反正本书所介绍的并不在于某一个驱动程序,而真正的目的在于介绍一种编程的思想和方法。

3.5.2. 字符显示功能函数
MzL02模块的通用版LCD驱动程序提供了ASCII西文字符显示以及中文字符的显示控制函数接口,在驱动程序当中直接集成了ASCII西文字符库,而中文字符需要用户在使用时自行利用字模提取工具按需提取。在这一节,将只简单介绍有关字符显示的三个函数,在下一节当中会从字符显示的原理出发分析点阵LCD的字符显示原理。

驱动程序当中,提供了三个有关字符显示控制的函数,如下:

  • 字体选择设置函数:FontSet;
  • 字符覆盖模式设置函数:FontMode;
  • 单个字符显示函数:PutChar;
  • 字符串显示函数:PutString;

以上三个函数当中,字符串显示函数只能实现ASCII码即西文字符串的显示,对中文是无效的;而PutChar函数即可用于ASCII西文字符显示,也可用于用户定义好的中文字符显示,或者是图形显示。

字符的显示实际上还需要有字符的字模库才可以实现,在驱动程序当中配备了两个字库文件,分别是LCD_ASCII(ASCII码西文字符库字模集)、GB_Table(留给用户进行中文字符字模定义用的)。

有关字符显示的功能函数,将在下一节作出详细的分析。

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.