AMPIRE12864驱动程序
⑧ Y地址计数器
Y地址计数器是一个6位循环加一计数器。它管理某一页面上的64个单元。Y地址计数器可以由MPU以指令形式设置,它和页地址指针结合唯一选通显示存储器的一个单元,Y地址计数器具有自动加一功能。在显示存储器读/写操作后Y地址计数将自动加一。当计数器加至3FH后循环归零再继续加一。
2) AMPIRE12864液晶显示器控制接口信号说明
AMPIRE12864液晶显示器共有5个控制引脚,对应5个控制信号。它们分别是寄存器选择信号RS,读写控制信号R/W,使能信号E,左屏片选信号CS1,右屏片选信号CS2。下面通过几个表格来详细说明这些控制信号的作用。
RS,R/W的配合选择决定读写方式的4种模式,如表2-9。
表2-9RS,R/W的配合选择决定读写方式的4种模式本文引用地址:https://www.eepw.com.cn/article/201611/323960.htm
RS信号 | R/W信号 | 功能说明 |
L | L | MPU写指令到指令暂存器(IR) |
L | H | 读出忙标志(BF)及地址记数器(AC)的状态 |
H | L | MPU写入数据到数据暂存器(DR) |
H | H | MPU从数据暂存器(DR)中读出数据 |
使能信号E控制方式见表2-10。
表2-10 使能信号E控制方式
E状态 | 执行动作 | 功能 |
高——>低 | I/O缓冲——> DDRAM | 配合R/W写数据或指令 |
高 | DDRAM——>I/O缓冲 | 配合RS进行读数据或指令 |
低——>高 | 无动作 |
3)AMPIRE12864液晶显示器指令说明
AMPIRE12864液晶显示器的寄存器选择信号RS,读写控制信号R/W与8位三态数据口输入输出的控制代码的不同组合就组成了不同的控制指令,这些指令控制液晶显示器完成各种操作。下面就用一个表格对这些指令做出详细的说明,如表2-11所示。
表2-11AMPIRE12864液晶显示器指令说明
指令 | 指令码 | 功能 | |||||||||
RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
清除 显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H" |
地址 归位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | 设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容 |
显示状态开/关 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D=1: 整体显示 ON C=1: 游标ON B=1:游标位置反白允许 |
进入点 设定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位 |
游标或显示移位控制 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X | 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 |
功能 设定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | DL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 |
设定DDRAM列地址 | 0 | 0 | 1 | 0 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定DDRAM 列地址(Y地址) 第一行:80H-87H 第二行:90H-97H |
设定DDRAM行地址 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | P2 | P1 | P0 | 设定DDRAM页面地址(X地址) |
读取忙标志和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值 |
写数据到RAM | 1 | 0 | 数据 | 将数据D7——D0写入到内部的RAM | |||||||
读出RAM值 | 1 | 1 | 数据 | 从内部RAM读取数据D7——D0 |
二、驱动程序源码分析
接口定义:ucharxdata DB _at_ 0x3fff;//定义地址为3fffh的扩展口为AMPIRE12864的三态数据输入口,当然可根据自己具体情况定义;
uchar xdata CS _at_0x5fff;//定义地址5fffh的扩展口为AMPIRE12864的左右屏选择控制信号输入口;
uchar xdata RSRWE _at_0x7fff;//定义地址为7fffh的扩展口为AMPIRE12864的寄存器选择信号,读/写操作选择信号和使能信号的输入口。
1)检测忙信号标志BF
BF标志提供内部工作情况。BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时模块为准备状态,随时可接受外部指令和数据。利用表2-11中的“读取忙标志和地址”指令,可以将BF读到DB7总线,从而检验模块之工作状态。检测忙信号标志BF驱动函数代码如下:
void check_busy()
{
uchar a;
RSRWE=1;//R/W=1,RS=0,E=0读出忙标志(BF)准备
while(1)
{
RSRWE=5; //R/W=1,RS=0,E=1读出忙标志(BF)就绪
if(!(DB&0x80))//读取忙信号
break;//不忙跳出
RSRWE=1;
a++;
if(a>10)//防止死循环
break;
}
RSRWE=1; //R/W=1,RS=0,E=0读出忙标志(BF)准备
}
2)写控制命令
在AMPIRE12864的初始化,DDRAM列地址的设定和行地址的设定都是由写控制命令来完成的。当R/W=0,RS=0时在使能信号的配合下就可以把控制命令写入到指令暂存器(IR)。写时序图如图3-5示。


图3-5 AMPIRE12864写时序图
写控制命令驱动函数代码如下:
void write_cm(uchar command)
{
check_busy();//检测忙信号
RSRWE=0; //R/W=0,RS=0,E=0写控制命令准备
DB=command;//送出控制命令
RSRWE=4; //R/W=0,RS=0,E=1写控制命令
_nop_();
_nop_();
RSRWE=0;
}
3)写数据
评论