lcm12864各命令指令为什么需要ping网络延迟命令

AMPIRE12864驱动程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
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-7。
表2-7&AMPIRE12864详细引脚描述
引脚功能描述
LCD驱动负电压,要求VDD-VLCD=13V
寄存器选择信号
读/写操作选择信号
八位三态并行数据总线
片选信号,当CS1=H时,液晶左半屏显示
片选信号,当CS2=H时,液晶右半屏显示
复位信号,低电平有效
输出-10V的负电压(单电源供电)
AMPIRE12864引脚图如图2-7所示。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
图2-7&AMPIRE12864引脚图
1)AMPIRE12864液晶显示器主要硬件构成
AMPIRE12864液晶显示器主要包括以下几个硬件模块:
① 显示数据RAM(DDRAM)
DDRAM(64&8&8 bits)是存储图形显示数据的。此RAM的每一位数据对应显示面板上一个点的显示(数据为H)与不显示(数据为L)。DDRAM的地址与显示位置关系对照如表2-8所示。
表2-8 DDRAM的地址与显示位置关系对照图
② I/O缓冲器(DB0~DB7)
I/O缓冲器为双向三态数据缓冲器。是LCM(液晶显示模块)内部总线与MPU总线的结合部。其作用是将两个不同时钟下工作的系统连接起来,实现通讯。I/O缓冲器在片选信号/CS有效状态下,I/O缓冲器开放,实现LCM(液晶显示模块)与MPU之间的数据传递。当片选信号为无效状态时,I/O缓冲器将中断LCM(液晶显示模块)内部总线与MPU数据总线的联系,对外总线呈高阻状态,从而不影响MPU的其它数据操作功能。
③ 输入寄存器
输入寄存器用于接收在MPU运行速度下传送给LCM(液晶显示模块)的数据并将其锁存在输入寄存器内,其输出将在LCM(液晶显示模块)内部工作时钟的运作下将数据写入指令寄存器或显示存储器内。
④ 输出寄存器
输出寄存器用于暂存从显示存储器读出的数据,在MPU读操作时,输出寄存器将当前锁存的数据通过I/O缓冲器送入MPU数据总线上。
⑤ 指令寄存器
指令寄存器用于接收MPU发来的指令代码,通过译码将指令代码置入相关的寄存器或触发器内。
⑥ 状态字寄存器
状态字寄存器是LCM(液晶显示模块)与MPU通讯时唯一的&握手&信号。状态字寄存器向MPU表示了LCM(液晶显示模块)当前的工作状态。尤其是状态字中的&忙&标志位是MPU在每次对LCM(液晶显示模块)访问时必须要读出判别的状态位。当处于&忙&标志位时,I/O缓冲器被封锁,此时MPU对LCM(液晶显示模块)的任何操作(除读状态字操作外)都将是无效的。
⑦ X地址寄存器
X地址寄存器是一个三位页地址寄存器,其输出控制着DDRAM中8个页面的选择,也是控制着数据传输通道的八选一选择器。X地址寄存器可以由MPU以指令形式设置。X地址寄存器没有自动修改功能,所以要想转换页面需要重新设置X地址寄存器的内容。
⑧ 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-9&RS,R/W的配合选择决定读写方式的4种模式
MPU写指令到指令暂存器(IR)
读出忙标志(BF)及地址记数器(AC)的状态
MPU写入数据到数据暂存器(DR)
MPU从数据暂存器(DR)中读出数据
使能信号E控制方式见表2-10。
表2-10 使能信号E控制方式
I/O缓冲&&& DDRAM
配合R/W写数据或指令
DDRAM&&&I/O缓冲
配合RS进行读数据或指令
3)&&&&&AMPIRE12864液晶显示器指令说明
AMPIRE12864液晶显示器的寄存器选择信号RS,读写控制信号R/W与8位三态数据口输入输出的控制代码的不同组合就组成了不同的控制指令,这些指令控制液晶显示器完成各种操作。下面就用一个表格对这些指令做出详细的说明,如表2-11所示。
表2-11&AMPIRE12864液晶显示器指令说明
将DDRAM填满&20H&,并且设定DDRAM的地址计数器(AC)到&00H&
设定DDRAM的地址计数器(AC)到&00H&,并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容
显示状态开/关
D=1: 整体显示 ON
C=1: 游标ON
B=1:游标位置反白允许
指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位
游标或显示移位控制
设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容
DL=0/1:4/8位数据
RE=1: 扩充指令操作
RE=0: 基本指令操作
设定DDRAM列地址
设定DDRAM 列地址(Y地址)
第一行:80H-87H
第二行:90H-97H
设定DDRAM行地址
设定DDRAM页面地址(X地址)
读取忙标志和地址
读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值
写数据到RAM
将数据D7&&D0写入到内部的RAM
从内部RAM读取数据D7&&D0
二、驱动程序源码分析
接口定义:ucharxdata DB _at_ 0x3//定义地址为3fffh的扩展口为AMPIRE12864的三态数据输入口,当然可根据自己具体情况定义;
uchar xdata CS _at_0x5//定义地址5fffh的扩展口为AMPIRE12864的左右屏选择控制信号输入口;
uchar xdata RSRWE _at_0x7//定义地址为7fffh的扩展口为AMPIRE12864的寄存器选择信号,读/写操作选择信号和使能信号的输入口。
1)检测忙信号标志BF
BF标志提供内部工作情况。BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时模块为准备状态,随时可接受外部指令和数据。利用表2-11中的&读取忙标志和地址&指令,可以将BF读到DB7总线,从而检验模块之工作状态。检测忙信号标志BF驱动函数代码如下:
void check_busy()
RSRWE=1;//R/W=1,RS=0,E=0读出忙标志(BF)准备
RSRWE=5; //R/W=1,RS=0,E=1读出忙标志(BF)就绪
if(!(DB&0x80))//读取忙信号
//不忙跳出
if(a&10)//防止死循环
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=//送出控制命令
RSRWE=4; //R/W=0,RS=0,E=1写控制命令
当寄存器控选择控制信号RS=0写指令寄存器(IR)即为写控制命令,RS=1时写数据寄存器即为写数据。
写数据驱动函数代码如下:
void write_data(uchar Data)
check_busy();
RSRW=2; //R/W=0,RS=1,E=0写控数据准备
DB=D //送出数据
RSRW=6; //R/W=0,RS=1,E=1写数据
1)设定显示字符行列地址
在AMPIRE12864上显示一个字符是必须先设定其行列地址,设定行列地址的操作指令见表2-11。
设定显示字符行列地址驱动函数代码如下:
void set_xy(uchar x,uchar y)//x为行,y为列
if(y&=64)//列地址大于等于64时右屏显示
else//列地址小于64时左屏显示
write_cm(0x40|y);写列地址
write_cm(0xb8|x);写行地址
2)AMPIRE12864的初始化
在对AMPIRE12864操作前须初始化,对其做一些必要的设置。这些设置包括:基本指令操作设置;开显示,关光标,不闪烁;清除显示;光标的移动方向,DDRAM的地址计数器加1。设置的操作指令详见表2-11。
AMPIRE12864初始化驱动函数代码如下:
void LCD_Init()
write_cm (0x30);//30H--基本指令操作delayus(4);write_cm (0x0c);//开显示,关光标,不闪烁。delayus(10);write_cm (0x01);//清除显示delayms(10);
write_cm (0x06);//光标的移动方向左,DDRAM的地址计数器(AC)加1。
delayus(10);
3)AMPIRE12864显示功能模块
AMPIRE12864显示功能通过函数void disp(ucharindex[4][16])实现。入口参数uchar index[4][16]为字库索引数组,给出在指定位置显示的字符的图形点阵在uchar code zk[][16]中的索引地址,本系统中所有字符的图形点阵都由字模提取软件提取并存储在图形点阵数组ucharcode zk[][16]中。
在voiddisp(uchar index[4][16])调用了两个函数:void Disp_hz(uchar R,ucharL,uchar *p)用来显示汉字,其程序代码如下:
void Disp_hz(uchar R,uchar L,uchar *p)
for(i=0;i&16;i++)
set_xy(2*R,16*L+i);//设定显示位置
write_data(p[i]);//写入DDRAM
set_xy(2*R+1,16*L+i);
write_data(p[i+16]);
入口参数uchar R,uchar L分别指明字符或汉字的显示位置的行号和列号,uchar *p为图形点阵数组的首地址指针。
voidDisp_zf(uchar R,uchar L,uchar *p)用来显示ASCII字符,其程序代码如下:
voidDisp_zf(uchar R,uchar L,uchar *p)
for(i=0;i&8;i++)
set_xy(2*R,8*L+i);
write_data(p[i]);
set_xy(2*R+1,8*L+i);
write_data(p[i+8]);
入口参数uchar R,uchar L分别指明字符或汉字的显示位置的行号和列号,uchar *p为图形点阵数组的首地址指针。
AMPIRE12864显示功能模块程序代码如下:
void disp(uchar index[4][16])
uchar i,j;
for(i=0;i&4;i++)
for(j=0;j&16;j++)
if(index[i][j]&14)
Disp_hz(i,j/2,&zk[index[i][j]][0]);//显示汉字
Disp_zf(i,j,&zk[index[i][j]][0]);//显示ASCII字符
显示以一整屏为单位,在显示之前应先给index[4][16]赋值以确定液晶显示器的显示内容。如给index[4][16]以下赋值:
index[0][2]=131;index[0][4]=133;
index[0][6]=135;index[0][8]=137;
index[0][10]=139;index[0][12]=139;
显示的内容如图3-6所示。
图3-6 液晶显示器显示示例
AMPIRE12864驱动程序各函数包含于头文件12864.h中,在主函数中加入宏定义#include&12864.h&。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
LCD液晶资料LCM12864资料中文
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口LCM12864,通过MSP430控制,写入程序后却没有反应是怎么回事?_msp430吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:2,716贴子:
LCM12864,通过MSP430控制,写入程序后却没有反应是怎么回事?收藏
本人刚开始学习430,很多不懂,恳请前辈们指教,,,,程序如下:#include&msp430g2553.h&//端口初始化程序void port_init(){
P2OUT=0; }//延时程序void delay_ms(unsigned int t){
unsigned int i,j;
for(i=0;i&t;i++)
for(j=0;j&100;j++);
}}//void read_busy(){
P2OUT&=~BIT5;//RS=0;
P2OUT|=BIT4;//RW=1;
P2OUT|=BIT3;//EN=1;
while(P1OUT&0x80);
P2OUT&=~BIT3;//EN=0;}//显示屏命令写入子程序void LCD_write_com(unsigned char com){
read_busy();
delay_ms(1);
P2OUT&=~BIT5;//RS=0;
P2OUT&=~BIT4;//RW=0;
P2OUT&=~BIT3;//EN=0;
P1OUT=//命令写入端口
delay_ms(5);
P2OUT|=BIT3;//EN=1;
delay_ms(5);
P2OUT&=~BIT3;//EN=0;}//显示屏数据写入子程序void LCD_write_data(unsigned char data){
read_busy();
delay_ms(1);
P2OUT|=BIT5;//RS=1;
P2OUT&=~BIT4;//RW=0;
P2OUT&=~BIT3;//EN=0;
P1OUT=//数据写入端口
delay_ms(5);
P2OUT|=BIT3;//EN=1;
delay_ms(5);
P2OUT&=~BIT3;//EN=0; }//设置光标函数void Set_cursor(unsigned char x,unsigned char y){
switch(x)//确定行号
case 0x00:i=0x80;
case 0x01:i=0x88;
case 0x02:i=0x90;
case 0x03:i=0x98;
i=y+i;//确定列号
LCD_write_com(i);}//指定位置显示字符串函数void Display_string(unsigned x,unsigned y,unsigned char *str){
unsigned char i=0;
Set_cursor(x,y);
while(*str!='\0')
LCD_write_data(str[i]);
}}//显示字符函数void Display_char(unsigned char s){
LCD_write_data(s);
delay_ms(1);}//指定位置显示汉字函数,可自动换行void Display_hz(unsigned char x,unsigned char y,unsigned char *hz){
unsigned char i=0;
Set_cursor(x,y);
while(*hz!='\0')
LCD_write_data(hz[i++]);
LCD_write_data(hz[i++]);
if((y+i)%16==0)
Set_cursor(x,0);
}}//display显示测试结果void display(){
Display_hz(1,0,"交通大学");
Display_hz(2,0,"信息学院");
Display_hz(3,0,"通信工程");
Display_string(4,0,"联系电话");}//显示屏初始化函数void LCD_init(void){
delay_ms(45);
P2OUT|=BIT0;//8位并行口
//复位操作
P2OUT|=BIT1;//RST=1
delay_ms(1);
P2OUT&=~BIT1;//RST=0
delay_ms(1);
P2OUT|=BIT1;//RST=1
delay_ms(1);
//功能设定
LCD_write_com(0x30);//设置为8位并行口,基本指令集
delay_ms(10);
LCD_write_com(0x30);//再次设置为8位并行口,基本指令集
delay_ms(5);
//显示开关设置
LCD_write_com(0x0c);//游标显示关,正常显示,整体显示开
delay_ms(10);
//显示清屏
LCD_write_com(0x01);
delay_ms(5);
//进入点设置
LCD_write_com(0x06);//设置为游标右移,DDRAM位地址加1,画面不移动
delay_ms(5);
LCD_write_com(0x0c);//开显示}//主程序void main(void){
WDTCTL=WDTPW+WDTHOLD;
port_init();
LCD_init();
delay_ms(1);
display();
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或12864使用手册_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
12864使用手册
很​方​便​的​哦
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
12864液晶显示图片原理_格式修改版_
下载积分:200
内容提示:12864液晶显示图片原理_格式修改版_——所有资料文档均为本人悉..
文档格式:PDF|
浏览次数:68|
上传日期: 07:38:37|
文档星级:
该用户还上传了这些文档
12864液晶显示图片原理_格式修改版_
官方公共微信

我要回帖

更多关于 lcm12864显示花屏 的文章

 

随机推荐