lcd12864 LCD12864 驱动 ,采用串行方式
/********************************************
文件&。:lcd.h
驾驶,领养,
作者:2005年7月22日
********************************************/
#i包括<。reg52.h>。
#i包括<。intrins.h>。
=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<。x;k++);
}
/*****************************************
功能:延迟1毫秒(字符x)
Deion:延迟10秒
参数:延时1毫秒
作者:
日期:2005年7月7日
*****************************************/
无效延迟1毫秒(uchar x)
{
uchar k,j;
x=x<。& lt1;
for(k = 0;k<。x;k++)
for(j = 0;j<。255;j++)_ nop _();
}
void SendByteLCD(uchar WLCDData)
{
uchar I;
for(I = 0;i<。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<。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++;
}
}
/*****************************
推荐阅读
- 旅游生态文化“三轮驱动” 打造乡村振兴永泰样板——专访永泰县委书记雷连鸣
- 婚外感情的发生是有驱动力的
- 罗莱迪思 罗莱迪思 | 拥抱数字化改革 创新驱动绿色低碳
- 江苏金湖:“三大工程”驱动 现代农业“酿”丰收
- 如何唤醒孩子的学习内在驱动力
- 品质提升品牌保护双轮驱动——兴化大闸蟹荣获江苏十强农产品区域公用品牌
- 科技支撑、品牌打造 双轮驱动海南热带特色高效农业发展
- AMD 肾上腺素 21.12.1 驱动发布:《光环:无限》性能大幅提升
- 12G版本RTX 2060要来!NV更新驱动支持
- 博格步 以“红色力量”驱动“发展之轮” 知名童车从这里驶向世界