📄 lcd.c.bak
字号:
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe
};
unsigned char ASCII90[2016];
unsigned char line0=0,column0,startline0;
unsigned char curse=0;
/*--基本函数源程序------------------------------------------------------------------------------------*/
//延时
void Lcd12864delay()
{
unsigned char i=200;
while(i--) {;}
}
//初始化LCD
void InitLCD(void)
{
SelectScreen(0);
SetOnOff(0); //关显示
ClearScreen(1);//清屏
ClearScreen(2);
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
SetStartLine(0); //开始行:0
Change90();
}
/*----------------------------------------------------------------------------------------------------*/
//状态检查
void CheckState()
{
unsigned char dat;
rPCOND= 0x0;
RS_L();
RW_H();
do{
EN_H();
dat=rPDATD;
EN_L();
dat=0x80 & dat; //仅当
}while(!(dat==0x00));
}
/*----------------------------------------------------------------------------------------------------*/
//写显示数据
//dat:显示数据
void WriteByte(unsigned char dat)
{
unsigned char dat1;
dat1=dat;
CheckState();
rPCOND= 0x5555;
RS_H();
RW_L();
rPDATD=dat1;
EN_H();
Lcd12864delay();
EN_L();
}
/*-----------------------------------------------------------------------------------------------------*/
//向LCD发送命令
//command :命令
void SendCommandToLCD(unsigned char command)
{
unsigned char command1;
command1=command;
CheckState();
rPCOND= 0x5555;
RS_L();
RW_L();
rPDATD=command1;
EN_H();
Lcd12864delay();
EN_L();
}
/*----------------------------------------------------------------------------------------------------*/
//设定行地址(页)--X 0-7
void SetLine(unsigned char line)
{
unsigned char line1;
line1=line;
line1=line1 & 0x07; // 0<=line<=7
line1=line1|0xb8; //1011 1xxx
SendCommandToLCD(line1);
}
//设定列地址--Y 0-63
void SetColumn(unsigned char column)
{
unsigned char column1;
column1=column;
column1=column1 &0x3f; // 0=<column<=63
column1=column1 | 0x40; //01xx xxxx
SendCommandToLCD(column1);
}
//设定显示开始行--XX
void SetStartLine(unsigned char startline)
//0--63
{
unsigned char startline1;
startline1=startline;
startline1=startline1 &0x3f;
startline1=startline1 | 0xc0; //1100 0000
SendCommandToLCD(startline1);
}
//开关显示
void SetOnOff(unsigned char onoff)
{
unsigned char onoff1;
onoff1=onoff;
onoff1=0x3e | onoff1; //0011 111x
SendCommandToLCD(onoff1);
}
/*---------------------------------------------------------------------------------------------------*/
//选择屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(unsigned char screen1)
{
//正有效 cs1: 1--左; cs2: 1--右
unsigned char screen2;
screen2=screen1;
if(screen2==0)
{
CS1_H();//全屏
CS2_H();
}
else if(screen2==1)
{
CS1_H();//左屏
CS2_L();
}
else
{
CS1_L();//右屏
CS2_H();
}
}
/*---------------------------------------------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(unsigned char screen)
{
unsigned char screen1;
unsigned char i,j;
screen1=screen;
SelectScreen(screen1);
for(i=0;i<8;i++)
{
SetLine(i);
for(j=0;j<64;j++)
{
WriteByte(0x00);
}
}
}
unsigned char ShowChar(unsigned char lin,unsigned char column,char character)
{
unsigned char i;
unsigned char lin1;
unsigned char column1;
char character1;
column1=column;
lin1=lin;
character1=character;
if(column1>16)
{
return;
}
if(column1<8)
{
SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
}
else
{
SelectScreen(2);
}
//否则 (8,9,10,11,12,13,14,15)写在第二屏上
column1=column1 & 0x07; //防止越界
SetLine(lin1);
SetColumn(column1<<3);
for(i=0;i<8;i++)
{
WriteByte(ASCII90[character1*16+2*i]);
}
SetLine(lin1+1);
SetColumn(column1<<3);
for(i=0;i<8;i++)
{
WriteByte(ASCII90[character1*16+i*2+1]);
}
}
unsigned char ShowString(unsigned char lin,unsigned char column,char *character)
{
//line0=lin;
//column0=column;
while(*character)
{
if(*character=='\n')
{
SetLine(lin+2);
}
ShowChar(lin,column,*character);
SetLine(lin+1);
SetColumn((column++)<<3);
character++;
}
}
/*void Slcd_Printf(unsigned char *fmt,unsigned char lin,unsigned char column)
{
va_list ap;
unsigned char string[16];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
ShowString(lin,column,string);
va_end(ap);
//Reflash_LCD();
}*/
void Change90()
{
unsigned char i,j,m,character;
unsigned char aa[8][8],bb[8][8],a[8],b[8];
for(character=32;character<128;character++)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
aa[i][j]=((Ascii[character*16+i*2])>>j)&0x1;
bb[i][j]=((Ascii[character*16+i*2+1])>>j)&0x1;
}
}
for(m=0;m<8;m++)
{
a[m]=(aa[0][7-m])*1+(bb[0][7-m])*2+(aa[1][7-m])*4+(bb[1][7-m])*8
+(aa[2][7-m])*16+(bb[2][7-m])*32+(aa[3][7-m])*64+(bb[3][7-m])*128 ;
b[m]=(aa[4][7-m])*1+(bb[4][7-m])*2+(aa[5][7-m])*4+(bb[5][7-m])*8
+(aa[6][7-m])*16+(bb[6][7-m])*32+(aa[7][7-m])*64+(bb[7][7-m])*128 ;
ASCII90[2*m+character*16]=a[m];
ASCII90[2*m+1+character*16]=b[m];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -