在线情况
楼主
  • 头像
  • 级别
  • 门派
  • 职务总版主
  • 声望+9
  • 财富5
  • 积分3065
  • 经验390701
  • 文章6744
  • 注册2006-03-07
实用的MSP430单片机与LCD显示器接口技术
作 者 :燕山大学 电气工程学院自动化系 刘福才 王冬云 张海良
摘自:工业控制技术

1 引言
电子系统的开发朝着功耗低,速度快,体积小的方向飞速发展。TI公司的MSP430系列超低功耗单片机凭借自身优良的品质和工作性能被广泛的应用于越来越多的领域中。本文给出了MSP430F149单片机与5V电源的LCD液晶显示器之间的逻辑接口的两种解决方案。
MSP430F149是美国TI公司推出的超低功耗混合信号16位单片机系列中的一种,在1.8~3.6V电压、1MHz的时钟下运行耗电电流在0.1~400μA之间;具有16个中断可以任意嵌套;可将CPU置于省电模式用中断方式唤醒只需6μs,可编制出实时性特别高的源代码;高效的查表处理方法;8MHz晶体驱动下,指令周期为125ns。内含8个外部通道的12位高性能A/D转换器和一个自动扫描功能的容量为16个字的可编程缓冲器,使得采样速率可达200kHz。片内含有两个定时器:带有7个捕获/比较寄存器的16位Timer_B和带有3个捕获/比较寄存器的16位Timer_A。该芯片具有60KB的FlashROM,2kB的RAM,它可以10万次擦写,有超强的抗干扰能力[1]。此外,MSP430F149具有强大的中断输出功能,48个I/O引脚,每个I/O口分别对应输入、输出、功能选择、中断等多个寄存器,使得功能口和通用I/O口复用,在对同一个I/O口进行操作前首先要选择其要实现的功能,这样大大的增强了端口的功能和灵活性,大大提高了对外围设备的开发能力,本文就是利用I/O口来开发LCD显示系统。

2 逻辑电平不同接口时出现的问题
本系统用到的MSP430F149的供电电压是3.3V,输入电压最大也不能超过3.3V,而用到的LCD是12864-12A,它的供电电压是5V,输出电压也达到了5V,两者属于不同电源电压的逻辑器件,相互接口时会存在以下三个问题[2-3]:
(1) 加入到输入输出引脚上的电平的问题。器件对加入到输入脚或者输出脚上的最大电压是有限制的。这些引脚由二极管或分离元件接到Vcc。如果接入的电压过高,则电流将会通过二极管或分离元件流向电源。本系统中3.3V的MSP430F149的引脚上如果直接接到LCD的引脚上,LCD上电以后,引脚上输出的5V电压会向MSP430F149的3.3V电源充电。持续的电流会损坏二极管和电路元件。
(2) 两个电源间电流的互串问题。在等待或掉电方式时MSP430F149的3.3V电源降落到0V,大电流将流通到地,这使总线上的高电压被下拉到地,这些情况将会引起信号丢失和元件损坏。必须注意的是:不管是在3.3V的工作状态还是在0V的等待状态都不允许电流流向Vcc。
(3) 输入转换门限问题。每个器件都会有自己的驱动门限,MSP430F149引脚上的输出电压经过转换后必须达到LCD的驱动电压门限,才能够驱动LCD。如果单纯考虑MSP430F149引脚最大电压限制而将接口处电压钳制在一个很小的值,系统也是不能运行的。

3 MSP430与LCD的逻辑接口问题解决方案
3.1 基于三极管的接口实例
图1所示的接口电路是由两个三极管组成的。当MSP430F149的输出信号为高时,是2.8V的电平,作为基极输入信号使3DG102A导通,因为有上拉电阻,集电极的输出信号是0V,此时S8050不导通,接到S8050集电极的LCD的引脚得到的电平信号为5V,满足了LCD的输入门限,能够触发显示功能。同样,MSP430F149的输出信号为低时,是0V的电平,作为基极输入信号不能使3DG102A导通,因为有上拉电阻,集电极的输出信号是5V,此时S8050导通,接到S8050集电极的LCD的引脚得到的电平信号为0V,满足LCD低电平要求。
      [imga]../../upload/2006/10/15/141503.gif[/imga]
               图1 双三级管组成的接口电路
图2所示的接口电路是由一个三极管构成的。显然,此时的接口输出的逻辑信号与MSP430F149输出的逻辑信号相反。但输出信号的电平提升到了足够驱动LCD的幅值,这里需要注意的是编程时所有I/O口输出的命令数值应取反后再输出,以满足图1所示接口的逻辑要求。  
      [imga]../../upload/2006/10/15/141532.gif[/imga]
               图2 基于单个三极管的接口电路
3.2 基于同向门、反相门的实用接口电路
图3所示的接口电路由一个同相门7407构成,能够将MSP430F149输出的高电平信号提升到5V,而保持低电平信号不变,从而达到了LCD的驱动要求。MSP430F149引脚处1k电阻起到限流作用,保证MSP430的引脚处电流不会过高。
    [imga]../../upload/2006/10/15/141609.gif[/imga]
               图3 基于一个同相门的接口电路
图4所示的由两个非门组成的接口电路,输出信号与MSP430F149的输入信号同逻辑,由于上拉电阻的作用,高低电平幅值达到LCD驱动要求。
    [imga]../../upload/2006/10/15/141653.gif[/imga]
              图4 两个非门组成的接口电路
