这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 【问题已解决】1602LCD 显示不了了!请高手先帮看一下问题在哪?

共10条 1/1 1 跳转至

【问题已解决】1602LCD 显示不了了!请高手先帮看一下问题在哪?

助工
2012-10-08 02:14:21     打赏

贴代码:
/*LCD Driver*/
/*port define*/
/*-LCD Port--------------G13 Port--*/
/*--DB0~DB7---------------P1-----*/
/*---RS-------------------P41----*/
/*---RW-------------------P42----*/
/*---E--------------------P43----*/
/*-------------------------------*/
/*Port define end*/

//unsigned char table1[] = "E";
//
//unsigned char num;

void delay_1us(void)
{
  unsigned int i;
  for(i=0; i<100; i++);
}

void delay_nus(unsigned int n)
{
  unsigned int i;
  for(i=0; i<n; i++)
  {
    delay_1us();
  }
}

void delay_1ms(void)
{
  unsigned int i;
  for(i=0; i<1000; i++);
}

void delay_nms(unsigned int n)
{
  unsigned int i;
  for(i=0; i<n; i++)
  {
    delay_1ms();
  }
}

void write_lcd_com(unsigned int com)
{
  P1 = 0x00;
  //RS_H;
  P4_bit.no1 = 1;
  //RW_H;
  P4_bit.no2 = 1;
  //EN_L;
  P4_bit.no3 = 0;
  P1 = com;
  //RS_L;
  P4_bit.no1 = 0;
  //RW_L;
  P4_bit.no2 = 0;
  //EN_H;
  P4_bit.no3 = 1;
  //EN_L;
  P4_bit.no3 = 0;
  delay_nus(20);
}

void write_lcd_data(unsigned int data)
{
  P1 &= 0x00;
  //RS_L;
  P4_bit.no1 = 0;
  //RW_H;
  P4_bit.no2 = 1;
  //EN_L;
  P4_bit.no3 = 0;
  P1 = data;
  //RS_H;
  P4_bit.no1 = 1;
  //RW_L;
  P4_bit.no2 = 0;
  //EN_H;
  P4_bit.no3 = 1;
  //EN_L;
  P4_bit.no3 = 0;
  delay_nus(20);
}

void init_LCD(void)
{
    write_lcd_com(0x38);//设置8位格式,2行,5x7点阵字符 0011 1000
    delay_nms(5);
    write_lcd_com(0x08);//关闭显示                      0000 1000
    delay_nms(5);
    write_lcd_com(0x01);//清除屏幕显示                  0000 0001
    delay_nms(5);
    write_lcd_com(0x06);//设定输入方式,增量不移位      0000 0110
    delay_nms(5);
    write_lcd_com(0x02);//光标归位                      0000 0010
    delay_nms(5);
    write_lcd_com(0x0F);//开显示,关光标,不闪烁        0000 1100
    delay_nms(50);
}

void lcd_write_char(unsigned char x, unsigned char y, unsigned char data)
{
  unsigned char address;
  if(y==1)
  {
    address = 0x80 + x;
  }
  else
  {
     address = 0xc0 +x;
  }
  write_lcd_com(address);
  write_lcd_data(data);
}

/*LCD Driver End*/


/* End user code. Do not edit comment generated here */

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
** This function implements main function.
**
**  Parameters:
** None
**
**  Returns:
** None
**
**-----------------------------------------------------------------------------
*/

/* Start user code for adding. Do not edit comment generated here */
void  main(void)
{
 /* Start user code. Do not edit comment generated here */
        delay_nms(5);
        init_LCD();
        delay_nms(5);
        //RTC_Init();
        lcd_write_char(0, 1, 'A');
//        while(1u)
//        {
//          ;
//        }

 /* End user code. Do not edit comment generated here */
 }
/* End user code. Do not edit comment generated here */




关键词: 问题     解决     1602LCD     显示     了了     高手     先帮    

专家
2012-10-08 11:44:45     打赏
2楼
出现什么现象??

工程师
2012-10-08 11:46:47     打赏
3楼
注意時序~~

助工
2012-10-08 13:15:05     打赏
4楼

屏上面的点都被点亮了!

现在怀疑两方面问题:
第一个是P1口是不是一些引脚被复用成其它功能了!所以输出数据有问题;

第二个是时钟设置有问题,造成状态问题,代码和配置方式都是对的(在MSP430上验证过);


高工
2012-10-08 17:51:18     打赏
5楼
要怀疑口被复用可换个口 (P0,P7..)验证一下
个人认为:初始化,延时,应该是检查的重点

专家
2012-10-08 20:35:49     打赏
6楼
应该是你说的第一种情况,把数据口换到P7口吧。我的是P7口,,可以点亮。

助工
2012-10-11 09:41:05     打赏
7楼
关注中

助工
2012-10-11 22:14:47     打赏
8楼
终于解决了!就是上面怀疑的第一种情况!P1口的输出被别的功能复用了!
改到P7口后,加大write com的延时,显示正常,上图!

助工
2012-10-12 08:43:09     打赏
9楼
恭喜

院士
2012-10-12 09:38:50     打赏
10楼
恭喜啊~~~

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]