打印

求救!!!!!jm1602c液晶模块没显示.!!!!!!

[复制链接]
2699|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunxflower|  楼主 | 2007-9-8 08:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
液晶模块的型号jm1602c,控制ic是三星的ks0066u
电路:
   数据接p2 
   RS脚接P1.0
   RW 脚接 P1.1
   E  脚接 P1.2

  显示屏什么也看不到,通过接的一个蜂鸣器知道程序已执行完毕,网上有人说多复位几次能显示,但我的复位了N次也没显示出来.
  电路自己焊的,今天重新焊了一块板子,问题依旧.调整了背光亮度,对比度都没结果.不知是否程序有问题,各位大大们,请帮忙分析一下,如果有实验板请帮忙试试看能不能显示.

程序如下
ORG 0000H
AJMP main
ORG 0033H
RS EQU P1.0
RW EQU P1.1
E  EQU P1.2
LCM EQU P2

MAIN:
     acall start                 ;初始化3次
     acall delay                 ;延时
     acall start
     acall delay
     acall start
     acall delay



     mov a,#080h                  
     acall enable      
     mov a,#41h
     acall enable2     

     ajmp $







enable2:    acall lcm_bf           ;数据写入LCM
            setb RS
            clr RW          
            mov lcm,a            
            nop   
            nop
            setb E
            NOP
            NOP
            NOP
            NOP
            clr E
            nop
            nop            
            RET



ENABLE:     acall lcm_bf          ;指令写入LCM
            clr RS
            clr RW          
            mov lcm,a            
            nop   
            nop
            setb E
            NOP
            NOP
            NOP
            NOP
            clr E
            nop
            nop            
            RET


lcm_bf:clr RS             ;检测忙信号
       setb RW
       setb E
       nop
       nop
       nop
       nop
 wt_bf:nop
       jb p2.7,wt_bf
       clr E
       ret


DELAY:                            ;延时
           MOV R3,#019H
       SS0:MOV R1,#0FFH
           MOV R2,ss2
       SS: DJNZ R1,SS
           MOV R1,#0FFH
       SS2:DJNZ R2,SS2
           DJNZ R3,SS0
           RET



start:mov a,#00111000b          ;初始化程序
      acall enable
      acall delay

     mov a,#00001000b
     acall enable
     acall delay

     mov a,#00000001b
     acall enable
     acall delay     

     mov a,#00001111b
     acall enable
     acall delay     

     mov a,#00000110b
     acall enable
     acall delay
     
     ret

相关帖子

沙发
sunxflower|  楼主 | 2007-9-8 08:17 | 只看该作者

头疼两天了

程序能执行完毕,说明模块没有处在忙状态.

请个位高人帮忙啊!!!

使用特权

评论回复
板凳
新好男孩| | 2007-9-8 09:38 | 只看该作者

我来说说

mov a,#00111000b          ;初始化程序
acall enable

以上设置0X38三次不用判忙.

再就是请检查V0引脚硬件联接是否正确.我上次也遇到过和你一样的问题.

下面一段程序供你参考:
// 本程序以验证HD44780,ST7066.
/*--------------------------------------------------------------------*-

    LcdModule.C (V1.00)

     
-*---------------------------------------------------------------------*/
/*
 * Copyright (c) 2006,wsl
 * All rights reserved
 * 
 * 文件名称: LcdModule.C
 * 功能描述: Lcd点阵16x2(st7066u)驱动
 * 其它说明: 
 * 
 * 当前版本: V1.0                * 取代版本:
 * 作     者: wsl             * 修     改:  
 * 版本信息: 2007-9-4         * 修改信息: :
 */
//***********************************************************************
#include"main.h"
#include"Port.h"
#include"LcdModule.h"


// 函数列表
static void LedDelay37us(void);
static void LedDelay2ms(void);
// 写数据/命令
static void LCD_Write(eM_LcdSendCommand style, eM_LcdBusyFlag busy, const unsigned char input);
// 待写入自定义字型RAM字符数组的首地址和字模数组长度
static void Write_CG_RAM(unsigned char *pData, unsigned char Length);    

/*-----------------------------------------------------------------------*-
 * 函数名称: LedDelay37us()
 * 参    数: xx
 * 返    回: xx
 * 函数功能: 软件延时37us
 * 
 * 说    明: Fosc = 22.1184M
 *
 * 当前版本: V1.0                * 取代版本:
 * 作     者: wsl             * 修     改:  
 * 版本信息: 2007-9-4             * 修改信息: 
-*-----------------------------------------------------------------------*/
void LedDelay37us(void)
{
    unsigned char i;
    for (i=0; i<21; i++);
}

/*-----------------------------------------------------------------------*-
 * 函数名称: LedDelay2ms()
 * 参    数: xx
 * 返    回: xx
 * 函数功能: 软件延时2ms
 * 
 * 说    明: Fosc = 22.1184M
 *
 * 当前版本: V1.0                * 取代版本:
 * 作     者: wsl             * 修     改:  
 * 版本信息: 2007-9-4            * 修改信息: 
-*-----------------------------------------------------------------------*/
void LedDelay2ms(void)
{
    unsigned char x, y;
    for (x=0; x<12; x++)
    {
        for (y=0; y<100; y++);
    }
}

#ifdef Is_8bit_Interface_Mode

// 是8位MCU模式
/*-----------------------------------------------------------------------*-
 * 函数名称: LcdReadBusy()
 * 参    数: 
 * 返    回:
 * 函数功能: 读忙BF值,忙标志
 * 
 * 说     明: 读BF及AC值
 *
 * 当前版本: V1.0                * 取代版本:
 * 作    者: wsl              * 修     改:  
 * 版本信息: 2007-09-4           * 修改信息: 
-*-----------------------------------------------------------------------*/
void LcdReadBusy(void)
{    
    // 用于超时,防止LCD模块损坏系统死在此处
    unsigned int i = 0;    
    unsigned char ReadBusy;
    // 选择指令寄存器
    LcdRs = 0; 
    // 选择读模式
    LcdRw = 1;         
    // 允许读/写LCD
    LcdEn = 1;      
    _nop_();    _nop_();  
    // 检测忙信号,忙则等待
    while( ((ReadBusy = DBPort) & 0x80) && (i != 0) )
    {
        i++;
    }
    // 禁止读/写
    LcdEn = 0;
}


/*-----------------------------------------------------------------------*-
 * 函数名称: LCD_Write()
 * 参    数: style            数据/指令选择控制(0:写命令 1:写数据)
 *           busy             是否判忙(0:不判; 1:判忙)
 *           input            style=0时用命令,style=0时用数据,    
 * 返    回:
 * 函数功能: 向LCD写入命令或数据 
 * 
 * 说     明: 
 *
 * 当前版本: V1.0                * 取代版本:
 * 作     者: wsl             * 修     改:  
 * 版本信息: 2006-09-14         * 修改信息: 
-*-----------------------------------------------------------------------*/
void LCD_Write(eM_LcdSendCommand style, eM_LcdBusyFlag busy, const unsigned char input)
{
    if (busy)    // 是否判忙
    {
        LcdReadBusy();
    }

    LcdRs = style;    // 选择寄存器
    _nop_();
    LcdRw = 0;         // 写模式
    
    // 写入Lcd    
    LcdEn = 1;         // 启动数据读写
    DBPort = input;    
    _nop_();        //注意顺序
    LcdEn = 0;            
}
#else


#endif


/*-----------------------------------------------------------------------*-
 * 函数名称: LcdInit()
 * 参    数: 
 * 返    回:
 * 函数功能: Lcd初始化,设置显示模式及光标.
 *             
 * 说     明: 
 *
 * 当前版本: V1.0             * 取代版本:
 * 作     者: wsl          * 修     改:  
 * 版本信息: 2007-9-4         * 修改信息: 
-*-----------------------------------------------------------------------*/
void LceInit(void)
{    
    unsigned char i;
    // 上电延时
    for (i=0; i<30; i++)
    {
        LedDelay2ms();
    }

    for (i=0; i<30; i++)
    {    // 3次设置显示模式,不检测忙信号
        LCD_Write(LCD_COMMAND, LCD_NO_BUSY, 0x38);
        LedDelay37us();
    }

    LedDelay37us();        
    LCD_Write(LCD_COMMAND, LCD_BUSY, 0x0c);         
    LedDelay37us();
    LCD_Write(LCD_COMMAND, LCD_BUSY, 0x01);         
    LedDelay2ms();
    LCD_Write(LCD_COMMAND, LCD_BUSY, 0x06);         
    LedDelay37us();     
}

使用特权

评论回复
地板
sunxflower|  楼主 | 2007-9-8 09:47 | 只看该作者

谢谢

我把VO接地和接+5V都试了,没反映,后来接了个电位器来调,也没有反映.
相当的郁闷^.....
请问你上次是因为VO脚没接好才不能显示的吗?

使用特权

评论回复
5
新好男孩| | 2007-9-8 10:27 | 只看该作者

请问你上次是因为VO脚没接好才不能显示的吗?

是的,后来就用一个1.2K的电阻接地就好了.

使用特权

评论回复
6
sunxflower|  楼主 | 2007-9-8 10:42 | 只看该作者

立马回去试试先

真诚感谢你的帮助

使用特权

评论回复
7
sunxflower|  楼主 | 2007-9-8 18:12 | 只看该作者

问题已解决

对比度问题。VO接地,就出来了,原本是空着,也接过+5V不过都是没得显示。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

48

帖子

0

粉丝