基于S52单片机的电子称,其中LCD1602的程序,求解释。
时间:10-02
整理:3721RD
点击:
sbit EN=P2^7;
sbit RS=P2^5;
sbit RW=P2^6;
unsigned char LCD1602_Table[]="0123456789:-";
// 0123456789abcdef
unsigned char DIS1_TAB[]={"W:--.---KgP:--.-"}; //显示重量 单价
unsigned char DIS2_TAB[]={"Total Sum:----.-"};
void write_date(uchar date)
{
EN=0;
RS=1;
P0=date;
EN=0;
delayms(5);
EN=1;
}
void write_com(uchar date)
{
EN=0;
RS=0;
P0=date;
EN=0;
delayms(5);
EN=1;
}
void init_1602()
{
unsigned char i;
RW=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(i=0;i<16;i++)
write_date(DIS1_TAB[i]);
write_com(0x80+0x40);
for(i=0;i<16;i++)
write_date(DIS2_TAB[i]);
}
void display()
{
int wight_dat;
uchar i=0;
write_com(0x80+2);
if(BP_DAT>10000) //超量程显示错误
{
write_date(' ');
write_date('E');
write_date('R');
write_date('R');
write_date('O');
write_date('R');
write_date('!');
write_date(' ');
}
else if(BP_DAT>=0) //重量为正
{
wight_dat=BP_DAT;
if((wight_dat/10000)>0)
write_date(LCD1602_Table[wight_dat/10000]);
else
write_date(' ');
write_date(LCD1602_Table[wight_dat%10000/1000]);
write_date('.');
write_date(LCD1602_Table[wight_dat%10000%1000/100]);
write_date(LCD1602_Table[wight_dat%10000%1000%100/10]);
write_date(LCD1602_Table[wight_dat%10]);
write_date('K');
write_date('g');
if(wight_dat/10>950)
BEEP=0;
else
BEEP=1;
}
else //重量为负
{
wight_dat=(-1)*BP_DAT;
write_date('-');
write_date(LCD1602_Table[wight_dat%10000/1000]);
write_date('.');
write_date(LCD1602_Table[wight_dat%10000%1000/100]);
write_date(LCD1602_Table[wight_dat%10000%1000%100/10]);
write_date(LCD1602_Table[wight_dat%10]);
write_date('K');
write_date('g');
}
write_com(0x80+12); //单价显示
write_date(LCD1602_Table[Price_dat/100]);
write_date(LCD1602_Table[Price_dat%100/10]);
write_date('.');
write_date(LCD1602_Table[Price_dat%10]);
write_com(0x80+0x40+10); //总价显示
if((Total_Sum/10000)>0)
write_date(LCD1602_Table[Total_Sum/10000]);
else
write_date(' ');
if((Total_Sum/1000)>0)
write_date(LCD1602_Table[Total_Sum%10000/1000]);
else
write_date(' ');
if((Total_Sum/100)>0)
write_date(LCD1602_Table[Total_Sum%10000%1000/100]);
else
write_date(' ');
write_date(LCD1602_Table[Total_Sum%10000%1000%100/10]);
write_date('.');
write_date(LCD1602_Table[Total_Sum%10]);
}
请大神们帮我注释一下,我一点也不懂。
sbit RS=P2^5;
sbit RW=P2^6;
unsigned char LCD1602_Table[]="0123456789:-";
// 0123456789abcdef
unsigned char DIS1_TAB[]={"W:--.---KgP:--.-"}; //显示重量 单价
unsigned char DIS2_TAB[]={"Total Sum:----.-"};
void write_date(uchar date)
{
EN=0;
RS=1;
P0=date;
EN=0;
delayms(5);
EN=1;
}
void write_com(uchar date)
{
EN=0;
RS=0;
P0=date;
EN=0;
delayms(5);
EN=1;
}
void init_1602()
{
unsigned char i;
RW=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(i=0;i<16;i++)
write_date(DIS1_TAB[i]);
write_com(0x80+0x40);
for(i=0;i<16;i++)
write_date(DIS2_TAB[i]);
}
void display()
{
int wight_dat;
uchar i=0;
write_com(0x80+2);
if(BP_DAT>10000) //超量程显示错误
{
write_date(' ');
write_date('E');
write_date('R');
write_date('R');
write_date('O');
write_date('R');
write_date('!');
write_date(' ');
}
else if(BP_DAT>=0) //重量为正
{
wight_dat=BP_DAT;
if((wight_dat/10000)>0)
write_date(LCD1602_Table[wight_dat/10000]);
else
write_date(' ');
write_date(LCD1602_Table[wight_dat%10000/1000]);
write_date('.');
write_date(LCD1602_Table[wight_dat%10000%1000/100]);
write_date(LCD1602_Table[wight_dat%10000%1000%100/10]);
write_date(LCD1602_Table[wight_dat%10]);
write_date('K');
write_date('g');
if(wight_dat/10>950)
BEEP=0;
else
BEEP=1;
}
else //重量为负
{
wight_dat=(-1)*BP_DAT;
write_date('-');
write_date(LCD1602_Table[wight_dat%10000/1000]);
write_date('.');
write_date(LCD1602_Table[wight_dat%10000%1000/100]);
write_date(LCD1602_Table[wight_dat%10000%1000%100/10]);
write_date(LCD1602_Table[wight_dat%10]);
write_date('K');
write_date('g');
}
write_com(0x80+12); //单价显示
write_date(LCD1602_Table[Price_dat/100]);
write_date(LCD1602_Table[Price_dat%100/10]);
write_date('.');
write_date(LCD1602_Table[Price_dat%10]);
write_com(0x80+0x40+10); //总价显示
if((Total_Sum/10000)>0)
write_date(LCD1602_Table[Total_Sum/10000]);
else
write_date(' ');
if((Total_Sum/1000)>0)
write_date(LCD1602_Table[Total_Sum%10000/1000]);
else
write_date(' ');
if((Total_Sum/100)>0)
write_date(LCD1602_Table[Total_Sum%10000%1000/100]);
else
write_date(' ');
write_date(LCD1602_Table[Total_Sum%10000%1000%100/10]);
write_date('.');
write_date(LCD1602_Table[Total_Sum%10]);
}
请大神们帮我注释一下,我一点也不懂。
这程序没注解,我也看看。
泪流满面顶小编
天书一般啊
求小编源程序包~
