使用lcd1602在第一行显示“T:传感器读取的数据 A:传感器读取的数据”,在第二行显示“DO:传感器读取的数据”
这是main.c的代码
void Display_function(void)
{
switch(flag_display) //根据不同的显示模式标志位,显示不同的界面
{
case 0: //界面0:
lcd1602_display_str(1,0,"T:"); //显示温度
lcd1602_display_temp(1,2,temp_value);
lcd1602_display_str(1,10,"A:"); //显示氨氮
lcd1602_display_num_2(1,12,A_value);
lcd1602_display_str(2,0,"DO:"); //显示溶解氧
lcd1602_display_num(2,2,DO_value);
break;
请帮我看看这部分代码是否有问题
另外 我觉得问题出在显示函数上,以下是lcd函数
void lcd1602_display_num(uchar hang, uchar add, uint num)
{
if(hang==1)
lcd1602_write_com(0x80+add); //第一行
else
lcd1602_write_com(0x80+0x40+add); //第二行
if(num >= 1000)
{
lcd1602_write_date(num/1000%10+48); //千
lcd1602_write_date(num/100%10+48); //百
lcd1602_write_date(num/10%10+48); //十
lcd1602_write_date(num/1%10+48); //个
}
else if(num >= 100)
{
lcd1602_write_date(num/100%10+48); //百
lcd1602_write_date(num/10%10+48); //十
lcd1602_write_date(num/1%10+48); //个
lcd1602_write_date(' '); //补空格
}
else if(num >= 10)
{
lcd1602_write_date(num/10+48); //十
lcd1602_write_date(num%10+48); //个
lcd1602_write_date(' '); //补空格
lcd1602_write_date(' '); //补空格
}
else
{
lcd1602_write_date(num+48); //个
lcd1602_write_date(' '); //补空格
lcd1602_write_date(' '); //补空格
lcd1602_write_date(' '); //补空格
}
}
/****
*******1602显示数字(2位)
*******参量定义: hang:输入显示行数 1 第一行 2 第二行
******* add:偏移量,0-15
******* num:所要显示的数据,2位
*****/
void lcd1602_display_num_2(uchar hang, uchar add, uint num)
{
if(hang==1)
lcd1602_write_com(0x80+add); //第一行
else
lcd1602_write_com(0x80+0x40+add); //第二行
if(num >= 10)
{
lcd1602_write_date(num/10+48); //十
lcd1602_write_date(num%10+48); //个
}
else
{
lcd1602_write_date(num+48); //个
lcd1602_write_date(' '); //补空格
}
}
/****
*******LCD1602显示温度函数(显示格式:**.*℃)
*******参量定义: hang:输入显示行数 1 第一行 2 第二行
******* add:偏移量,0-15
******* temp:所要显示的温度
*****/
void lcd1602_display_temp(uchar hang, uchar add,int temp)
{
uchar display_temp_buf[8];
if(hang==1)
lcd1602_write_com(0x80+add); //第一行
else
lcd1602_write_com(0x80+0x40+add); //第二行
if(temp >= 0)
sprintf(display_temp_buf,"%d.%d",temp/10,temp%10);
else
sprintf(display_temp_buf,"-%d.%d",temp*(-1)/10,temp*(-1)%10);
lcd1602_display_str(hang,add,display_temp_buf);
lcd1602_write_date(0xdf); //显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码
lcd1602_write_date(0x43); //显示"C"符号,0x43是液晶屏字符库里大写C的地址码
lcd1602_write_date(' ');
lcd1602_write_date(' ');
}
/****
*******LCD1602显示函数(显示格式:****)
*******参量定义: hang:输入显示行数 1 第一行 2 第二行
******* add:偏移量,0-15
******* quality:所要显示的重量
*****/
void lcd1602_display_quality(uchar hang, uchar add,uint quality)
{
if(hang==1)
lcd1602_write_com(0x80+add); //第一行
else
lcd1602_write_com(0x80+0x40+add); //第二行
if(quality >= 1000)
{
lcd1602_write_date(quality/1000%10+48); //千
lcd1602_write_date(quality/100%10+48); //百
lcd1602_write_date(quality/10%10+48); //十
lcd1602_write_date(quality/1%10+48); //个
}
else if(quality >= 100)
{
lcd1602_write_date(quality/100%10+48); //百
lcd1602_write_date(quality/10%10+48); //十
lcd1602_write_date(quality/1%10+48); //
}
else if(quality >= 10)
{
lcd1602_write_date(quality/10+48); //十
lcd1602_write_date(quality%10+48); //个
}
else
{
lcd1602_write_date(quality+48); //个
}
}
/****
*******LCD1602显示字符串函数
*******参量定义: hang:输入显示行数 1 第一行 2 第二行
******* add:偏移量,0-15
******* dat:所要显示的字符串,输入格式 " "
*****/
void lcd1602_display_str(uchar hang, uchar add, uchar *dat)
{
if(hang==1)
lcd1602_write_com(0x80+add); //第一行
else
lcd1602_write_com(0x80+0x40+add); //第二行
while(*dat != '\0')
{
lcd1602_write_date(*dat++);
}
}