📄 lcd128x64.c
字号:
void CheckState() //状态检查,LCD是否忙?
{
unsigned char dat;
RS=0;
RW=1;
do{
Dataport=0x00;
EN=1;
dat=Dataport;
EN=0;
dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
}while(!(dat==0x00));
}
void SendCommandToLCD(unsigned char command) //写命令到LCD中
{
CheckState();
RS=0; //向LCD发送命令
RW=0;
Dataport=command; //command :命令
EN=1;
EN=0;
}
void SetLine(unsigned char page) //设置页 0xb8是页的首地址
{
page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
SendCommandToLCD(page);
}
void SetStartLine(unsigned char startline) //设定显示开始行,0xc0是行的首地址
{
startline=0xc0|startline; //1100 0000
SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
}
void SetColumn(unsigned char column) //设定列地址--Y 0-63 ,0x40是列的首地址
{
column=column &0x3f; //column最大值为64,越出 0=<column<=63
column= 0x40|column; //01xx xxxx
SendCommandToLCD(column);
}
void SetOnOff(unsigned char onoff) //开关显示,0x3f是开显示,0x3e是关显示
{
onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
SendCommandToLCD(onoff);
}
void WriteByte(unsigned char dat) //写显示数据
{
CheckState();
RS=1;
RW=0;
Dataport=dat;//dat:显示数据
EN=1;
EN=0;
}
void SelectScreen(unsigned char screen) //选择屏幕screen: 0-全屏,1-左屏,2-右屏
{
switch(screen)
{ case 0: cs1=0;//全屏
_nop_(); _nop_(); _nop_();
cs2=0;
_nop_(); _nop_(); _nop_();
break;
case 1: cs1=0;//左屏
_nop_(); _nop_(); _nop_();
cs2=1;
_nop_(); _nop_(); _nop_();
break;
case 2: cs1=1;//右屏
_nop_(); _nop_(); _nop_();
cs2=0;
_nop_(); _nop_(); _nop_();
break;
}
}
void ClearScreen(unsigned char screen) //清屏screen: 0-全屏,1-左屏,2-右
{
unsigned char i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //控制页数0-7,共8页
{
SetLine(i);
SetColumn(0);
for(j=0;j<64;j++) //控制列数0-63,共64列
{
WriteByte(0x00); //写点内容,列地址自动加1
}
}
}
void InitLCD() //初始化LCD
{
CheckState();
SelectScreen(0);
SetOnOff(0); //关显示
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
ClearScreen(0);//清屏
SetStartLine(0); //开始行:0
}
//显示全角汉字
void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
int i; //选屏参数,page选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
}
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
}
}
//反显示全角汉字
void DisplayRev(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
int i; //选屏参数,page选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(~Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
}
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(~Hzk[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
}
}
//显示半角汉字和数字和字母
void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
int i; //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(Ezk[i+16*number]);
}
SetLine(page+1); //写下半页
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(Ezk[i+16*number+8]);
}
}
//反显示半角汉字和数字和字母
void DisplayenRev(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
int i; //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(~Ezk[i+16*number]);
}
SetLine(page+1); //写下半页
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(~Ezk[i+16*number+8]);
}
}
void DisplayC(unsigned char x,unsigned char y,unsigned char number,unsigned char abn)
{
if((x<128)&&(y<64)){
if(abn == 0)
Display(1+(unsigned char)(x/64),y/8,x%64,number);
else// if(abn == 1)
DisplayRev(1+(unsigned char)(x/64),y/8,x%64,number);
}
}
void DisplayE(unsigned char x,unsigned char y,unsigned char number,unsigned char abn)
{
if((x<128)&&(y<64)){
if(abn == 0)
Displayen(1+(unsigned char)(x/64),y/8,x%64,number);
else// if(abn == 1)
DisplayenRev(1+(unsigned char)(x/64),y/8,x%64,number);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -