单片机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条回答
大呵欠E
1楼-- · 2020-02-04 23:17
 精彩回答 2  元偷偷看……
yklstudent
2楼-- · 2020-02-05 00:38
至少能显示一些乱码了 也算前进一步了 再接再厉就能成功了
大呵欠E
3楼-- · 2020-02-05 01:45
739211964 发表于 2012-11-3 15:43
初始化函数里将使能端拉低:
e=0;

不是拉了吗
lryxr2507
4楼-- · 2020-02-05 03:53
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是延时不对).
大呵欠E
5楼-- · 2020-02-05 07:35
lryxr2507 发表于 2012-11-5 10:29
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是 ...

好了  原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。
大呵欠E
6楼-- · 2020-02-05 13:34
 精彩回答 2  元偷偷看……

一周热门 更多>