为什么用1602A显示屏不会显示?

你可以先让它显示一个字符看它是否能显示,如果不能显示静态字符证明没有吧信息传上去。一般原因是write_com和write_data之间没有延时,建议延时5毫秒再看是否能显示。

这是我做的时钟显示正常。你可以把rs,rw,e换成你的引脚后试试看。

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit rs=P2^4;

sbit rw=P2^5;

sbit e=P2^6;

void delay(uint n)

{

uint i,j;

for(i=n;i>0;i--)

for(j=110;j>0;j--);

}

uchar code table[]={"00:00:00"};

uchar code table1[]={"2009.8.29 sa"};

uchar miao=56,fen=42,shi=17,g,s,num,a=1,b=1;

void write_com(uchar num)

{

rs=0;

rw=0;

e=0;

P0=num;

e=1;

delay(1);

e=0;

}

void write_data(uchar num)

{

rs=1;

rw=0;

e=0;

P0=num;

e=1;

delay(1);

e=0;

}

void init()

{

delay(15);

write_com(0x38);

delay(5);

write_com(0x38);

delay(5);

write_com(0x38);

write_com(0x01);

write_com(0x06);

write_com(0x0c);

TMOD = 0x01;

TH0 = (65535-50000)/256;

TL0 = (65535-50000)%256;

EA = 1;

ET0=1;

TR0 = 1;

P0=0xff;

}

void xian(uchar n,uchar m)

{

write_com(0x80+0x40+n);

s=m/10;

g=m%10;

write_data(0x30+g);

write_com(0x80+0x40+n-1);

write_data(0x30+s);

}

void main()

{

uint i;

delay(5);

init();

write_com(0x80+0x40+0x04);

for(i=0;i<8;i++)

{

write_data(table[i]);

}

write_com(0x80+0x02);

for(i=0;i<12;i++)

{

write_data(table1[i]);

}

while(1)

{

xian(11,miao);

if(a==1)

{

xian(8,fen);

a=0;

}

if(b==1)

{

xian(5,shi);

b=0;

}

}

}

void UART_SER (void) interrupt 1

TH0 = (65535-50000)/256;

TL0 = (65535-50000)%256;

num++;

if(num==20)

{

num=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

a=1;

P0=0xfe;

// delay(5);

//P0=0xff;

if(fen==60)

{

fen=0;

shi++;

b=1;

if(shi==24)

{

shi=0;

}

}

}

}

}