和师兄一起做了一个控制充放电的一个小电路,程序编译成hex文件显示屏只能显示预计一半内容,琢磨了一天没找到原因,求大神指点
实物预计用1602,proteus里面选用的是LM016L。D0到D7是接到了P0口上。全部程序太长所以只发了与显示屏相关的程序
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar code table1[]=" TYNCFDKZQXTS";
unsigned char code table2[]=" S:12.0 N:";
unsigned char code lcdd[]="0123456789";
uchar xs_vo,num;
#ifndef _YJ1602_H
#define _YJ1602_H
void init1602()
{
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_com(uchar com)
{
RW=0; delay1();
RS=0;
delay1();
EN=1;
delay1();
P0=com;
delay1();
EN=0; delay1();
delay(5);
}
void write_data(uchar date)
{
RW=0; delay1();
RS=1;
delay1();
EN=1;
delay1();
P0=date;
delay1();
EN=0; delay1();
delay(5);
}
void yj1602()
{ uchar xs_vo;
init1602();
xs_vo=battery_v;
V1=xs_vo/100;
V2=xs_vo%100/10;
V3=xs_vo%10;
write_com(0x80+0x10);
for(num=0;num<14;num++)
{
write_data(table1[num]);
delay(5);
}
write_com(0x80+0x50);
write_data(' ');
delay(5);
write_data('S');
delay(5);
write_data(':');
write_data(' ');
delay(5);
write_data(lcdd[1]);
delay(5);
write_data(lcdd[2]);
delay(5);
write_data('.');
delay(5);
write_data(lcdd[0]);
delay(5);
write_data(' ');
delay(5);
write_data(' ');
delay(5);
write_data('N');
delay(5);
write_data(':');
delay(5);
write_data(lcdd[V1]);
delay(5);
write_data(lcdd[V2]);
delay(5);
write_data('.');
delay(5);
write_data(lcdd[V3]);
delay(5);
for(num=0;num<16;num++)
{
write_com(0x1c);
delay(1000);
}
}
|