为什么用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;
}
}
}
}
}