column |= 0x40; //01xx xxxxSendCommandToLCD(column);
}
//设定显示开始行--XX
void SetStartLine(uchar startline) //0--63
精选
{
//startline &= 0x07;
startline |= 0xc0; //1100 0000
SendCommandToLCD(startline);
}
//开关显示
void SetOnOff(uchar onoff)
{
onoff|=0x3e; //0011 111x
SendCommandToLCD(onoff);
}
/*-----------------------------------------------------------*/
//选择屏幕
精选
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(uchar screen)
{ //显示器:负有效 CS1: 0--右; CS2: 0--左
switch(screen)
{
case 0:
CS1=0;//全屏
nop();
CS2=0;
nop();
break;
case 1:
CS1=1;//左屏
精选
nop();
CS2=0;
nop();
break;
case 2:
CS1=0;//右屏
nop();
CS2=1;
nop();
break;
default:
break;
}
精选
}
/*------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
SetLine(i);
for(j=0;j<;j++)
{
精选
SetColumn(j);
WriteByte(0x00);
}
}
}
/*-------------------------------------------------------------*/
//显示8*8点阵
//lin:行(0-7), column: 列(0-127)
//address : 字模区首地址
void Show8x8(uchar lin,uchar column,uchar *address)
{
uchar i;
//if(column>128) {return;}
精选
if(column<)
{
SelectScreen(1); //如果列数<则从第一屏上开始写
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++)
{
if(column+i<)
{
WriteByte(*(address+i));
}
else
{
精选
SelectScreen(2);
SetLine(lin);
SetColumn(column-+i);
WriteByte(*(address+i));
}
}
}
else
{
SelectScreen(2); //否则从第二屏上开始写
column-=; //防止越界
SetLine(lin);
SetColumn(column);
精选
for(i=0;i<8;i++)
{
if(column+i<)
{
WriteByte(*(address+i));
}
else
{
SelectScreen(1);
SetLine(lin);
SetColumn(column-+i);
WriteByte(*(address+i));
}
精选
}
}
}
/*-------------------------------------------------------------*/
//显示汉字16*16
void ShowChina(uchar lin,uchar column,uchar num)
{
uchar *address;
//if(lin>7 || column>127){return;}
address = &HZcode[num][0];
Show8x8(lin,column,address);
Show8x8(lin,column+8,address+8);
Show8x8(lin+1,column,address+16);
精选
Show8x8(lin+1,column+8,address+24);
}
/*------------------------------------------------------------*/
void InitLCD(void) //初始化LCD
{
uchar i=2000; //延时
while(i--);
SetOnOff(1); //开显示
ClearScreen(1);//清屏
ClearScreen(2);
SetStartLine(0); //开始行:0
}
/*-------------------------------------------------------------*/
精选
/*------------------------------------------------------------*/
//显示图片
//lin:行(0-7), column: 列(0-127)
//high:高度, width:宽度(要为8的倍数)
//address : 图片区首地址
void ShowPicture(uchar lin, uchar column, uchar high, uchar width, uchar *address)
{
uchar i, j;
//if(column>128) {return;}
if(column<)
{
for(j=0;j{精选
SelectScreen(1); //如果列数<则从第一屏上开始写
SetLine(lin);
SetColumn(column);
for(i=0;i{if(i+column>127)
break;
if(column+i<)
{
WriteByte(*(address+i));
}
else
{
精选
SelectScreen(2);
SetLine(lin);
SetColumn(column-+i);
WriteByte(*(address+i));
}
}
lin+=1;
address+=width;
}
}
else
{
column-=; //防止越界
精选
for(j=0;j{SelectScreen(2); //否则从第二屏上开始写
SetLine(lin);
SetColumn(column);
for(i=0;i{if(i+column>)
break;
if(column+i<)
{
WriteByte(*(address+i));
}
精选
else
{
SelectScreen(1);
SetLine(lin);
SetColumn(column-+i);
WriteByte(*(address+i));
}
}
lin+=1;
address+=width;
}
}
}
精选