历史上的今天
今天是:2025年03月30日(星期日)
2021年03月30日 | MSP430与图形液晶显示模块接口应用
2021-03-30 来源:eefocus
概述
MSP430F149是德州仪器公司最近推出的MSP430系列超低功耗控制器中的一种,电源电压范围为1.8V至3.6V,可以用电池工作,而且使用时间长,适用于电池供电的手持设备使用。另外,液晶显示器具有功耗低、体积小、重量轻等特点,图形LCD除了显示字符、数字外,还可以显示汉字、图形、曲线等LED无法显示的功能,用途广泛。因此以MSP430为核心的LCD在智能仪器仪表和低功耗电子产品行业有广泛的发展前途。
本文在简单介绍液晶显示器LM12864FBC的驱动器KS0108B和KS0107B的结构和功能基础上,介绍了MSP430F149的LCD硬件接口和软件编程特点。
硬件设计
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驱动的。
软件设计
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上调试通过,在整个系统中效果不错。本系统体积小、功耗少、接口简单,值得在智能仪器仪表和低功耗电子产品行业推广。
史海拾趣
|
目录: 第一章 单片微型计算机概述 第二章 MCS-51单片机组成和原理 第三章 MCS-51指令系统 第四章 MCS-51中断系统与定时器/计数器 第五章 8098单片机的结构原理 第六章 8098指令系统 第七章 8098中断、定时器与I/O寄存器 第八章 8098高速 ...… 查看全部问答> |
|
我用169的Timer B,4M的晶振,写了一个定时器程序,用的是增计数模式,即到CCR0就产生中断,我把CCR0设为200,每进一次中断,变量+1,产生20000次中断后,改变一次IO口状态,用示波器观察很正常,高电平宽度为1s。但是我将CCR0改为100,40000次中断 ...… 查看全部问答> |
|
380转让LM3S8962和LM3S811(TI原厂评估板) 380包邮转让TI LM3S8962,另有LM3S811(100元)转让,LM3S8962板子包装是开过的,板子测试OK,只下过20来次程序,板子很新.LM3S811包装是没有开过的,崭新的TI的原板,因为自己学FPGA,没有时间钻研LM3S8962,所以想转让,本人是学生,没有诚意的勿扰 ...… 查看全部问答> |
|
前不久,公司买了一套real6410的开发板,在调试过程中出现了一些问题,经过查找资料和实验,不断的排查,找了问题的所在。不过声明一下,我这里没有进行系统的测试,问题的真正原因有待深入排查,至少在我这里是解决了一些问题。 开发平台:Real ...… 查看全部问答> |
|
最近在做一个项目,是用fpga配置ad9923a 来驱动 ccd ,型号是icx205al 。配置ad9923a的时序是串口方式配置,由于要配置的寄存器多达140个,每个由12位地址和28位数据总共40位组成 (不足位的补0),里面还有部分需要延时,附上时序图,有哪位 ...… 查看全部问答> |
|
replyreload += \',\' + 1582393;Timson,如果您要查看本帖隐藏内容请回复 [ 本帖最后由 有缘于你 于 2013-10-27 14:28 编辑 ]… 查看全部问答> |




