📄 lcd12864scs.h
字号:
/************************************************************/
/********* LCD12864scs.H C51 driver *************/
/********** Written by WangBiao---20060813 ****************/
/************************************************************/
//--------------------------------------
sbit RS_CS=P1^2;
sbit RW_SID=P1^3;
sbit E_CLK=P1^4;
//-----------------------外部函数----------------------------------------
void Init_Lcd12864(void); //LCD RESET
void ClearScreen(void);
//----------------------------------------------------------
void DispChar(unsigned char x,unsigned char y,unsigned char dataW);
void DispString(unsigned char x,unsigned char y,unsigned char *ptr);
void DispChinese(unsigned char x,unsigned char y,unsigned char *ptr);
void DispNumb(unsigned char x,unsigned char y,unsigned int n,unsigned char number_bit);
//-----------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//-----------------------------------------------------------------------
//-----------------------内部函数----------------------------------------
void WaitForEnable(void);//忙信号检测
void SendByte(unsigned char Data);
unsigned char ReceByte(void);
void LcdWrite_C(unsigned char CMD,unsigned char AttribC);//write Control Charactor
void LcdWrite_D(unsigned char dataW); //写一个数据
unsigned char LcdRead(void);//read a data from LCD
void Delay5ms(void);
//-------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//-------------------------------------------------------------------------
//----------------------具体子函数---------------------------------------
//----------------------------初始化---------------------------------
void Init_Lcd12864(void)
{
RS_CS=0;
E_CLK=0;
RW_SID=0;
LcdWrite_C(0x30,0); //显示模式设置(不测试忙信号)共三次
Delay5ms();
LcdWrite_C(0x30,1);
Delay5ms();
LcdWrite_C(0x0c,1);//0x0f->all on,show arrow;0x0c->no arrow
ClearScreen();
}
//--------------------------------------------------------------
void SendByte(unsigned char Data)
{
unsigned char i,t=0x80;
for(i=0;i<8;i++)
{
if(Data&t) RW_SID=1;
else RW_SID=0;
E_CLK=1;
t>>=1;
E_CLK=0;
}
}
//---------------------------------------------
unsigned char ReceByte(void)
{
unsigned char i,t=0;
for(i=0;i<8;i++)
{
t<<=1;
if(RW_SID) t|=1;
E_CLK=1;
E_CLK=0;
}
return t;
}
//---------------------------------------------------------
void LcdWrite_C(unsigned char CMD,unsigned char AttribC)
{
if(AttribC) WaitForEnable(); //检测忙信号
RS_CS=1;//start
SendByte(0xf8);//MCU->LCD,COMMAND
SendByte(CMD&0xf0);
SendByte((CMD&0x0f)<<4);
RS_CS=0;//end
}
//--------------------------------------------------------
void LcdWrite_D(unsigned char DATA)
{
WaitForEnable(); // 检测忙信号
RS_CS=1;//start
SendByte(0xfa);//MCU->LCD,DATA
SendByte(DATA&0xf0);
SendByte((DATA&0x0f)<<4);
RS_CS=0;//end
}
//---------------------------------------------------------
unsigned char LcdRead(void)
{
unsigned char t,DATA;
WaitForEnable(); // 检测忙信号
RS_CS=1;//start
SendByte(0xfe);//LCD->MCU,DATA
t=ReceByte();DATA=t&0xf0;
t=ReceByte();DATA|=((t&0xf0)>>4);
RS_CS=0;//end
return DATA;
}
//----------------------------------------------------------
void WaitForEnable( void )
{
unsigned char t,DATA;
for(;;)
{
RS_CS=1;//start
SendByte(0xfc);//LCD->MCU,BUSY CHECK
t=ReceByte();DATA=t&0xf0;
t=ReceByte();DATA|=((t&0xf0)>>4);
RS_CS=0;//end
if((DATA&0x80)==0) break;
}
}
//----------------------------------------------------------
//--------------------------短延时-----------------------
void Delay5ms(void)
{ unsigned int i = 5552;
while(i--);
}
//-------------------------------------------------------------------
//###################################################################
//---------------------------------------------------
void ClearScreen(void)
{
LcdWrite_C(0x01,1);//清除显示
}
//-------------------------------------------------------
//----------------------------------------------------------------------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//----------------------------------------------------------------------------
//=======================================================//
// 按指定位置显示一个字符 //
//=======================================================//
void DispChar(unsigned char x,unsigned char y,unsigned char dataW)
{ unsigned char temp,t;
LcdWrite_C(0x30,1);//command back
temp=x&0x0f;
t=y>>1;
y&=0x01;
if(temp&0x01)
{ temp=temp>>1;
if(y)temp|=0x10;
temp|=0x80;
if(t)temp|=0x08;
LcdWrite_C(temp,1);
LcdRead();
LcdWrite_D(dataW);
}
else
{ temp=temp>>1;
if(y)temp|=0x10;
temp|=0x80;
if(t)temp|=0x08;
LcdWrite_C(temp,1);
LcdWrite_D(dataW);
}
}
//=======================================================//
// 按指定位置显示一串字符 //
//=======================================================//
void DispString(unsigned char x,unsigned char y,unsigned char *ptr)
{ unsigned char i,len=0;//len=0!!!!!!!!
while (ptr[len]>31){len++;};//取得要显示的个数
for(i=0;i<len;i++)
{
if((i!=0)&&((x+i)%16==0)) y++;
DispChar((x+i)%16,y,*ptr++);
}
}
//=======================================================//
// 按指定位置显示中文字符串(x必须偶对齐取值为0~7) //
//=======================================================//
void DispChinese(unsigned char x,unsigned char y,unsigned char *ptr)
{ unsigned char i,len=0;//len=0!!!!!!!!
while (ptr[len]>31){len++;};//取得要显示的个数
for(i=0;i<len;i++) //DispChar(x*2+i,y,*ptr++);
{
if((i!=0)&&((x+i)%16==0)) y++;
DispChar((x*2+i)%16,y,*ptr++);
}
}
//=======================================================//
// 按指定位置显示一个数字表(可变位BCD码) //
//=======================================================//
unsigned char code number[]="0123456789";//for dis table
//---------------------------------------------------------
void DispNumb(unsigned char x,unsigned char y,unsigned int n,unsigned char number_bit)
{
unsigned char digi[5];
unsigned char i;
digi[0]=n/10000;
digi[1]=n/1000%10;
digi[2]=n/100%10;
digi[3]=n/10%10;
digi[4]=n%10;
for(i=0;i<number_bit;i++) DispChar(x+i,y,number[(digi[5-number_bit+i])]);
}
//--------------------------------------------------------------------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//--------------------------------------------------------------------------
//-------------------end LCD12864.H-----------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -