概述
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上调试通过,在整个系统中效果不错。本系统体积小、功耗少、接口简单,值得在智能仪器仪表和低功耗电子产品行业推广。
上一篇:嵌进式RTOS在MSP430单片机上的实现
下一篇:如何来为MSP430单片机加密?
推荐阅读最新更新时间:2024-11-03 12:56
设计资源 培训 开发板 精华推荐
- TB6608FNG 2 相双极步进电机驱动器评估板
- 具有复位和延迟时间选择功能的 NCV8660 极低 Iq LD0 150 mA 稳压器的典型应用
- u盘大小的便携式wifi杀手
- 凄凄切切
- STM32G484E-EVAL,带有 STM32G484QE MCU 的评估板
- 使用 Diodes Incorporated 的 AP1184P 的参考设计
- DI-91 - 12 W 通用输入 CV 适配器
- 【训练营_进阶班】物联网插座
- AD9625-2.0EBZ,基于 AD9625 12 位、2 GSPS 模数转换器的评估板
- AT91SAM9XE-EK,评估套件专为基于 SAM9XE ARM9 MCU 的应用而设计
- 报名直播赢【保温杯】等好礼|TI MSPM0 MCU 在汽车系统中的应用
- 拆惊喜抽奖:泰克全新3系列MDO和4系列MSO示波器来啦
- TI直播:精讲“双向CLLLC谐振、双有源电桥(DAB)参考设计”
- Fluke 总有一款适合你需求的红外热像仪!参与赢好礼
- ADI & 世健 新基建系列第三期——5G 仪器仪表和测试 答题赢好礼!
- 有奖直播:意法半导体SiC产品及其工业应用指南
- 答题赢好礼|英飞凌带你走进碳化硅 (SiC)世界
- 直播已结束【最新 TI C2000实时控制芯片 — F28003X】
- TI有奖直播:使用 MSPM0 AEC-Q100 MCU 设计更智能的汽车系统
- TI模电选课测试体验活动第二期!模电怎么学?TI帮你订制课程清单~