和師兄一起做了一個控制充放電的一個小電路,程序編譯成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);
}
}
|