单片机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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
31条回答
大呵欠E
2020-02-05 07:35
lryxr2507 发表于 2012-11-5 10:29
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是 ...

好了  原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。

一周热门 更多>