液晶128*64疑问

lenggu   2010-5-27 20:31 楼主
   我用MSP430F149控制12864的显示,当程序写进去后,只有背光亮,就是不显示要显示内容,有没有谁遇到过类似的问题,给我帮帮忙,在这里谢过了!
  

回复评论 (24)

我刚接触单片机的时候遇到过,那时候是没给IO口加上拉电阻导致的
点赞  2010-5-27 21:06
应该是I/O初始化错误。找个例程比较一下正确的I/O初始化
点赞  2010-5-27 21:47
应该不是那些问题,找到了TI所给的例程,有完整的程序,但是还是不行,不知道是什么问题!
点赞  2010-5-27 21:58
如果不是程序的问题就是硬件电路的问题了
看看IO口设置是不是正确的,MSP430F149是不是工作正常
点赞  2010-5-27 22:28
如果不是硬件问题的话大多数就是时序问题了。
点赞  2010-5-27 22:56
初步怀疑时序问题,楼主你要贴代码出来,别人才能帮你,而且你要确定硬件没有接错,多检查硬件,顺便说说你硬件怎么接的,那么很容易判断问题的,不是硬件问题,就是IO设置问题,还有就是时序问题,初始化问题。
点赞  2010-5-28 00:28
128*64的LCD有很多種,有的pin腳是不相容的,需詳細的看看LCD的Datasheet^
点赞  2010-5-28 16:43
程序的时序对不 还有硬件连接有没有问题
点赞  2010-5-29 09:43
#include
typedef unsigned char uchar;
typedef unsigned int  uint;

extern const unsigned char shuzi_table[];

#define LCD_DataIn    P4DIR=0x00    //数据口方向设置为输入
#define LCD_DataOut   P4DIR=0xff    //数据口方向设置为输出
#define LCD2MCU_Data  P4IN
#define MCU2LCD_Data  P4OUT
#define LCD_CMDOut    P3DIR|=0x07      //P3口的低三位设置为输出
#define LCD_RS_H      P3OUT|=BIT0      //P3.0
#define LCD_RS_L      P3OUT&=~BIT0     //P3.0
#define LCD_RW_H      P3OUT|=BIT1      //P3.1
#define LCD_RW_L      P3OUT&=~BIT1     //P3.1
#define LCD_EN_H      P3OUT|=BIT2      //P3.2
#define LCD_EN_L      P3OUT&=~BIT2     //P3.2

/*******************************************
函数名称:Delay_1ms
功    能:延时约1ms的时间
参    数:无
返回值  :无
********************************************/
void Delay_1ms(void)
{
        uchar i;
   
        for(i = 120;i > 0;i--)  _NOP();
}
/*******************************************
函数名称:Delay_Nms
功    能:延时N个1ms的时间
参    数:n--延时长度
返回值  :无
********************************************/
void Delay_Nms(uint n)
{
    uint i;
   
    for(i = n;i > 0;i--)    Delay_1ms();
}
/*******************************************
函数名称:Write_Cmd
功    能:向液晶中写控制命令
参    数:cmd--控制命令
返回值  :无
********************************************/
void Write_Cmd(uchar cmd)
{
    uchar lcdtemp = 0;
                       
    LCD_RS_L;
    LCD_RW_H;
    LCD_DataIn;  
    do                       //判忙
    {   
        LCD_EN_H;
               _NOP();                                       
               lcdtemp = LCD2MCU_Data;
               LCD_EN_L;
        
    }
    while(lcdtemp & 0x80);
   
    LCD_DataOut;   
    LCD_RW_L;                 
    MCU2LCD_Data = cmd;
    LCD_EN_H;
    _NOP();                                                                         
    LCD_EN_L;
}
/*******************************************
函数名称:Write_Data
功    能:向液晶中写显示数据
参    数:dat--显示数据
返回值  :无
********************************************/
void  Write_Data(uchar dat)
{
    uchar lcdtemp = 0;   
        
    LCD_RS_L;
    LCD_RW_H;  
    LCD_DataIn;   
    do                       //判忙
    {   
        LCD_EN_H;
        _NOP();                                               
        lcdtemp = LCD2MCU_Data;
        LCD_EN_L;      
    }
    while(lcdtemp & 0x80);  
   
    LCD_DataOut;
    LCD_RS_H;
    LCD_RW_L;  
        
    MCU2LCD_Data = dat;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
}  
/*******************************************
函数名称:Ini_Lcd
功    能:初始化液晶模块
参    数:无
返回值  :无
********************************************/
void Ini_Lcd(void)
{                  
    LCD_CMDOut;    //液晶控制端口设置为输出
   
    Delay_Nms(50);
    Write_Cmd(0x30);   //基本指令集
    Delay_1ms();
    Write_Cmd(0x02);   // 地址归位
    Delay_1ms();
    Write_Cmd(0x0c);   //整体显示打开,游标关闭
    Delay_1ms();
    Write_Cmd(0x01);   //清除显示
    Delay_Nms(2);
    Write_Cmd(0x06);   //游标右移
    Delay_1ms();
    Write_Cmd(0x80);   //设定显示的起始地址
}
/*******************************************
函数名称:Disp_HZ
功    能:控制液晶显示汉字
参    数:addr--显示位置的首地址
          pt--指向显示数据的指针
          num--显示字符个数
返回值  :无
********************************************/
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
    uchar i;
               
    Write_Cmd(addr);
      for(i = 0;i < (num*2);i++)
      Write_Data(*(pt++));
}
上面是12864的驱动程序

各位帮我看看是什么问题!
电路连接没有问题!
所用液晶是KYDZ12864M这个型号的,不过就是不显示,液晶确定是好的
我用HS12864 这个型号的液晶都可以显示,没有问题,但是换上KYDZ12864M就不行了
点赞  2010-5-29 22:30
初步怀疑是你的延时函数的问题,造成你的时序延时很多都达不到要求。不知道楼主你的mcu的主频多少?也就是你的机器周期是多少?

你的延时函数,是for下面只有120个NOP空指令,这样就有1ms了?我很怀疑。所以楼主你将具体的机器周期多大,计算一下。
点赞  2010-5-30 00:03
液晶对延时的要求很严格,你的延时好像有问题,或者两款液晶的硬件环境不一样,我曾经也碰到过这种现象,后来我是改的延时以及程序的时序
点赞  2010-6-1 09:20
谢谢啦!我得好好学习学习啦!
点赞  2010-6-2 23:15
12864有的液晶驱动有并口方式和串口方式的选择管脚,你看看说明!
点赞  2010-6-3 08:18
恩,可以逐个函数的输出,用示波器测试下时序是否和pdf上面说的一致,有时候计算的不准确,造成延时不够。
点赞  2010-6-3 09:48
430的不懂  不过 用过51的
帮你顶
点赞  2010-6-4 14:01
这中液晶屏的使用延时很重要,写命令的时候后面严一点时  这样你再试试   
点赞  2010-6-4 23:50
学习一下  。。。路过   现在了解了一些  谢谢!
点赞  2010-6-5 22:24
应该就是延时的问题.
点赞  2010-6-6 14:11
我用过132*65的液晶 如果写命令函数/写数据函数不对的话 也会无法显示
建议你再把这两个函数逐句执行以下 执行的命令 是不是你写的那样的
点赞  2010-6-12 15:10
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复