找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1594|回复: 4
打印 上一主题 下一主题
收起左侧

单片机+LCD1602第二排总显示错误

[复制链接]
跳转到指定楼层
楼主
如题,做一个环境检测系统,用了SHT31和GY39,一时兴起,就把两个温湿度拿来比比,然后发现LCD1602第二排显示错误,湿度的%RH后面多出了两个HH,在按下按键(显示大气压力和光照时)第二排变成了KPaaa,多了两个aa但是程序里应该是没有写入重复字符的啊求教
下面是主程序部分的LCD部分程序
                LcdInit();
                if(count==1)
           {
                LcdWriteData(Bme.Temp/1000+0X30);
                LcdWriteData(Bme.Temp%1000/100+0X30);
                LcdWriteData('.');
                LcdWriteData(Bme.Temp%100/10+0X30);
                LcdWriteData(0xdf);
                LcdWriteData('C');
            LcdWriteData(' ');
                LcdWriteData(' ');
                LcdWriteData(' ');                          
                LcdWriteData(Bme.Hum/1000+0x30);
                LcdWriteData(Bme.Hum%1000/100+0x30);
                LcdWriteData('%');
                LcdWriteData('R');
                LcdWriteData('H');
                LcdWriteCom(0x40+0x80);
                LcdWriteData(a/10+0X30);
                LcdWriteData(a%10+0X30);
                LcdWriteData('.');
                LcdWriteData(b%10+0X30);
                LcdWriteData(0xdf);
                LcdWriteData('C');
                LcdWriteData(' ');
                LcdWriteData(' ');
                LcdWriteData(' ');                          
                LcdWriteData(c/10+0X30);
                LcdWriteData(c%10+0X30);
                LcdWriteData('%');
                LcdWriteData('R');
                LcdWriteData('H');
                delay(50000);
                }
                else if(count==2)
                {
                LcdWriteData('L');
                LcdWriteData('u');
                LcdWriteData('x');
                LcdWriteData(':');
                LcdWriteData(Lux/100000+0X30);
                LcdWriteData(Lux%100000/10000+0X30);
                LcdWriteData(Lux%10000/1000+0X30);
                LcdWriteData(Lux%1000/100+0X30);
                LcdWriteData('.');
                LcdWriteData(Lux%100/10+0X30);
                LcdWriteData(Lux%10+0X30);                          
                LcdWriteCom(0x40+0x80);
                LcdWriteData('P');
                LcdWriteData(':');
                LcdWriteData(Bme.P/100/100000+0x30);
                LcdWriteData(Bme.P/100%100000/10000+0x30);
                LcdWriteData(Bme.P/100%10000/1000+0x30);
                LcdWriteData('.');
                LcdWriteData(Bme.P/100%1000/100+0x30);
                LcdWriteData(Bme.P/100%100/10+0x30);
                LcdWriteData(Bme.P/100%10+0x30);
                LcdWriteData('k');
                LcdWriteData('p');
                LcdWriteData('a');
                delay(50000);}

图1.jpg (721.92 KB, 下载次数: 28)

第二排那个后面多两个H

第二排那个后面多两个H

图2.jpg (3.2 MB, 下载次数: 28)

多了两个a

多了两个a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-5-27 17:11 来自手机 | 只看该作者
建议将显示函数写成带行列和内容的格式,那样找问题容易书写更直观。
回复

使用道具 举报

板凳
ID:213173 发表于 2020-5-27 17:20 | 只看该作者
这类问题主要容易发生在刷新字符个数不一。关键是LCD定位不准,原来字符没有清除干净。实际就是程序有不易察觉的漏洞。有一个方法可以避免此毛病:定义两个长度16的缓存数组,一个用于上排,一个用于下排。把固定字符按序排列,其它用空格或0填充,程序运行中要改变的显示内容以字符形式写进数组。更新LCD显示内容时一次把缓存16个字符全部刷新。
回复

使用道具 举报

地板
ID:326333 发表于 2020-5-27 17:55 | 只看该作者
每次写之前加个清屏指令试一下
回复

使用道具 举报

5#
ID:277948 发表于 2020-5-28 19:31 | 只看该作者
跟楼上,在清屏后建议延时一段时间,充分清除。也可以读取BF标志位(看单片机是不是忙)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表