以ST7920为主控芯片的12864通常有两种数据传输方式,并行和串行。应用较多的是并行方式,主要是程序编写简单,传输速率快。
(1)并行电路连接:
(2)并行时序图:
(3)12864几个内部存储器:
CGROM,Character Generator ROM,内置8192个中文汉字(16*16),也就是说能显示4行每行8个汉字。这些汉字通过GB中文字型码表寻址。存储器只读不写。
HCGROM,Half CGROM,半宽字型产生只读存储器,里面存储了供我们调用的英文,数字以及符号共128个字符ASCII字符库(8*16)。同样只读不写。
CGRAM,Character Generator RAM,字形产生随机存储器,12864允许我们自己自定义字符,CGRAM最多可以提高4组16*16的空间供我们存放自定义字符。这四组点阵空间的地址为0000H、0002H、0004H、0006H。通过写读CGRAM,实现特殊字符图形的显示。要注意的是,数据掉电消失,所以要显示自定义的字符,每次MCU上电都需要写一次CGRAM空间。
GDRAM,GraphicDynamic RAM,动态图形随机存储器,用以存储供显示的图形。
DDRAM,Data DisplayRAM,数据显示随机存储器,即用来存放将被显示的字符数据。
ICON RAM(IRAM),图标随机存储器,用以存储将被显示的图标数据。
(4)12864底层驱动程序:
/****************************************************************
函数名称:Check_Busy
函数功能:使用读取忙碌标志指令,读出BF位,判断LCD是否忙碌,忙则等待
入口参数:无
出口参数:无
备 注:
*****************************************************************/
void Check_Busy()
{
rs=0;
rw=1;
en=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);
en=0;
}
注:当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时,BF需为0,方可接受新指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长较长的时间,即是等待前一个指令确认执行完成,指令执行的时间请参考指令表中的个别指令说明。
/****************************************************************
函数名称:Write_Com
函数功能:向12864写入指令
入口参数:com
出口参数:无
备 注:传输数据前先判定LCD是否忙碌,忙则等待
*****************************************************************/
void Write_Com(uchar com)
{
Check_Busy();
rs=0;
rw=0;
en=1;
DataPort=com;
DelayUs(10);
en=0;
}
/****************************************************************
函数名称:Write_Data
函数功能:向12864写入数据
入口参数:data
出口参数:无
备 注:传输数据前先判定LCD是否忙碌,忙则等待
*****************************************************************/
void Write_Data(uchar dat)
{
Check_Busy();
rs=1;
rw=0;
en=1;
DataPort=dat;
DelayUs(10);
en=0;
}
写数据函数与写指令函数唯一的不同是RS需拉高,严格按照资料所给的时序图编写
/****************************************************************
函数名称:Init_LCD
函数功能:初始化12864液晶
入口参数:无
出口参数:无
备 注:
*****************************************************************/
void Init_LCD()
{
DelayMs(50);
Write_Com(0x30); //功能设定指令,表示为基本指令
DelayUs(10);
Write_Com(0x30);
DelayUs(40);
Write_Com(0x0c);//显示状态指令,表示不显示游标
DelayUs(100);
Write_Com(0x01); //清楚显示
DelayMs(10);
Write_Com(0x06); //进入点设定,这条指令貌似只有0x06的时候才能正常显示
}
12864在上电后需对其进行初始化,写入相关指令才能确保正常显示,具体指令介绍见厂家技术资料。
注:RE为基本指令集与扩充指令集的选择控制位元,当变更RE位元后,往后的指令集将维持在最后的状态,除非再次变更RE位元,否则使用相同指令集时,不需每次重设RE位元。
/****************************************************************
函数名称:Clear_Screen
函数功能:清除屏幕
入口参数:无
出口参数:无
备 注:
*****************************************************************/
void Clear_Screen()
{
Write_Com(0x01);
DelayMs(5);
}
在整屏显示完需显示下一个整屏内容时需进行清除屏幕显示。使DDRAM的地址计数器到00H。
用户403664 2012-3-28 15:27