原创 学习笔记:12864并行驱动(1)

2012-3-28 20:30 4022 8 9 分类: MCU/ 嵌入式

 

 以ST7920为主控芯片的12864通常有两种数据传输方式,并行和串行。应用较多的是并行方式,主要是程序编写简单,传输速率快。

(1)并行电路连接

 

3.gif

(2)并行时序图:

 

2.gif

 

1.gif

 

(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的时候才能正常显示

}

 

 

 

 

4.gif

 

12864在上电后需对其进行初始化,写入相关指令才能确保正常显示,具体指令介绍见厂家技术资料。

:RE为基本指令集与扩充指令集的选择控制位元,当变更RE位元后,往后的指令集将维持在最后的状态,除非再次变更RE位元,否则使用相同指令集时,不需每次重设RE位元。

 

 

/****************************************************************

函数名称:Clear_Screen

函数功能:清除屏幕

入口参数:无

出口参数:无

备 注:

*****************************************************************/

void Clear_Screen()

{

Write_Com(0x01);

DelayMs(5);

}

 

在整屏显示完需显示下一个整屏内容时需进行清除屏幕显示。使DDRAM的地址计数器到00H。

 

 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户403664 2012-3-28 15:27

图片全部都看不到啊
相关推荐阅读
用户419752 2012-05-08 04:22
学习笔记:AT24C02串行EEPROM的应用
   AT24C02是Atmel公司生产的低功耗CMOS型EEPROM,内含2K bit,即256字节存储空间。它采用I2C总线方式进行数据读写,可工作于标准模式、快速模式和高速模式。硬件电路...
用户419752 2012-03-28 20:51
学习笔记:PCF8591的应用
PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串口I2C总线接口。3个地址引脚A0、A1、A2用于硬件地址编址,允许将最多8个器件连接至I2C总线而不...
用户419752 2012-03-28 20:43
学习笔记:AQM-300空气质量传感器的应用
  AQM-300是深圳祥帆电子生产的空气质量传感器,它有低功耗、稳定性好、应用简单,灵敏度高等特点。能检测到氨气、氢气、酒精、一氧化碳、甲烷、丙烷、甘烷、苯乙烯、丙二醇、酚、甲苯、乙苯、二甲...
用户419752 2012-03-28 20:42
学习笔记:I2c总线原理及应用(3)
  (4)数据帧格式     在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。数据传输一般由主...
用户419752 2012-03-28 20:38
学习笔记:I2c总线原理及应用(2)
  (3)数据传输     发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位(即一帧9位)。首先传输的是数据的最高位(MSB)。如果从机...
用户419752 2012-03-28 20:36
学习笔记:I2c总线原理及应用(1)
    I2c总线支持任何IC生产过程(NMOS\CMOS\双极性)。两线----串行数据线(SDA)和串行时钟线(SCL)在连接到总线的器件间传递信息。每个器件都有唯一的地址识别,而且都可以...
我要评论
1
8
关闭 站长推荐上一条 /3 下一条