AMPIRE12864驱动程序
使能信号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)写数据
当寄存器控选择控制信号RS=0写指令寄存器(IR)即为写控制命令,RS=1时写数据寄存器即为写数据。
写数据驱动函数代码如下:
void write_data(uchar Data)
{
check_busy();
RSRW=2; //R/W=0,RS=1,E=0写控数据准备
DB=Data; //送出数据
RSRW=6; //R/W=0,RS=1,E=1写数据
_nop_();
_nop_();
RSRW=2;
}
1)设定显示字符行列地址
在AMPIRE12864上显示一个字符是必须先设定其行列地址,设定行列地址的操作指令见表2-11。
设定显示字符行列地址驱动函数代码如下:
void set_xy(uchar x,uchar y)//x为行,y为列
{
if(y>=64)//列地址大于等于64时右屏显示
{
CS=1;
y=y-64;
}
else//列地址小于64时左屏显示
{
CS=2;
}
write_cm(0x40|y);写列地址
_nop_();
write_cm(0xb8|x);写行地址
}
2)AMPIRE12864的初始化
在对AMPIRE12864操作前须初始化,对其做一些必要的设置。这些设置包括:基本指令操作设置;开显示,关光标,不闪烁;清除显示;光标的移动方向,DDRAM的地址计数器加1。设置的操作指令详见表2-11。
AMPIRE12864初始化驱动函数代码如下:
void LCD_Init()
{
write_cm (0x30);//30H--基本指令操作delayus(4);write_cm (0x0c);//开显示,关光标,不
AMPIRE12864驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)