[求助] LPC1343与1602显示

feiyun   2015-12-18 14:04 楼主
悬赏 2 分 芯积分未解决
proteus用lpc1343与160l液晶调试,液晶一直没有正确显示,请求助
  • QQ截图20151218140219.jpg
  • 回复评论 (6)

    最好把程序发上来
    如果连接没问题,应该是程序的问题
    点赞  2015-12-18 14:32
    #include "LPC13xx.h"                        /* LPC13xx Peripheral Registers */
    #include "lcd016.h"



    //延时函数
    void delay()
    {
            unsigned int i=5552;
            while(--i);
    }
    void delay_nms(int i)
    {
      i=i+10;
      while(i--);
    }
    //检查LCD是否忙
    int LCD_busy()
    {
    /*        int flag;
        GPIOSetValue( 2, 0, 0 );  //写命令
             GPIOSetValue( 2, 1,1 );  //读选择端
        GPIOSetValue( 2, 2, 1 );  //E使能
       GPIOSetDir( 2, 11, 0 );
       delay_nms(100);
       if((LPC_GPIO2->DATA&(1<<11)))
       //if(LCD_BF==1) //数据满
        flag=1;   //标志位置1
       else
        flag=0;
      GPIOSetDir( 2, 11, 1 );
      GPIOSetValue( 2, 2, 0 );  //E使能
       return flag;*/  

       unsigned int i=10000;
            while(--i);
       
    }

    //写命令
    /*void LCD_write_cmdata(unsigned char cmdata)
    {
       int i;
      // while(LCD_busy());   //等待空闲
         GPIOSetValue( 2, 2, 0);
       GPIOSetValue( 2, 0, 0 );   
        GPIOSetValue( 2, 1, 0 );
            delay_nms(1);      

       
       for(i=0;i<8;i++)
       {
                      if(cmdata&0x01)
                    {
                       GPIOSetValue( 2, 4+i, 1 );   
                    }
                    else
                            GPIOSetValue( 2, 4+i, 0 );
                    cmdata= cmdata>>0x01;  
       }
             
             GPIOSetValue( 2, 2, 1);
             delay_nms(2);
                 GPIOSetValue( 2, 2, 0);
              GPIOSetValue( 2, 2, 1);
              

    }
    //写数据
    void LCD_write_wodata(unsigned char wodata)
    {
       int i;
      // while(LCD_busy());   //等待空闲
       GPIOSetValue( 2, 0, 1 );     //写数据
       GPIOSetValue( 2, 1, 0);  
        GPIOSetValue( 2, 2, 0);
            delay_nms(1);      
            for(i=0;i<8;i++)
        {
                      if(wodata&0x01)
                    {
                               GPIOSetValue( 2, 4+i, 1 );   
                    }
                    else
                            GPIOSetValue( 2, 4+i, 0 );  
                    wodata= wodata>>0x01;  
               }

             GPIOSetValue( 2, 2, 1);
             delay_nms(1);
                 GPIOSetValue( 2, 2, 0);
             delay_nms(1);
             GPIOSetValue( 2, 2, 1);
       
    } */
    //LCD初始化

    void LCD_write_cmdata(unsigned char cmdata)
    {
       int i;
       LCD_busy();   //等待空闲
        // GPIOSetValue( 2, 2, 0);
             LPC_GPIO2->DATA&=(~(0x001<<2));
    //   GPIOSetValue( 2, 0, 0 );
            LPC_GPIO2->DATA&=(~(0x001));   
       // GPIOSetValue( 2, 1, 0 );
        LPC_GPIO2->DATA&=(~(0x001<<1));  
            delay_nms(1);      

       
      /* for(i=0;i<8;i++)
       {
                      if(cmdata&0x01)
                    {
                       GPIOSetValue( 2, 4+i, 1 );   
                    }
                    else
                            GPIOSetValue( 2, 4+i, 0 );
                    cmdata= cmdata>>0x01;  
       }*/
               LPC_GPIO2->DATA&=(0x00f);
              LPC_GPIO2->DATA|=(cmdata<<4);
             //GPIOSetValue( 2, 2, 1);
               LPC_GPIO2->DATA|=(0x01<<2);
             delay_nms(2);
                 //GPIOSetValue( 2, 2, 0);
               LPC_GPIO2->DATA&=(~(0x001<<2));
            //  GPIOSetValue( 2, 2, 1);
             LPC_GPIO2->DATA|=(0x01<<2);
              

    }
    //写数据
    void LCD_write_wodata(unsigned char wodata)
    {

    int i;
            LCD_busy();       
        // GPIOSetValue( 2, 2, 0);
             LPC_GPIO2->DATA&=(~(0x001<<2));
    //   GPIOSetValue( 2, 0, 1 );
            LPC_GPIO2->DATA|=((0x001));   
       // GPIOSetValue( 2, 1, 0 );
        LPC_GPIO2->DATA&=(~(0x001<<1));  
            delay_nms(1);      

               LPC_GPIO2->DATA&=(0x00f);
              LPC_GPIO2->DATA|=(wodata<<4);
             //GPIOSetValue( 2, 2, 1);
             delay_nms(2);
               LPC_GPIO2->DATA|=(0x01<<2);
             delay_nms(2);
                 //GPIOSetValue( 2, 2, 0);
               LPC_GPIO2->DATA&=(~(0x001<<2));
            //  GPIOSetValue( 2, 2, 1);
             LPC_GPIO2->DATA|=(0x001<<2);
      
      
    }

    void LCD_Init()
    {
                   
       LCD_write_cmdata(0x38); //显示设置
       delay_nms(6);
       LCD_write_cmdata(0x0e); //显示开关与光标设置
       delay_nms(6);
       LCD_write_cmdata(0x03);
       delay_nms(6);
       LCD_write_cmdata(0x06);
       delay_nms(6);
       LCD_write_cmdata(0x1f);
       delay_nms(6);
        LCD_write_cmdata(0x01);
            delay_nms(6);

       
    }

    点赞  2015-12-18 15:16
    引用: nmg 发表于 2015-12-18 14:32
    最好把程序发上来
    如果连接没问题,应该是程序的问题

    你有成功过吗
    点赞  2015-12-18 15:16
    已解决
    点赞  2015-12-23 10:18
    楼主能不能把工程发给我,谢谢
    点赞  2016-11-7 22:38
    引用: 休息休息 发表于 2016-11-7 22:38
    楼主能不能把工程发给我,谢谢

    Q2921175784
    点赞  2016-11-7 22:39
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
      写回复