图5所示接口电路和图2所示的有同样的效果,高低电平幅值达到LCD驱动要求,但需注意是:要求编程时I/O口输出的命令数值前取非。
     [imga]../../upload/2006/10/15/141738.gif[/imga]
               图5 基于一个非门的接口电路
以上5种接口电路中,解决了MSP430引脚上的最大电压限制问题;输出端口高低电平幅值达到LCD驱动要求;显然,更不会出现电流互串的问题。解决了以上不同电源电压逻辑器件相互接口时的三个基本问题。其中此系统中的器件都很便宜,且原理简单易懂,适合学生在初期学习期间使用。
3.3 其它接口电路的特点
现在市面上流行的一种双电源电平移位器74LVC4245也适合本系统,如图6所示,它需要3.3V和5V两种电源,双电源能够保证两边端口的输出摆幅达到满电源幅值,并且有很好的噪声抑制作用,因此由该器件构成的接口电路应用于3V和5V的混合系统中是很理想的。它的缺点是增加了功耗。
      [imga]../../upload/2006/10/15/141815.gif[/imga]
               图6 双电源电平移位器74LVC4245
文献[4]给出了一种基于稳压管的接口电路(如图7所示),这种方法利用3.6V稳压管的电位钳制作用将MSP430引脚端的电压限制在它的容限以内,但LCD端的输入电压为2.25V,与LCD的2.20V门限电压非常接近,如受到环境及其它不稳定因素影响,实际应用效果并不理想。
      [imga]../../upload/2006/10/15/141900.gif[/imga]
                图 7 基于稳压管的接口电路
3.4 MSP430F149控制LCD液晶显示系统整体电路
MSP430F149的I/O口都是典型的复用端口(外围模块功能和I/O端口功能),在对LCD读写操作之前要选择为I/O端口功能,更要设置P3、P4口为输出口。本系统接口电路如图8所示,端口功能分配如下:P3.5接到LCD的E端口,作为使能端,P3.6和P3.7作为控制口分别接到R/W和RS引脚。P4.0~P4.7作为数据线分别接到LCD的DB0~DB7。
       [imga]../../upload/2006/10/15/142052.gif[/imga]
               图8 MSP430F149控制LCD液晶显示系统

4 程序清单
基于C语言的MSP430F149控制LCD显示程序如下:
/*************显示主程序**********************/
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0XFF;
P1OUT=0X01;
Init_lcd();
Lcd_InsWrite(0x80); //显示在第一行
LCD_DataWrite(0xB9); 
// 显示一个“光”字
LCD_DataWrite(0xE2);
LCD_DataWrite(0XB7); //伏//
LCD_DataWrite(0xFC);
LCD_DataWrite(0xB5); //电//
LCD_DataWrite(0xE7);
LCD_DataWrite(0xD5); //站//
LCD_DataWrite(0xBE);
LCD_DataWrite(0xCF); //系//
LCD_DataWrite(0xB5);
LCD_DataWrite(0xCD); //统//
LCD_DataWrite(0xB3);
delay(400);

void delay(int m) //延时程序
{
int i=0;
for(i=0;i<m;i++)
;
}
/*********显示文字**************/
void LCD_DataWrite(char Data)
{
P4DIR=0XFF; //P4口设置成输出模式
P3OUT=0X9F; //RS=1, R/W=0 写数据 
P3OUT|=BIT5; //E=1 使能
P4OUT=Data; //写数据
delay(3); //延时
P3OUT&=~BIT5; //E=0锁存
/**********写指令*************/
void Lcd_InsWrite(char Instruction)
{ P4DIR=0XFF; // P4口设置成输出模式
P3OUT=0x1F; // RS=0,R/W=0 写指令
P3OUT|=BIT5; //E=1 使能
P4OUT=Instruction; //功能设定
delay(3); //延时
P3OUT&=~BIT5; //E=0:下降沿锁存数据
}
/************初始化LCD***********************/ 
void Init_lcd(void)
{
P3DIR=0XE0; //P3.5-E,P3.6-R/W,P3.7-RS输出 
Lcd_InsWrite(0x30); //基本指令
delay(400);
Lcd_InsWrite(0x01); //清除显示
delay(400); 
Lcd_InsWrite(0x0e); 
// 显示状态设定:整体显示,游标on,游标位置反白
delay(400);
运行程序清单中所示程序将在LCD12864的第一行左起显示“光伏电站系统”六个字,适合图1,图3,图4中的接口电路设计。对图2,图5的中接口电路,由于输入输出为反相逻辑关系,编程时需在此程序的每一条I/O口输出的命令数值前取非,虽然程序复杂一些,但接口电路相对较简单。

5 结束语
通过开发MSP430F149控制驱动的LCD液晶显示系统,对3.3V和5V系统之间的逻辑接口问题进行了研究,给出了基于三极管和基于逻辑门的两类实用接口电路设计方案。由于该芯片功能强大十分适合中小型仪器的开发,此系统也可以作为其它便携式仪器的显示部分。
[COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
在线情况
2
  • 头像
  • 级别
    • 积分1
    • 经验30
    • 文章1
    • 注册2006-10-16
    最近正要做这方面的东东,参考参考先
    3Q
    微控网感谢您的参与
    在线情况
    3
    • 头像
    • 级别
      • 积分1
      • 经验503
      • 文章1
      • 注册2006-10-16
      换成其他的液晶通用吗?
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分3
        • 经验603
        • 文章14
        • 注册2006-08-26
        现在已经有低压LCM了,不必如此麻烦,当然作为一个思路,对其他接口转换可供参考。
        微控网感谢您的参与
        Powered by LeadBBS 9.2 .
        Page created in 0.1875 seconds with 5 queries.