lcd12864 LCD12864 驱动 ,采用串行方式

/********************************************
文件&amp。:lcd.h
驾驶,领养,
作者:2005年7月22日
********************************************/
#i包括&lt。reg52.h&gt。
#i包括&lt。intrins.h&gt。
=P1^3 //E
锡德·=p1^4;//RW
首先是=p1^2;//低电平有效是不必要的,也就是说,只有两条线用来与液晶显示器通信
#定义行1 0x80
#定义ROW2 0x90
#定义ROW3 0x88
#定义ROW4 0x98
无符号字符代码AC_TABLE[]={
第一行汉字的0x80、0x81、0x82、0x83、0x84、0x85、0x86、0x 87//位置
第二行汉字的0x90、0x91、0x92、0x93、0x94、0x95、0x96、0x 97//位置
第三行汉字的0x88、0x89、0x8a、0x8b、0x8c、0x8d、0x8e、0x8f、//位置
第四行汉字的0x98、0x99、0x9a、0x9b、0x9c、0x9d、0x9e、0x9f、//位置
};
/*****************************************
功能:延迟10个单位(字符x)
Deion:延迟10秒
参数:x
作者:
日期:2005年7月7日
*****************************************/
void delay10US(uchar x)
{
uchar k;
for(k = 0;k&lt。x;k++);
}
/*****************************************
功能:延迟1毫秒(字符x)
Deion:延迟10秒
参数:延时1毫秒
作者:
日期:2005年7月7日
*****************************************/
无效延迟1毫秒(uchar x)
{
uchar k,j;
x=x&lt。& lt1;
for(k = 0;k&lt。x;k++)
for(j = 0;j&lt。255;j++)_ nop _();
}
void SendByteLCD(uchar WLCDData)
{
uchar I;
for(I = 0;i&lt。8;i++)
{
if((WLCDdata & lt;& ltI)和amp0x 80)SID = 1;
else SID = 0;
SCLK = 0;
SCLK=1
}
}
SPIWR(uchar Wdata,uchar RS)
{
SendByteLCD(0x F8+(RS & lt;& lt1));
SendByteLCD(Wdata & amp;0xf 0);
SendByteLCD((Wdata & lt;& lt4)和amp0xf 0);
}
void SendCMD(uchar CMD)
{
SPIWR(CMD,0);
delay 10 us(90);//8155模拟串行通信,所以用8155的延迟,
}
无效发送数据(uchar数据)
{
SPIWR(数据,1);
}
void LCDInit()
{
RST = 0;
延迟1毫秒(50);
RST = 1;
SendCMD(0x 30);//功能设置,一次发送8位数据,基本指令集
SendCMD(0x0C);//0000,1100整体显示,光标关闭,光标位置关闭
SendCMD(0x 01);//00000001清除DDRAM
SendCMD(0x 02);//0000,0010 DDRAM地址归位
SendCMD(0x 80);//1000,0000将DDRAM 7位地址000,0000设置为地址计数器AC//
SendCMD(0x 04);//点设置,显示字符/光标从左向右移动,DDRAM地址加一//
SendCMD(0x0C);//显示设置,打开显示,显示光标,当前显示位白色闪烁
}
/*****************************
明文区域
*****************************/
无效LcmClearTXT(无效)
{
无符号字符I;
SendCMD(0x 30);//8BitMCU,基本指令集
SendCMD(0x 80);//交流返回起始位
for(I = 0;i&lt。64;i++)
发送数据(0x 20);
}
/*****************************
发送字符串
*****************************/
void PutStr(无符号字符行、无符号字符列、无符号字符* puts)
{
SendCMD(0x 30);//8BitMCU,基本指令集
SendCMD(AC _ TABLE[8 * row+col]);//起始位置
while(*puts!= '[104]') //判断字符串是否显示
{
If(col==8) //判断换行
{//如果没有判断,自动从第一行到第三行
col = 0;
row++;
}
if(row = = 4)row = 0;//显示一个屏幕后,返回屏幕左上角
SendCMD(AC _ TABLE[8 * row+col]);
send data(* puts);//一个汉字要写两遍
puts++;
send data(* puts);
puts++;
col++;
}
}
/*****************************

推荐阅读