自已是小白,抄的網上的,用51單片機接收電腦COM口傳過來的這字符,然后顯示在LCD1602上
現在LCD1602只顯示了前8個字符,求大神指點,謝謝!
#include<reg52.h>
int write_com(unsigned char);
int write_date(unsigned char);
int x;
char kx2[34]=" ";
unsigned char code kx[]="7777";
sbit RS = P2^7;
sbit RW = P2^6;
sbit EN = P2^5;
void delay (unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
int init()
{
EN = 0;
write_com(0X38);
write_com(0X0C);
write_com(0X06);
write_com(0X01);
return 0;
}
int write_com(unsigned char com)
{
RS = 0;
RW = 0;
P0 = com;
delay(5);
EN = 1;
delay(5);
EN = 0;
return 0;
}
int write_date(unsigned char date)
{
RS = 1;
RW = 0;
P0 = date;
delay(5);
EN = 1;
delay(5);
EN = 0;
return 0;
}
void send(unsigned char *dis)
{
while(*dis!='\0') {
SBUF=*dis;
dis++;
while(!TI);
TI=0;
}
}
void serial_init()
{
TMOD=0x20;
// SCON=0x50;
// PCON=0X80;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
ES=1;
REN=1
EA=1;
RI=1;
}
void serial_INT() interrupt 4
{
int i,k;
if(RI)
{
ES=0;
RI=0;
kx2[i++]=SBUF;
}
if(SBUF=='\r')
{
for(k=i;k<34;k++)
kx2[k-1]=' ' ;
i=0;
}
ES=1;
}
void main()
{
init();
serial_init();
while(1)
{
write_com(0x80);
for(x=0;x<17;x++)
{
write_date(kx2[x+1]);
}
write_com(0xC0);
for(x=17;x<34;x++)
{
write_date(kx2[x]);
}
}
}
|