标题:
51单片机LCD1602不能完全显示COM接收的字符,请帮忙指导下程序
[打印本页]
作者:
miao22457
时间:
2022-4-12 13:59
标题:
51单片机LCD1602不能完全显示COM接收的字符,请帮忙指导下程序
自已是小白,抄的网上的,用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]);
}
}
}
作者:
飞云居士
时间:
2022-4-12 13:59
if(SBUF=='\r') { for(k=i;k<34;k++) kx2[k-1]='\0 ' ; i=0; }
作者:
飞云居士
时间:
2022-4-12 17:26
把上面的‘’改成‘\0'试试
作者:
zhxiufan
时间:
2022-4-12 18:43
1602每行最多只能显示16个字符,你这个循环里面到17个了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1