📄 lcdcon.c
字号:
uchar WriteData(uchar Data) //写数据
{
if(TestSta(3)==0)
return 1;
LCDDATADR = Data;
return 0;
}
/*
uchar ReadData() //读数据
{
if(TestSta(1)==0)
return 1;
return LCDDATADR;
}
*/
void SetPos(uchar row, uchar col)//设置当前地址
{
uint iPos;
iPos = row * 20 + col;
WriteDoubParm(LC_ADD_POS,iPos & 0xFF,iPos / 256);
gCurRow = row;
gCurCol = col;
}
/*
void at(unsigned char x,unsigned char y)//设定文本x,y 值
{
uint iPos; //地址
iPos = x + y* 20;
WriteDoubParm(LC_ADD_POS,iPos&0xff,iPos/256);
tCurRow = x;
tCurCol = y;
}
*/
// 清屏
void cls(void)
{
uint i;
WriteDoubParm(LC_ADD_POS,0x00,0x00); // 置地址指针
WriteCom(LC_AUT_WR); // 自动写
for(i=0;i<0x0F00;i++)
{
TestSta(3);
WriteData(0x00); // 写数据
}
WriteCom(LC_AUT_OVR); // 自动写结束
WriteDoubParm(LC_ADD_POS,0x00,0x00); // 重置地址指针
gCurRow = 0; // 置地址指针存储变量
gCurCol = 0;
}
uchar InitLcd()
{
P1_0=0;
P1_0=1;
WriteDoubParm(LC_TXT_STP,0x00,0x00); //文本显示区首地址
WriteDoubParm(LC_TXT_WID,0x14,0x00); //文本显示区宽度
WriteDoubParm(LC_GRH_STP,0x00,0x00); //图形显示区首地址
WriteDoubParm(LC_GRH_WID,0x14,0x00); //图形显示区宽度
WriteSigParm(LC_CGR_POS,CGRAMSTART >> 11); //设置便宜寄存器
WriteCom(LC_CUR_SHP | 0x07); //光标形状
WriteCom(LC_MOD_OR); //显示模式
WriteCom(LC_DIS_SW |0x08); //显示开关
grhome = GRSTART;
txthome = TXTSTART;
return 0;
}
uchar dprintf(uchar x,uchar y,char *string,uchar mod)//ASCII(8*16)与汉字(16*16)显示
{
char c1,c2,cData;
uint i=0,j,len;
uchar k;
len=strlen(string);
while(i<len)
{
c1 = string[i];
c2 = string[i+1];
SetPos(y,x/8);
if(c1 >= 0)
{
// ASCII
if(c1 < 0x20)
{
switch(c1)
{
case CR:
case LF: // 回车或换行
i++;
x=0;
if(y < 112)y+=HZ_CHR_HEIGHT;
continue;
case BS: // 退格
i++;
if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
cData = 0x00;
break;
}
}
for(j=0;j<ASC_CHR_HEIGHT;j++)
{
if(c1 >= 0x1f)
{
cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
if(mod == 0)
cData = ~cData;
SetPos(y+j,x/8);
if((x%8)==0)
{
WriteCom(LC_AUT_WR); // 写数据
WriteData(cData);
WriteCom(LC_AUT_OVR);
}
}
SetPos(y+j,x/8);
}
if(c1 != BS) // 非退格
x+=ASC_CHR_WIDTH;
}
else
{ // 中文
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
{
if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
break;
}
for(k=0;k<HZ_CHR_HEIGHT;k++)
{
SetPos(y+k,x/8);
if(j < sizeof(GB_16)/sizeof(GB_16[0]))
{
c1=GB_16[j].Msk[k*2];
c2=GB_16[j].Msk[k*2+1];
}
else
c1=c2=0;
if(mod == 0)
{
c1 = ~c1;
c2 = ~c2;
}
WriteCom(LC_AUT_WR);
WriteData(c1);
WriteCom(LC_AUT_OVR);
WriteCom(LC_AUT_WR);
WriteData(c2);
WriteCom(LC_AUT_OVR);
}
x+=HZ_CHR_WIDTH;
i++;
}
i++;
}
return len;
}
/*
void SetShowMode(uchar ShowMod)//设置显示模式
{
ShowModeSW=ShowMod;
WriteCom(LC_DIS_SW |ShowMod);
}
void Pixel(uchar PointX,uchar PointY,bit mod)//画点函数
{
unsigned char StartAddr;
unsigned char dat;
StartAddr=7-(PointX%8);
dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
if(mod)
dat=dat|0x08;
SetPos(PointY,PointX/8);
WriteCom(LC_BIT_OP|dat); // 写数据
}
void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit mod)//画线函数
{
unsigned char x,y;
float k,b;
if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
{
k=((float)y2-y1) / ((float)x2-x1) ;
b=y1-k*x1;
if( x1 <= x2 )
{
for(x=x1;x<=x2;x++)
{
y=(uchar)(k*x+b);
Pixel(x, y, mod);
}
}
else
{
for(x=x2;x<=x1;x++)
{
y=(uchar)(k*x+b);
Pixel(x, y, mod);
}
}
}
else // abs(y1-y2) > abs(x1-x2) |K|>1
{
k=((float)x2-x1) / ((float)y2-y1) ;
b=x1-k*y1;
if( y1 <= y2 )
{
for(y=y1;y<=y2;y++)
{
x=(uchar)(k*y+b);
Pixel( x , y, mod);
}
}
else
{
for(y=y2;y<=y1;y++)
{
x=(uchar)(k*y+b);
Pixel( x , y, mod);
}
}
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -