哪位大师帮我看这个1602显示程序,总是不显示



1602-2.jpg


1602.rar
(2008-08-04 09:05:34, Size: 41 KB, Downloads: 2)


我也来说两句 查看全部回复

最新回复

  • jiankewuying (2008-8-04 09:08:27)

    不好意思刚才一直发不了,这是程序#include "xuxiuliang.h"
    #include "1602.h"

    void delay(uchar n)       //3n+1 us
    {
      for (;n>0;n--)
       _nop_();
    }
    /***********************************************************
    函数名称:void lcd_send_byte(uchar ch)
    函数功能: 向LCD发送一字节显示数据
    入口参数:   uchar ch   待显示数据
    出口参数:   无
    全局变量:  无
    调用模块:   delay()
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    void lcd_send_byte(uchar ch)
    {
       LCDWR_DAT=ch;
       delay(100);
    }
    /***********************************************************
    函数名称: void lcd_send_com(uchar ch)
    函数功能: 向LCD 发送一字节命令
    入口参数:  uchar ch  待发送的命令
    出口参数: 无
    全局变量:
    调用模块:  delay()
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    void lcd_send_com(uchar ch)
    {
      LCDWR_COM=ch;
      delay(100);
    }
    /***********************************************************
    函数名称: void lcd_disp_str(uchar *ad,uchar *dispbuf)
    函数功能:  显示字符串函数(向LCD显示地址ad,送以dispbuf 为地址的一串字符串)
    入口参数:  uchar ad 在LCD上显示数据的首地址         
               uchar *dispbuf 待显示数据的地址
    出口参数: 无
    全局变量: 无
    调用模块:  lcd_send_com(uchar ch)
                lcd_send_byte(uchar ch)
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    void  lcd_disp_str(uchar  ad, char *dispbuf)
    {
                 /* 若ad 不在要显示的地置环围内,则终止*/
      if((ad< LCD_LINE1 )||(ad>LCD_LINE2)||(ad>(LCD_LINE1+15)&&(ad<(LCD_LINE2-15))))   return ;
           if((*dispbuf)=='\0') return;
        lcd_send_com(ad);
       
       while(1)
       { //if((*dispbuf)=='\0') break;
         lcd_send_byte(*dispbuf);
          dispbuf++;
       if(ad==(LCD_LINE1+15))
        {  
          ad=LCD_LINE2;
         lcd_send_com(ad);        //若第一行超出地址,则转行
        }
       else
        {  P1=0;
          ad++;
                  }
       if(ad>LCD_LINE2+15) return;                //若地址超出则终止
        }         
    }
    /***********************************************************
    函数名称:void lcd_init()
    函数功能:完成LCD的显示初始化
    入口参数:无  
    出口参数:无
    全局变量: 无
    调用模块: lcd_send_com()
    作 者:
    日 期:  2008-08-
    备 注:  
    ***********************************************************/
    void lcd_init()
    {
      lcd_send_com(LCD_RST);        //复位光标回原点
      lcd_send_com(LCD_MODE);        //接口数据8位,双行显示,5*10点阵
      lcd_send_com(LCD_OPEN);        //屏目显示开,无光标
      //lcd_send_com(LCD_SHIFT_R);
      //lcd_send_com( LCD_CURSOR_R);
    }


    #include "xuxiuliang.h"
    #include   "1602.h"

    /***********************************************************************/
    void  DelayS(uchar  delayno)
    {  uchar   i,j;
       for(; delayno>0; delayno--)
       {  for(i=0; i<250; i++)
           for(j=0; j<200; j++);
       }
    }

    /***********************************************************************/
    void main()
    {
      uchar code table[]= "I LOVE YOU FOR EVER ! " ;
      lcd_init();
    while(1)
      {
       lcd_disp_str(LCD_LINE1,table);

        DelayS(1);
          }
    }

    #ifndef __1602_h__
    #define __1602_h__
    /***********************************************************************/
    //#include "xuxiuliang.h"
    /************************************************************************/
       /*  定义LCD操作地址 */
    #define LCDWR_COM   (*((uint volatile xdata *) 0X2000 ))     //定义写命令地址
    #define LCDWR_DAT   (*((uint volatile xdata *) 0X2001 ))  //定义读写数据地址
              /*注意上述定义和硬件电路的联结是有关系的*/
    /*************************************************************************/
      /*定义常用LCD 命令*/
    #define LCD_CLR             0X00                                //清显示,光标复位至原点00H
    #define LCD_RST             0X02                               //复位光标回原点
    #define LCD_MODE            0X3C                               //接口数据8位,双行显示,5*10点阵
    #define LCD_SHIFT_R         0X06             //显示画面向右平移一个字符位
    #define LCD_SHIFT_L         0X07                               //显示画面向左平移一个字符位
    #define LCD_CLOSE           0X08                               //屏目显示关
    #define LCD_OPEN            0X0C                               //屏目显示开,无光标
    #define LCD_FLASH           0X0D                               //屏目显示开,且光标闪烁
    #define LCD_CURSOR          0X0E                               //屏目显示开,且光标不闪烁
    #define LCD_CURSOR_L        0X10                               //光标左移
    #define LCD_CURSOR_R        0X14         //光标右移
    #define LCD_DAT_L           0X18                              //显示左移
    #define LCD_DAT_R           0X1C                              //显示右移
    /**************************************************************************/
      /*定义LCD地址相关控制宏*/
    #define LCD_LINE1           0X80                              //定义第1行显示数据首地址
    #define LCD_LINE2           0XC0                              //定义第2行显示数据首地址
    #define LCD_CGRAM           0X40                              //定义字符发生器首地址
    #define CLR_STR             " "                   //清屏
    /****************************************************************************/
    /***********************************************************
    函数名称:void lcd_init()
    函数功能:完成LCD的显示初始化
    入口参数:无  
    出口参数:无
    全局变量: 无
    调用模块: lcd_send_com()
    作 者:  
    日 期:  2008-08-
    备 注:  
    ***********************************************************/
    extern void lcd_init();

    /***********************************************************
    函数名称:void lcd_send_byte(uchar ch)
    函数功能: 向LCD发送一字节显示数据
    入口参数:   uchar ch   待显示数据
    出口参数:   无
    全局变量:  无
    调用模块:   delay()
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    extern void lcd_send_byte(uchar ch);
    /***********************************************************
    函数名称: void lcd_send_com(uchar ch)
    函数功能: 向LCD 发送一字节命令
    入口参数:  uchar ch  待发送的命令
    出口参数: 无
    全局变量:
    调用模块:  delay()
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    extern void lcd_send_com(uchar ch);
    /***********************************************************
    函数名称: void lcd_disp_str(uchar *ad,uchar *dispbuf)
    函数功能:  显示字符串函数(向LCD显示地址ad,送以dispbuf 为地址的一串字符串)
    入口参数:  uchar ad 在LCD上显示数据的首地址         
               uchar *dispbuf 待显示数据的地址
    出口参数: 无
    全局变量: 无
    调用模块:  lcd_send_com(uchar ch)
                lcd_send_byte(uchar ch)
    作 者:  
    日 期:  2008-08-03
    备 注:  
    ***********************************************************/
    extern void  lcd_disp_str(uchar ad,char *dispbuf);
    #endif
  • guidanghu520 (2008-8-04 09:17:32)

    你的电路好像有点问题,P0口要接上拉电阻!!!!!!!!!!!!!!!!!!!!!
  • jiankewuying (2008-8-04 09:58:00)

    不是吧,我用的是总线方式.MOVX @DPTR,A. 指令 .我用别人写的程序,在这个电路上就能显示
  • jiankewuying (2008-8-04 11:00:04)

    原来我连续发了几个同样的求助!  不过这应是系统的问题,因为我连续发了几次,网页上出现乱码,显示错误,我还以为是没有发出去,那知道都发出去了,哎,怨我! 没有仔细观察。给大家带来了不便,请原谅!
  • liaoguobao00 (2008-8-04 23:58:03)

    0


    1.jpg

    1602.rar
    (2008-08-04 23:58:03, Size: 22.4 KB, Downloads: 4)

  • budhy (2008-8-05 02:20:17)

    QUOTE:

    原帖由 jiankewuying 于 2008-8-4 09:58 发表
    不是吧,我用的是总线方式.MOVX @DPTR,A. 指令 .我用别人写的程序,在这个电路上就能显示
    是吗?从以上程序里还不能断定,因为还没看到  LCDWR_DAT 等变量的定义。