📄 lcd.h
字号:
/*
sbit RS=P6^0;
sbit RW=P4^7;
sbit E=P4^6;
sbit CS1=P6^1;
sbit CS2=P6^2;
*/
void set_RS(bit flag);
void set_RW(bit flag);
void set_E(bit flag);
void set_CS1(bit flag);
void set_CS2(bit flag);
void set_RS(bit flag)
{
unsigned char temp;
temp=P6;
if(flag)
P6=temp|0x01;
else
P6=temp&0xfe;
}
void set_RW(bit flag)
{
unsigned char temp;
temp=P4;
if(flag)
P4=temp|0x80;
else
P4=temp&0x7f;
}
void set_E(bit flag)
{
unsigned char temp;
temp=P4;
if(flag)
P4=temp|0x40;
else
P4=temp&0xbf;
}
void set_CS1(bit flag)
{
unsigned char temp;
temp=P6;
if(flag)
P6=temp|0x02;
else
P6=temp&0xfd;
}
void set_CS2(bit flag)
{
unsigned char temp;
temp=P6;
if(flag)
P6=temp|0x04;
else
P6=temp&0xfb;
}
/*********************************************延时**************************************/
void Delayus(unsigned int t)
{
int i,j;
for (i=0;i<t;i++)
{
for (j=0;j<t;j++)
j=j;
}
}
//*********************判忙函数************************//
void BUSYLOOP(unsigned char cs)
{
unsigned char BUSY;
if(cs==1)
{
set_CS1(0); //CS1=0;
set_CS2(1); //CS2=1;
}
else if(cs==0)
{
set_CS1(1);// CS1=1;
set_CS2(0);//CS2=0;
}
else
{
set_CS1(1);//CS1=1;
set_CS2(1);//CS2=1;
}
P7=0xff; //P0=0x0ff;
set_RS(0);// RS=0;
set_RW(1);//RW=1;
do {
set_E(1);// E=0;
Delayus(1);
BUSY=P7; // BUSY=P0;
Delayus(1);
set_E(0);//E=1;
Delayus(1);
}
while(BUSY>0x7F);
}
//*********************写控制字函数****************************//
void Write_command(unsigned char CMD,unsigned char bb,unsigned char cs)
{
if(bb)
{
BUSYLOOP(cs);
}
if(cs==1)
{
set_CS1(0);// CS1=0;
set_CS2(1);//CS2=1;
}
else if(cs==0)
{
set_CS1(1);// CS1=1;
set_CS2(0);// CS2=0;
}
else
{
set_CS1(1);// CS1=1;
set_CS2(1);// CS2=1;
}
set_RS(0); // RS=0;
set_RW(0);//RW=0;
set_E(0);// E=0;
P7=CMD;// P0=CMD;]
set_E(1);// E=1;
//nop();
Delayus(1);
set_E(0);// E=0;
}
//*********************写数据函数****************************//
void Write_data(unsigned char CMD,unsigned char bb,unsigned char cs,unsigned char page)
{
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(adress_y&0x3f|0x40,0,cs);
Write_command(page&0x07|0xb8,0,cs);
if(cs==1)
{
set_CS1(0);// CS1=0;
set_CS2(1);//CS2=1;
// CS1=0;
// CS2=1;
}
else if(cs==0)
{
set_CS1(1);// CS1=1;
set_CS2(0);// CS2=0;
// CS1=1;
// CS2=0;
}
else
{
set_CS1(1);// CS1=1;
set_CS2(1);// CS2=1;
// CS1=1;
// CS2=1;
}
set_RS(1); // RS=1;
set_RW(0); // RW=0;
set_E(0); // E=0;
P7=CMD;// P0=CMD;
set_E(1); // E=1;
Delayus(1);
set_E(0); // E=0;
}
//*************************液晶初始化********************************//
void CHUSHIHUA()
{
Write_command(0x3e,0,0);
Write_command(0x3e,0,0);
Write_command(0x3f,0,0);
Write_command(0x3f,0,0);
Write_command(0xb8,0,0); // write page num
Write_command(0x40,0,0); // write y adress
Write_command(0xc0,0,0); // write start adress
Write_command(0x3e,0,1);
Write_command(0x3e,0,1);
Write_command(0x3f,0,1);
Write_command(0x3f,0,1);
Write_command(0xb8,0,1); // write page num
Write_command(0x40,0,1); // write y adress
Write_command(0xc0,0,1); // write start adress
}
/***************************清 屏*************************************/
void CLEAR()
{
int i,j ;
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
Write_data(0x00,0,0,i) ;
}
}
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
Write_data(0x00,0,1,i) ;
}
}
}
void Display( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y)
{
unsigned char temp,i;
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(page&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=0;i<16;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page) ;
}
// Write_command((page+1)&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=16;i<32;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page+1) ;
}
}
void Display_Num( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y) //**显字符串函数**//
{
unsigned char temp,i;
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(page&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=0;i<8;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page) ;
}
// Write_command((page+1)&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=8;i<16;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page+1) ;
}
}
void delay(unsigned i)
{
int k;
for(k=0;k<i;k++)
delay1ms();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -