《2022年AMPIRE驱动程序[定 .pdf》由会员分享,可在线阅读,更多相关《2022年AMPIRE驱动程序[定 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、AMPIRE12864 驱动程序一、芯片介绍AMPIRE12864 图形点阵液晶显示器,它主要采用动态驱动原理由行驱动控制器和列驱动器两部分组成了128(列) 64(行)的全点阵液晶显示。可显示8 4个 16 16 点阵汉字或 16 4 个 16 8 点阵 ASCII 字符集,也可完成图形的显示。与 CPU 接口采用 5 条位控制总线和8 位并行数据总线输入输出,具有4 位/8 位并行、 2 线或 3 线串行多种接口方式。AMPIRE12864 共 18 个引脚其中包括 8 个三态数据引脚,5 个控制信号引脚,1 个复位引脚和 4个电源相关引脚。 AMPIRE12864 详细引脚描述见表 2-
2、7。表2-7 AMPIRE12864详细引脚描述引脚号引脚名称级别引脚功能描述3 GND 0V 电源地4 VCC +5V 电源电压5 V0 0-10V LCD 驱动负电压,要求VDD-VLCD=13V 6 RS H/L 寄存器选择信号7 R/W H/L 读/写操作选择信号8 E H/L 使能信号9 DB0 H/L 八位三态并行数据总线10 DB1 11 DB2 12 DB3 13 DB4 14 DB5 15 DB6 16 DB7 1 CS1 H/L 片选信号, 当 CS1=H时,液晶左半屏显示2 CS2 H/L 片选信号, 当 CS2=H时,液晶右半屏显示17 /RST H/L 复位信号 ,低
3、电平有效18 Vout -10V 输出-10V 的负电压 (单电源供电 ) AMPIRE12864引脚图如图 2-7所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 图2-7 AMPIRE12864引脚图1)AMPIRE12864液晶显示器主要硬件构成AMPIRE12864液晶显示器主要包括以下几个硬件模块: 显示数据 RAM(DDRAM) DDRAM (64 8 8 bits)是存储图形显示数据的。此RAM 的每一位数据
4、对应显示面板上一个点的显示(数据为H)与不显示(数据为L) 。DDRAM 的地址与显示位置关系对照如表2-8 所示。表 2-8 DDRAM 的地址与显示位置关系对照图CS2=1 CS1=1 Y= 0 1 63 0 1 63 行号X=0 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 0 7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 8 56 X=7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 DB0 DB7 D
5、B0 DB7 DB0 DB7 DB0 DB7 57 63 I/O 缓冲器( DB0DB7)I/O 缓冲器为双向三态数据缓冲器。是LCM (液晶显示模块)内部总线与MPU 总线的结合部。其作用是将两个不同时钟下工作的系统连接起来,实现通讯。I/O 缓冲器在片选信号 /CS 有效状态下 ,I/O 缓冲器开放,实现LCM(液晶显示模块)与 MPU 之间的数据传递。当片选信号为无效状态时,I/O 缓冲器将中断 LCM(液晶显示模块) 内部总线与 MPU 数据总线的联系, 对外总线呈高阻状态,从而不影响 MPU 的其它数据操作功能。 输入寄存器名师资料总结 - - -精品资料欢迎下载 - - - - -
6、 - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 输入寄存器用于接收在MPU 运行速度下传送给 LCM(液晶显示模块) 的数据并将其锁存在输入寄存器内,其输出将在LCM (液晶显示模块)内部工作时钟的运作下将数据写入指令寄存器或显示存储器内。 输出寄存器输出寄存器用于暂存从显示存储器读出的数据,在MPU 读操作时,输出寄存器将当前锁存的数据通过I/O 缓冲器送入 MPU 数据总线上。 指令寄存器指令寄存器用于接收MPU 发来的指令代码,通过译码将指令代码置入相关的寄存器或触发器内。 状态
7、字寄存器状态字寄存器是 LCM (液晶显示模块)与MPU 通讯时唯一的 “ 握手” 信号。状态字寄存器向 MPU 表示了 LCM(液晶显示模块) 当前的工作状态。 尤其是状态字中的 “ 忙” 标志位是 MPU 在每次对 LCM(液晶显示模块) 访问时必须要读出判别的状态位。 当处于 “ 忙” 标志位时,I/O 缓冲器被封锁, 此时 MPU 对 LCM(液晶显示模块)的任何操作(除读状态字操作外)都将是无效的。 X 地址寄存器X 地址寄存器是一个三位页地址寄存器,其输出控制着DDRAM 中 8 个页面的选择,也是控制着数据传输通道的八选一选择器。X 地址寄存器可以由MPU以指令形式设置。 X 地
8、址寄存器没有自动修改功能,所以要想转换页面需要重新设置 X 地址寄存器的内容。 Y 地址计数器Y 地址计数器是一个6 位循环加一计数器。 它管理某一页面上的64 个单元。Y 地址计数器可以由MPU 以指令形式设置,它和页地址指针结合唯一选通显示存储器的一个单元, Y 地址计数器具有自动加一功能。在显示存储器读/写操作后 Y 地址计数将自动加一。当计数器加至3FH 后循环归零再继续加一。2) AMPIRE12864 液晶显示器控制接口信号说明AMPIRE12864 液晶显示器共有5 个控制引脚,对应5 个控制信号。它们分别是寄存器选择信号RS,读写控制信号 R/W,使能信号 E,左屏片选信号 C
9、S1,右屏片选信号 CS2。下面通过几个表格来详细说明这些控制信号的作用。RS,R/W 的配合选择决定读写方式的4 种模式,如表 2-9。表2-9 RS,R/W的配合选择决定读写方式的4种模式RS信号R/W 信号功能说明L L MPU 写指令到指令暂存器( IR)L H 读出忙标志( BF)及地址记数器( AC)的状态名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - H L MPU 写入数据到数据暂存器( DR)H H MPU
10、从数据暂存器( 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-11 AMPIRE12864 液晶显示器指令说明指令指 令 码功 能RS R/W
11、 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
12、 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位控制位 ;这个指令不改变DDRAM 的内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 功能设定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 地址)第一行: 80H87H
13、第二行: 90H97H 设定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 数据将数据 D7D0 写入到内部的 RAM 读出RAM 值1 1 数据从 内 部RAM读 取 数 据D7D0 二、驱动程序源码分析接口定义:uchar xdata DB _at_ 0 x3fff;/ 定义地址为3fffh的扩展口为AMPIRE12864 的三态数据输入口,当然可
14、根据自己具体情况定义;uchar xdata CS _at_ 0 x5fff;/ 定义地址 5fffh 的扩展口为 AMPIRE12864 的左右屏选择控制信号输入口;uchar xdata RSRWE _at_ 0 x7fff;/ 定义地址为 7fffh 的扩展口为 AMPIRE12864的寄存器选择信号,读 /写操作选择信号和使能信号的输入口。1)检测忙信号标志BF BF 标志提供内部工作情况。 BF=1 表示模块在进行内部操作, 此时模块不接受外部指令和数据。 BF=0 时模块为准备状态, 随时可接受外部指令和数据。利用表 2-11 中的“ 读取忙标志和地址 ” 指令,可以将 BF 读到
15、 DB7 总线,从而检验模块之工作状态。检测忙信号标志BF 驱动函数代码如下:void check_busy() uchar a; RSRWE=1;/R/W=1,RS=0,E=0 读出忙标志( BF)准备while(1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - RSRWE=5; /R/W=1,RS=0,E=1读出忙标志( BF)就绪if(!(DB&0 x80)/ 读取忙信号break;/不忙跳出RSRWE=1; a+;
16、 if(a10)/防止死循环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;/
17、送出控制命令RSRWE=4; /R/W=0,RS=0,E=1写控制命令_nop_(); _nop_(); RSRWE=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 3) 写数据当寄存器控选择控制信号 RS=0写指令寄存器( IR)即为写控制命令, RS=1时写数据寄存器即为写数据。写数据驱动函数代码如下:void write_data(uchar Data) check_busy(); RSRW=2; /R/W=0,R
18、S=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(0 x40|y);写列地址_nop_(); write_
19、cm(0 xb8|x);写行地址 2)AMPIRE12864的初始化在对AMPIRE12864操作前须初始化, 对其做一些必要的设置。 这些设置包括:基本指令操作设置;开显示,关光标,不闪烁;清除显示;光标的移动方向,DDRAM 的地址计数器加 1。设置的操作指令详见表 2-11。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - AMPIRE12864初始化驱动函数代码如下:void LCD_Init() write_cm (0
20、 x30);/30H-基本指令操作delayus(4); write_cm (0 x0c);/开显示,关光标,不闪烁。delayus(10); write_cm (0 x01);/清除显示delayms(10); write_cm (0 x06);/光标的移动方向左, DDRAM 的地址计数器( AC)加1。delayus(10); 3)AMPIRE12864显示功能模块AMPIRE12864显示功能通过函数 void disp(uchar index416) 实现。入口参数uchar index416 为字库索引数组,给出在指定位置显示的字符的图形点阵在uchar code zk16中的索引
21、地址,本系统中所有字符的图形点阵都由字模提取软件提取并存储在图形点阵数组uchar code zk16中。在void disp(uchar index416) 调用了两个函数: void Disp_hz(uchar R,uchar L,uchar *p)用来显示汉字,其程序代码如下:void Disp_hz(uchar R,uchar L,uchar *p) uchar i; for(i=0;i16;i+) set_xy(2*R,16*L+i);/ 设定显示位置write_data(pi);/ 写入DDRAM set_xy(2*R+1,16*L+i); write_data(pi+16); 入
22、口参数 uchar R,uchar L分别指明字符或汉字的显示位置的行号和列号,uchar *p为图形点阵数组的首地址指针。void Disp_zf(uchar R,uchar L,uchar *p)用来显示 ASCII字符,其程序代码如下:void Disp_zf(uchar R,uchar L,uchar *p) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - uchar i; for(i=0;i8;i+) set_xy(
23、2*R,8*L+i); write_data(pi); set_xy(2*R+1,8*L+i); write_data(pi+8); 入口参数 uchar R,uchar L分别指明字符或汉字的显示位置的行号和列号,uchar *p为图形点阵数组的首地址指针。AMPIRE12864显示功能模块程序代码如下:void disp(uchar index416) uchar i,j; for(i=0;i4;i+) for(j=0;j14) Disp_hz(i,j/2,&zkindexij0);/显示汉字j+; else Disp_zf(i,j,&zkindexij0);/显示ASCII 字符 显示以
24、一整屏为单位, 在显示之前应先给 index416 赋值以确定液晶显示器的显示内容。如给 index416 以下赋值:index02=131;index04=133; index06=135;index08=137; index010=139;index012=139; 显示的内容如图 3-6所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 图3-6 液晶显示器显示示例AMPIRE12864 驱动程序各函数包含于头文件12864.h 中,在主函数中加入宏定义 #include12864.h。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -