LCD12864 驱动 ,采用串行方式
扫描二维码
随时随地手机看文章
/********************************************
file&: lcd.h
Description: LCD12864 驱动 ,采用串行方式,
Author:kassey@126.comJuly,22th,2005
********************************************/
#i nclude
#i nclude
sbit SCLK =P1^3 //E
sbit SID =P1^4; //RW
sbit RST =P1^2; // low active 可以不用,也就是说,只用两条线和LCD通信
#define ROW1 0x80
#define ROW2 0x90
#define ROW3 0x88
#define ROW4 0x98
unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置
};
/*****************************************
Fucntion: delay10US(char x)
Description: delay for 10 us
Parameter: x
Author:kassey@126.com
Date: July,7th,2005
*****************************************/
void delay10US(uchar x)
{
uchar k;
for(k=0;k
}
/*****************************************
Fucntion: delay1MS(char x)
Description: delay for 10 us
Parameter: x delay for 1MS
Author:kassey@126.com
Date: July,7th,2005
*****************************************/
void delay1MS(uchar x)
{
uchar k,j;
x=x<<1;
for(k=0;k
}
void SendByteLCD(uchar WLCDData)
{
uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<else SID=0;
SCLK=0;
SCLK=1
}
}
SPIWR(uchar Wdata,uchar RS)
{
SendByteLCD(0xf8+(RS<<1));
SendByteLCD(Wdata&0xf0);
SendByteLCD((Wdata<<4)&0xf0);
}
void SendCMD(uchar CMD)
{
SPIWR(CMD,0);
delay10US(90);//8155来模拟串行通信,所以,加上8155的延时,
}
void SendData(uchar Data)
{
SPIWR(Data,1);
}
void LCDInit()
{
RST=0;
delay1MS(50);
RST=1;
SendCMD(0x30);//功能设置,一次送8位数据,基本指令集
SendCMD(0x0C);//0000,1100 整体显示,游标off,游标位置off
SendCMD(0x01);//0000,0001 清DDRAM
SendCMD(0x02);//0000,0010 DDRAM地址归位
SendCMD(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//
SendCMD(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//
SendCMD(0x0C);//显示设定,开显示,显示光标,当前显示位反白闪动
}
/*****************************
清文本区
*****************************/
void LcmClearTXT( void )
{
unsigned char i;
SendCMD(0x30); //8BitMCU,基本指令集合
SendCMD(0x80); //AC归起始位
for(i=0;i<64;i++)
SendData(0x20);
}
/*****************************
发送字符串
*****************************/
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
SendCMD(0x30); //8BitMCU,基本指令集合
SendCMD(AC_TABLE[8*row+col]); //起始位置
while(*puts != '