不能再玩啦ovo 2023-05-09 11:13 采纳率: 0%
浏览 63
已结题

LCD1602使用问题

使用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++);
    
    }
}

  • 写回答

4条回答 默认 最新

  • qllaoda 2023-05-09 11:15
    关注

    现在的现象是什么?说出问题才好分析。
    另外,别把data写成date好不好,虽然不影响程序运行,看起来真的很别扭

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月9日
  • 赞助了问题酬金15元 5月9日
  • 创建了问题 5月9日

悬赏问题

  • ¥20 C# NetworkStream WriteAsync方法卡住无反应
  • ¥15 这个如何解决详细步骤
  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制