μC/GUI在MSGl9264液晶上的移植

[09-12 17:52:10]   来源:http://www.88dzw.com  单片机学习   阅读:8526

文章摘要:static void_SetPixel(int x,int y,LCD_PIXELINDEX c) {//画点函数U8 Mask=1<<(y&7); //屏蔽字int Adr=XY20FF(x,y); //由x,y的绝对位置得到Cache中的相对位置//XY20FF(x,y)可被定义为((y>>3)+x×((64+7)>>3))U8 CacheByte=Cache[Adrl; //获得显示RAM的数值if(c) //根据颜色修改显示RAM的值CacheBytel=Mask; //对应位“置1”elseCacheByte&=~Mask; //对应位

μC/GUI在MSGl9264液晶上的移植,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
static void_SetPixel(int x,int y,LCD_PIXELINDEX c) {

//画点函数

U8 Mask=1<<(y&7); //屏蔽字

int Adr=XY20FF(x,y); //由x,y的绝对位置得到

Cache中的相对位置

//XY20FF(x,y)可被定义为((y>>3)+x×((64+7)>>3))

U8 CacheByte=Cache[Adrl; //获得显示RAM的数值

if(c) //根据颜色修改显示RAM的值

CacheBytel=Mask; //对应位“置1”

else

CacheByte&=~Mask; //对应位清零

LCD_WRITE(Adr,CacheByte);

//把CacheByte写入液晶显存并更改

Cache[Adr]的值为CacheByte

}

函数的参数x,y代表要画点的位置(x为横坐标,y为纵坐标),参数c代表要画点的颜色。在函数内部,U8为μC/GUI提供的数据格式(相当于unsigned char),Mask为屏蔽字,Adr为x,y对应显示Cache的地址。

以把液晶的(5,5)处点亮为例,此时x=5,y=5,c=1,可计算出Mask=00100000,Adr=40(表示在Cache[40]处存有(5,5)点的颜色值)。由于c=1,所以应把Cache[40]中对应位“置1”,这是通过CacheByte的值“或”上Mask的值00100000实现的。最后通过调用LCD_WRITE函数把得到的新CacheByte值写入液晶对应的地址即可点亮该点。类似地,若要使某点不亮(c=0),则应该把对应位“清零”,这可以通过CacheByte&=~Mask这条命令实现。

画点函数中调用的LCD_Write函数可如下实现:

static void LCD_Write(int Adr,U8 Byte){

if(CacheIAdrl!=Byte){ //若写入值与原值不符则

把写入值保存到显示RAM中

Cache[Adr]=Byte;

if(LCD_Adr!=Adr){

LCD_SETADR(Adr); //设置液晶的起始行、起始列和CSA、CSB

}

LCD_WRITEl(Bytc);

}}

由于此液晶由三块64x64的液晶组成,LCD_SETADR函数除了设置液晶的起始行、起始列外还应根据Adr的值设置CSA和CSB的值,才能写到对应的液晶屏上。此外,在LCD_WRITEl()函数中通过调用LCDConf.h文件中的LCD_WRITE_A1()和LCD_WRITE_A0()实现液晶显示。

除了_SetPixel()函数,基本函数还包括_GetPixel()函数和XorPixel()函数。_GetPixel()函数可以返回指定点的颜色信息,XorPixel()则可以对指定点颜色取反,实现“反白”的效果。由于这两个函数较简单,这里不再给出具体代码。

以函数_SetPixel()、_GetPixel()和XorPixel()为基础,结合MSGl9264液晶的7种指令就可以实现表1所给的硬件接口函数,以此构成了LCD驱动文件。

表1 RS和R/W的功能

RSR/W

功 能

00写命令
01读液晶状态(主要用于判忙)
10写液晶的显示RAM数据
11读液晶的显示RAM数据

上一页  [1] [2] [3] [4]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行