首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年8月16日星期五
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
MSP430与图形液晶显示模块接口及应用
The Interface and Application of MSP430 and Liquid Crystal Graphic Module
■ 武汉大学电气工程学院 杜训新 陈昌旺

摘 要:本文详述了MSP430F149和图形液晶显示模块LM12864FBC接口性能特点及方法, 设计了硬件电路以及接口软件。
关键词:低功耗;MSP430F149;LM12864FBC;硬件电路

概述

MSP430F149是德州仪器公司最近推出的MSP430系列超低功耗控制器中的一种,电源电压范围为1.8V至3.6V,可以用电池工作,而且使用时间长,适用于电池供电的手持设备使用。另外,液晶显示器具有功耗低、体积小、重量轻等特点,图形LCD除了显示字符、数字外,还可以显示汉字、图形、曲线等LED无法显示的功能,用途广泛。因此以MSP430为核心的LCD在智能仪器仪表和低功耗电子产品行业有广泛的发展前途。
本文在简单介绍液晶显示器LM12864FBC的驱动器KS0108B和KS0107B的结构和功能基础上,介绍了MSP430F149的LCD硬件接口和软件编程特点。

图1 MSP430F149与LM12864FBC接口原理图(略)

硬件设计

KS0108B的接口信号

KS0108B和KS0107B是LM12864FBC的共同驱动芯片,其中KS0107B是公共行驱动芯片,KS0108B是通过它产生的时序控制的。二片KS0108B是列驱动及控制芯片,KS0108B与微处理器的接口信号如下:
DB0-DB7:数据总线;
CSA、CSB:芯片选择信号A、B,CSA(B)=1,选通列驱动左、右半部分,CSA(B)=0,不选通列驱动左、右半部分;
D/I:D/I=1操作数据,D/I=0操作指令代码;
R/W:R/W=1读操作,R/W=0写操作;
E:输入使能。

LM12864FBC模块的引脚说明

MSP430F149与LM12864FBC接口电路

本液晶显示模块是128 64的LCD,利用P3.0-P3.4作为LCD的CSA、CSB、D/I、R/W和E的控制线,P4为LCD的数据线。由于MSP430的I/O口都是复用端口,因此必须将用到的引脚设为输入/出口。此外,MSP430是3.3V供电,而LCD是5V驱动的,我们可以在MSP的输出口对地接3.6V的嵌位二极管,在保证MSP的端口缪共怀拗档那疤嵯拢迪諱SP到LCD电平的转换。

图2 KS0108B操作流程图(略)

软件设计

KS0108B指令集

KS0108B一共有七条指令,从作用上可分为两类。第一条和第二条指令为显示状态设置类;其余指令为数据读/写操作指令。
LM12864FBC的软件编程
(1)读液晶显示器状态子程序
void lcdstate(int cs) //cs代表液晶的边csa,csb
{
int csflag;
P4DIR=0x00;//P4口为输入口
while(1)
{ if(cs==1)
{P3OUT|=BIT0;
P3OUT&=~BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3; //CSA=1,CSB=0,D/I=0,R/W=1,以便读液晶状态
}
else
{ P3OUT&=~BIT0;
P3OUT|=BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3; //CSA=1,CSB=0,D/I=0,R/W=1,以便读液晶状态
}
P30UT&=~BIT4;
delay(3);
P30UT|=BIT4;
delay(3);
P30UT&=~BIT4; //E信号低-高-低满足时序要求
csflage=P4DIR&0x80;
if(csflag=0) break;//若液晶空闲,停止等待
}
}
(2)对液晶显示器发指令子程序
void transport(trans,cs) //该函数采用形参和实参传送数据,trans为一个形参
int trans,cs;
{
lcdstate(cs);//判断液晶是否忙?
P4DIR= 0xFF;//P4口为输出口
delay(3);
if(cs==1)
{P3OUT|=BIT0;
P3OUT&=~BIT1;
P3OUT&=~BIT2;
P3OUT&=~BIT3; //CSA=1,CSB=0,D/I=0,R/W=0,以便写入指令
}
else
{ P3OUT&=~BIT0;
P3OUT|=BIT1;
P3OUT&=~BIT2;
P3OUT&=~BIT3;//CSA=0,CSB=1,D/I=0,R/W=0,以便写入指令
}
P4DIR=0xFF|trans; //需要写入的命令字送数据线
P30UT&=~BIT4;
delay(3);
P30UT|=BIT4;
delay(3);
P30UT&=~BIT4; //E信号低-高-低满足时序要求
}
(3) 写数据子程序
void wdata(write,clmadd,cs) //write为需写入的数据,clmadd为列地址
int write,clmadd,cs;
{ transport(clmadd,cs);//设置列地址
lcdstate(cs) ;//判断液晶是否忙?
P4DIR= 0xFF;//P4口为输出口
delay(3);
if(cs==1)
{P3OUT|=BIT0;
P3OUT&=~BIT1;
P3OUT|=BIT2;
P3OUT&=~BIT3; //CSA=1,CSB=0,D/I=1,R/W=0,以便写入要显示的数据
}
else
{ P3OUT&=~BIT0;
P3OUT|=BIT1;
P3OUT|=BIT2;
P3OUT&=~BIT3; //CSA=1,CSB=0,D/I=1,R/W=0,以便写入要显示的数据
}
P4DIR=0xFF|write; //需要写入的命令字送数据线
P30UT&=~BIT4;
delay(3);
P30UT|=BIT4;
delay(3);
P30UT&=~BIT4; //E信号低-高-低满足时序要求
}
(4)开,关,清屏子程序
void dison(cs) //显示开(关)
int cs;
{ int csflage;
while(1)
{transport(0x03e,cs);//发送控制命令,若关显示则为transport(0x03f,cs)
lcdstate(cs);
P4DIR=0x00;//P4口为输入口
while(1)
if(cs==1)
{P3OUT|=BIT0;
P3OUT&=~BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3; //CSA=1,CSB=0,D/I=0,R/W=1,以便读液晶状态
}
else
{ P3OUT&=~BIT0;
P3OUT|=BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3; //CSA=1,CSB=0,D/I=0,R/W=1,以便读液晶状态
}
P30UT&=~BIT4;
delay(3);
P30UT|=BIT4;
delay(3);
P30UT&=~BIT4; //E信号低-高-低满足时序要求
csflage=P4DIR&0x80;
if(csflag=0) break;//若液晶空闲,停止等待
}
}
void clear(int cs) //清屏子程序
{ int pagenum,pageadd,clmadd,clmsum;//定义局部变量
for(pagenum=0x08,pageadd=0x0b8;pagenum>0;pagenum--,pageadd++)
{ transport(pageadd,cs);
for(clmsum=0x40;clmsum<0x7f;clmsum++)
{lcdstate(cs) ;//判断液晶是否忙?
wdata(0x00,clmsum,cs);
}
}
}
有了上述各子程序后,就可以在显示屏上任意位置显示汉字、字符、数字和其他图形。
结束语
上述部分只是我们在开发输电线测量变频电源系统时使用的显示模块部分,已经在MSP430仿真器fet_r304上调试通过,在整个系统中效果不错。本系统体积小、功耗少、接口简单,值得在智能仪器仪表和低功耗电子产品行业推广。

         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com