1602液晶的使用碰到问题

[复制链接]
 楼主| yushiqian2012 发表于 2012-5-4 10:24 | 显示全部楼层 |阅读模式
帮同学焊了一个单片机与液晶的小板子,液晶是LCD1602,单片机时STC89C52,现在我检查了好几遍,也都焊上了,引脚也对,可是总是液晶显示一竖条一竖条的,初始化的时候也没有反应。用的程序是商家给的测试程序。我当时担心是P0的10k太大,换了5.1k的,还是老样子。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
abc375414256 发表于 2012-5-4 10:31 | 显示全部楼层
搞不懂。
ayb_ice 发表于 2012-5-4 10:36 | 显示全部楼层
这种程序网上大把的
PROTEUS的官方演示也有
 楼主| yushiqian2012 发表于 2012-5-4 10:37 | 显示全部楼层
我知道,我只是怀疑我的硬件有问题,帮我看看电路呗
 楼主| yushiqian2012 发表于 2012-5-4 10:37 | 显示全部楼层
是不是因为51的驱动电流不够啊
logokfu 发表于 2012-5-4 10:41 | 显示全部楼层
不是P0口10K上拉电阻的问题,是你把液晶屏第5管脚接地了。错误接法。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2012-5-4 10:41 | 显示全部楼层
我给你个文件,包含SCH与HEX文件,STC89C52应该可以用的按我的原理图接即可,只需要连LCD相关部分即可

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
logokfu 发表于 2012-5-4 10:53 | 显示全部楼层
不是P0口10K上拉电阻的问题,是你把液晶屏第5管脚接地了。错误接法。
107026
**kfu 发表于 2012-5-4 10:41

也不能说是错误接法,这样接的话就不能读忙了。程序需要准确的把握延时才行的。
 楼主| yushiqian2012 发表于 2012-5-4 10:55 | 显示全部楼层
o,对,我忘了改了,当时我发现这个问题了。。。是直接连的单片机的WR端,可是也不行啊
ayb_ice 发表于 2012-5-4 10:59 | 显示全部楼层
99.99%还是程序的问题,或者硬件与实际软件接口不符
logokfu 发表于 2012-5-4 11:16 | 显示全部楼层
o,对,我忘了改了,当时我发现这个问题了。。。是直接连的单片机的WR端,可是也不行啊
yushiqian2012 发表于 2012-5-4 10:55
如果你现在的硬件环境和你的原理图是一致的话,在不改变的硬件的情况下,改下程序就可以了。主要是初始化程序。这个最关键。初始化不好,永远显示不出来。
 楼主| yushiqian2012 发表于 2012-5-4 11:27 | 显示全部楼层
可谓是程序是给的例程啊,我看着也挺好的,没啥问题。
宋业科 发表于 2012-5-4 11:49 | 显示全部楼层
我怀疑1602坏了。
ningling_21 发表于 2012-5-4 12:57 | 显示全部楼层
注意调节对比度,电位器接法好像不对...
mcb8295014 发表于 2012-5-4 13:48 | 显示全部楼层
先看下显示有没有底色
如果没有底色的话 把你那个电位器调节一些
楼上说的电位器接法不对是有可能的
 楼主| yushiqian2012 发表于 2012-5-4 17:05 | 显示全部楼层
显示有底色,并且有一束一束的黑杠杠。。。
logokfu 发表于 2012-5-4 17:19 | 显示全部楼层
软件初始化问题。没有初始化成功。
joing1999 发表于 2012-5-7 23:15 | 显示全部楼层
发个例程给你试试,1602通用的
#include <reg52.h>

#define uint  unsigned int
#define uchar unsigned char

#define comm  0
#define dat   1

sbit  e = P3^2;   //input enable;
sbit rw = P3^1;   //H=read; L=write;
sbit rs = P3^0;   //H=data; L=command;

uchar code tab1[]={
"NS:WWW.RXLCD.COM"
"TEL:020-62619437"
};

//===========延时函数===============
void delay (int ms)   //delay time
{
  int i,j;
  for(i=0;i<ms;i++)
    for(j=0;j<123;j++);
}

//=======写命令或者数据子函数=======
void wr_lcd (uchar dat_comm,uchar content)
{
  if(dat_comm)
   {
    rs=1;   //data
    rw=0;   //write
   }
  else
   {
    rs=0;   //command
    rw=0;   //write
   }
  P1=content;   //output data or comm
  e=1;
  delay(1);
  e=0;
}

//==========初始化=============
void init_lcd (void)
{
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关光标*/
  wr_lcd (comm,0x38);  /*8位接口两行显示模式*/
}
//==========显示字符============
void chrt_disp (uchar code *chrt)
{
  uchar i,j;
  wr_lcd (comm,0x80);
  for (j=0;j<2;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chrt[j*16+i]);
    wr_lcd (comm,0xc0);
  }
}

//==========自做字模==============
void cgram_wr (uchar zm_data1,uchar zm_data2)
{
  uchar i,j;
  wr_lcd (comm,0x40);
  for(j=0;j<8;j++)
  {
    for(i=0;i<4;i++)
    {
      wr_lcd (dat,zm_data1);
      wr_lcd (dat,zm_data2);
    }
  }
}

//=========显示自做字模==========
void cgram_disp (void)
{
  uchar i,j;
  wr_lcd (comm,0x80);
  for (j=0;j<2;j++)
  {
    for (i=0;i<8;i++)
    wr_lcd (dat,i);
    for (i=0;i<8;i++)
    wr_lcd (dat,i);
    wr_lcd (comm,0xc0);
  }
}

/*----------主程序------------*/
void main ()
{
  init_lcd ();
  while (1)
  {
    chrt_disp (tab1);
    delay (2000);
    cgram_wr (0x1f,0x1f);
    cgram_disp();
    delay (2000);
    cgram_wr (0x15,0x15);
    cgram_disp();
    delay (2000);
    cgram_wr (0x1f,0x00);
    cgram_disp();
    delay (2000);
    cgram_wr (0x15,0x0a);
    cgram_disp();
    delay (2000);
  }
}
hiWZY 发表于 2012-5-7 23:26 | 显示全部楼层
谢谢楼主分享了~~~~~~~~呵呵






------------------------------------------------------------------------------------www.kindleyz.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不需要别人来证明自己,自己的态度更重要

45

主题

354

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部