www.pudn.com > Glcd.rar > Glcd.c
#include "Global.h"
#include "Hzlib.h"
///////////////////////////////////////////////////////////////////////////////
// 内部存储区变量 0~128字节 直接寻址
// 全局变量定义
extern data uchar u8CursorX; // 光标X坐标列
extern data uchar u8CursorY; // 光标Y坐标行
extern data uchar cs; // 显示片选
extern bdata bit reverse; // LCD底色显示控制
//////////////////////////////////////////////////////////////////////////////
// LCD定位,列、行
///////////////////////////////////////////////////////////////////////////////
void GLCD_Locate (uchar u8Column, uchar u8Line)
{
u8CursorX = u8Column;
u8CursorY = u8Line;
}
///////////////////////////////////////////////////////////////////////////////
// LCD延时
///////////////////////////////////////////////////////////////////////////////
void LcdDelay(uchar u32Duration)
{
idata uchar i;
for(i=0;i63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
c1 = fmt[i];
c2 = fmt[i+1];
if(c1 >= 0)
{ // ASCII
LcdInstructionWrite (X_ADRESS + (u8CursorY/ 8),pos);
LcdInstructionWrite (Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=0;k<8;k++)
{
if(reverse)LcdDataWrite(~ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos);
else
LcdDataWrite(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos);
}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos);
LcdInstructionWrite (Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for(k=8;k<16;k++)
{
if(reverse)LcdDataWrite(~ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos);
else
LcdDataWrite(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos);
}
u8CursorX +=8;
}
else
{
// 中文
for(j=0;j63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=8;k<16;k++)
{
if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos);
else
LcdDataWrite(GB_16[j].Msk[k],pos);
}
u8CursorX -=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+1,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=16;k<24;k++)
{
if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos);
else
LcdDataWrite(GB_16[j].Msk[k],pos);
}
u8CursorX +=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=24;k<32;k++)
{
if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos);
else
LcdDataWrite(GB_16[j].Msk[k],pos);
}
u8CursorX +=8;
i++;
}
i++;
}
}
///////////////////////////////////////////////////////////////////////////////
// 显示大字体
///////////////////////////////////////////////////////////////////////////////
void LcdPutDigit (uchar u8Char)
{
idata uchar c1; // 显示字符
idata uchar k;
idata uchar pos; // 显示位置
c1=u8Char;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
LcdDataWrite(0x00,pos);
for (k=0;k<7;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
u8CursorX +=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=7;k<14;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
LcdDataWrite(0x00,pos);
u8CursorX -=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+1,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
LcdDataWrite(0x00,pos);
for (k=14;k<21;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
u8CursorX +=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=21;k<28;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
LcdDataWrite(0x00,pos);
u8CursorX -=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+2,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
LcdDataWrite(0x00,pos);
for (k=28;k<35;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
u8CursorX +=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+2,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=35;k<42;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
LcdDataWrite(0x00,pos);
u8CursorX -=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+3,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
LcdDataWrite(0x00,pos);
for (k=42;k<49;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
u8CursorX +=8;
if(u8CursorX <64){pos=LEFT;cs=1;}
else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}
LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+3,pos);
LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);
for (k=49;k<56;k++)
{
LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos);
}
LcdDataWrite(0x00,pos);
}