单片机lcd1602问题 求高人指教 好人一定好报

2020-02-02 09:31发布

做了个单片机最小系统温度传感器加各种扩展电路,解决了这个又遇到那个问题,这次是1602的液晶不能正常显示,程序我觉得没问题,别人的程序我也烧写了,不过,还是不能正常显示,这是为什么呢??液晶应该是好的,我去借别人的1602也不能显示,电路这么简单我觉得也应该没问题啊,液晶应该不用加上拉电阻吧,反正我没加。。我是学生刚接触单片机,菜鸟级别,本来不想劳烦各位大神的,可自己捣鼓半天还是这样,实属无奈啊,望各位大神不吝赐教。。。送上电路图,pcb文件和程序代码。。急!!!好人好报,好人好运。。

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit rs=P1^1;
sbit rw=P1^2;
sbit  e=P1^3;
uchar table1[]={"i.love.you"};
uchar table2[]={"you.are.great!"};
void delay_50us(uint t)           //50us延时函数
{
         uchar j;
         for(;t>0;t--)
         for(j=19;j>0;j--);

}

void delay_50ms(uint t)          //延时50ms函数
{

  uchar j;
  for(;t>0;t--)
  for(j=6245;j>0;j--);
}
void write_com(uchar com )
{
  rs=0;
  rw=0;
  e=0;
  P0=com;
  delay_50us(10);
  e=1;
  delay_50us(10);
  e=0;


}
void write_date(uchar dat)
{
  rs=1;
  rw=0;
  e=0;
  P0=dat;
  delay_50us(10);
  e=1;
  delay_50us(10);
  e=0;



}
void init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);


}


void main()
{
  uchar j;
  init();
  write_com(0x80);
  for(j=0;j<16;j--)
  {
    write_date(table1[j]);
        delay_50us(20);


  }
  write_com(0x80+0x40);
  for(j=0;j<16;j--)
  {
    write_date(table2[j]);
        delay_50us(20);

        }

   while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
30条回答
lxa0
1楼-- · 2020-02-04 07:21
大呵欠E 发表于 2012-11-1 22:45
反正他都是亮的,有些乱码  附上实物图

看你的这2个图片
lcd是好的
这种情况我以前也遇到过
原因是lcd的那3个控制引脚接错了
739211964
2楼-- · 2020-02-04 07:23
 精彩回答 2  元偷偷看……
大呵欠E
3楼-- · 2020-02-04 07:53
lycreturn 发表于 2012-11-2 09:32
主函数里面 for循环 很明显的错误是 j++  不是j--

嗯 对 粗心。。可是尽管改了还是不能正常显示
大呵欠E
4楼-- · 2020-02-04 07:58
lxa0 发表于 2012-11-3 15:01
看你的这2个图片
lcd是好的
这种情况我以前也遇到过

没接错啊,我看了 几遍,应该没错的
5612404
5楼-- · 2020-02-04 13:58
电压要主意,有的是5V.有的3.3
大呵欠E
6楼-- · 2020-02-04 19:28
jlhgold 发表于 2012-11-1 23:23
因为用法不一样!!!无法上拉,所以没有逻辑高!

加了10k的上拉电阻还是不行   是乱码啊。。给图片给你看。。到底是怎么回事?????

一周热门 更多>