📄 lcd.h
字号:
//sbit DI=PB^0;
void Set_DI(uchar i)
{if(i==1) PORTB=PORTB|0x01;
else PORTB=PORTB&0xfe;}
//sbit RW=PB^1;
void Set_RW(uchar i)
{if(i==1) PORTB=PORTB|0x02;
else PORTB=PORTB&0xfd;}
//sbit ENABLE=PB^2;
void Set_EN(uchar i)
{if(i==1) PORTB=PORTB|0x04;
else PORTB=PORTB&0xfb;}
//sbit CS1=PB^3;
void Set_CS1(uchar i)
{if(i==1) PORTB=PORTB|0x08;
else PORTB=PORTB&0xf7;}
//sbit CS2=PC^6;
void Set_CS2(uchar i)
{if(i==1) PORTC=PORTC|0x40;
else PORTC=PORTC&0xbf;}
//sbit RST=PC^7;
void Set_RST(uchar i)
{if(i==1) PORTC=PORTC|0x80;
else PORTC=PORTC&0x7f;}
//延时//
void Delay(uint i)
{uint j;
for(;i!=0;i--)
for(j=5000;j!=0;j--) {;}
}
void nop(uchar i)
{for(;i!=0;i--)
NOP();
}
// 显示开关控制命令,i=0开显示,i=1关显示//
void DisplayOnOff(uchar i)
{uchar j;
Set_RW(0);// RW=0;
Set_DI(0);//DI=0;
Set_EN(0);//ENABLE=0;
PORTA=62+i;//P0=0x3e+i;
nop(10);//_nop_();
Set_EN(1);//ENABLE=1;
nop(10);//_nop_();
nop(10);//_nop_();
Set_EN(0);//ENABLE=0;
// Delay(1);
}
//设置显示起始行,i=0~63//
void SetStartLine(uchar i)
{Set_RW(0);//RW=0;
Set_DI(0);//DI=0;
Set_EN(0);//ENABLE=0;
PORTA=0xc0+i;//P0=0xc0+i;
nop(10);//_nop_();
Set_EN(1);//ENABLE=1;
nop(10);//_nop_();
nop(10);//_nop_();
Set_EN(0);//ENABLE=0;
// Delay(1);
}
//设置页(行)地址,i=0~7//
void SetX(uchar i)
{Set_RW(0);//RW=0;
Set_DI(0);//DI=0;
Set_EN(0);//ENABLE=0;
PORTA=0xb8+i;//P0=0xb8+i;
nop(10);//_nop_();
Set_EN(1);//ENABLE=1;
nop(100);// _nop_();
nop(100);//_nop_();
Set_EN(0);//ENABLE=0;
// Delay(1);
}
//设置Y(列)地址,i=0~127//
void SetY(uchar i)
{Set_RW(0);//RW=0;
Set_DI(0);//DI=0;
Set_EN(0);//ENABLE=0;
PORTA=0x40+i;// P0=0x40+i;
nop(10);//_nop_();
Set_EN(1);//ENABLE=1;
nop(10);//_nop_();
nop(10);// _nop_();
Set_EN(0);//ENABLE=0;
//Delay(1);
}
//读状态//
//返回值:DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
//返回值:BF,0,ON/OFF,RST,0,0,0,0
/*ucharReadStatus(void)
{uchardata i;
RW=1;
DI=0;
ENABLE=1;
i=P0;
return i;
}*/
//写显示数据,i为送DDRAM的数据
void WriteByte(uchar i)
{Set_RW(0);//RW=0;
Set_DI(1);//DI=1;
Set_EN(0);//ENABLE=0;
PORTA=i;//P0=i;
nop(10);//_nop_();
Set_EN(1);//ENABLE=1;
nop(10);//_nop_();
nop(10);//_nop_();
Set_EN(0);//ENABLE=0;
//Delay(1);
}
//读显示数据处理
/*ucharReadData(void)
{uchar i;
RW=1;
DI=0;
ENABLE=1;
i=P0;
return i;
}*/
//LCD复位//
void Reset(void)
{Set_RST(0);//RST=0;
Delay(1);
Set_RST(1);//RST=1;
//Delay(1);
}
void ClearScreen(uchar k)
{uchar i,j;
Set_CS1(1);//CS1=1;
Set_CS2(1);//CS2=1;
for(i=k;i<8;i+=1)
{SetX(i);
for(j=0;j<64;j++)
WriteByte(0x00);
}
}
//LCD初始化//
void InitLCD(void)
{Reset();
Delay(0);
ClearScreen(0);
DisplayOnOff(1);
SetStartLine(0);
}
void WriteWord(uchar const *disp,uchar x,uchar y,uchar cs)
{uchar i;
if(cs==1) {Set_CS1(1);Set_CS2(0);}
else {Set_CS1(0);Set_CS2(1);}
SetX(x);
SetY(y);
for(i=0;i<16;i++)
{WriteByte(*disp);
disp++;}
SetX(x+1);
SetY(y);
for(i=0;i<16;i++)
{WriteByte(*disp);
disp++;}
}
void WriteCharacter(const uchar *disp,uchar x,uchar y,uchar cs)
{uchar i;
if(cs==1) Set_CS1(1);//CS1=1;
else Set_CS2(1);//CS2=1;
SetX(x);
SetY(y);
for(i=0;i<8;i++)
{WriteByte(*disp);
disp++;}
SetX(x+1);
SetY(y);
for(i=0;i<8;i++)
{WriteByte(*disp);
disp++;}
}
/*
void DisplayLine1(uchar i)
{WriteWord(Wo,i,0,2);
WriteWord(Ting,i,16,2);
WriteWord(Jian,i,32,2);
WriteWord(Ni,i,48,2);
WriteWord(De,i,0,1);
WriteWord(Sheng,i,16,1);
WriteWord(Yin,i,32,1);
WriteWord(You,i,48,1);}
void DisplayLine2(uchar i)
{WriteWord(Zhong,i,0,2);
WriteWord(Te,i,16,2);
WriteWord(Bie,i,32,2);
WriteWord(De,i,48,2);
WriteWord(Gan,i,0,1);
WriteWord(Jue,i,16,1);}*/
void WritePIC(const uchar *disp)
{uchar ii=0;
uchar jj=0;
uchar kk=0;
SetX(0);
SetY(0);
for(ii=0;ii<8;ii++)
{for(kk=0;kk<64;kk++)
{Set_CS1(0);//Select Left Screen
Set_CS2(1);
SetX(ii);
SetY(kk);
WriteByte(*disp);
disp++;}
for(kk=0;kk<64;kk++)
{Set_CS1(1);//Select Left Screen
Set_CS2(0);
SetX(ii);
SetY(kk);
WriteByte(*disp);
disp++;}}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -