找回密码
 立即注册
查看: 969|回复: 10

蓝桥杯问题解决指南(显示部分-鬼影问题)

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-3-10 19:08:58 | 显示全部楼层 |阅读模式
显示器鬼影,一般来说存在有硬件问题和软件问题两种,而电子元器件经历了数十年的发展,现在可以见到的芯片基本运行速度都足以抵消鬼影问题。
所以,一般来说鬼影多存在于代码编写的问题上,所以,以此文章记录我关于鬼影的一些心得体会。
首先是放一下没有优化前的效果图:
截图202403101900463717.jpg
很显然,LED上面不需要显示的地方也有微弱的亮光,严格来讲,这是不被允许的。
而观察数码管,也可以发现第五位上显示了一个浅浅的“6”,这个同样也会误导使用者,从而可能读出错误的数据。

此时,我的驱动代码块为
截图202403101904277960.jpg
因为驱动的是138译码器,之前使用过一种一个引脚一个引脚的赋予状态(如下图所示),但是会发生令人感到不妙的竞争冒险现象
截图202403101905007605.jpg
于是,我尝试改进了138译码器驱动部分的代码,仔细查找了途径的译码器(74HC138)和锁存器(74HC573)的电平变化时间,通过保守计算并加上了一定的冗余时间。得到了以下的改进代码:
    截图202403101906083363.jpg
首先,我通过将P2赋值了一个没有用到的端口Y0,确保接下来对数据口的操作干扰不会影响到应该正常工作的端口。然后,在切换端口之前将数据提前赋值给数据端口,防止因为改变数据造成鬼影。最后,是通过不影响除了P25,P26,P27之外端口的方式(相或方式),赋值给138端口,并且留出足够的时间(10us),来完成电平的变化的记忆保持。
此时,将代码下载进入实体开发板后,LED的鬼影完全的被消除了。但是数码管仍然存在鬼影。因为驱动138数码管的部分我们已经完成了优化。所以,问题应该出现在了动态刷新的代码上面。
通过阅读之前的代码,我们可以得知:
每次切换数码管时,可能因为驱动段码的数据残留而导致鬼影。
所以,我着重对这段代码进行了测试,发现因为刷新速度较快,上一个段码的数据因为IO口的变化延时,会在其他位置造成“数据污染”,也就是我们说的鬼影了,既然硬件上存在了这一点电容我们无法去除,而如果计算残留时间通过延时的方法去除又过于麻烦,所以我选择提前加入了一句清空段码的数据操作。

如下图所示,是改进过后的数码管驱动代码片段:
截图202403101907238529.jpg
这其中,主要发挥了作用的就是
control(Duan, 0xff);
这一句代码,剩下的都是对代码结构的一些简单优化
通过提前清除数据,就可以做到如果数据存在残留,可以先提前“清除”掉,有效的防止了鬼影的产生。


至此,关于鬼影的所有优化就已经完成了,下面来看一下优化过后的图片:
截图202403101907562895.jpg
很显然,LED和数码管的鬼影都消失了,此时的显示也变得干净与清爽了起来。


1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-3-10 20:27:06 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-22 20:38:33

0

主题

71

回帖

147

积分

注册会员

积分
147
发表于 2024-3-12 16:37:23 | 显示全部楼层
{:5_332:}{:5_332:}不错
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-3-12 18:00:05 | 显示全部楼层
初学LED数码管时就遇到了鬼影现象,也是通过”位码切换前送一个灭灯数据“优化的。没想到这其中还有这么多的原因,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:126
  • 最近打卡:2025-05-01 17:37:50

13

主题

164

回帖

359

积分

中级会员

积分
359
发表于 2024-11-14 22:34:03 | 显示全部楼层
我还遇到个更离谱的问题,就是数码管的d断码一直是亮的,就算给P0口赋值0xff也是亮着的,弄了一下午感觉是硬件坏了

点评

有可能是这个问题,如果你其他段位可以正常显示和消隐的话,我的建议是换个板子或者给缓冲芯片换一下  详情 回复 发表于 2024-11-14 23:16
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-14 23:16:28 | 显示全部楼层
阿杰爱*** 发表于 2024-11-14 22:34
我还遇到个更离谱的问题,就是数码管的d断码一直是亮的,就算给P0口赋值0xff也是亮着的,弄了一下午感觉是 ...

有可能是这个问题,如果你其他段位可以正常显示和消隐的话,我的建议是换个板子或者给缓冲芯片换一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-15 00:11:28 来自手机 | 显示全部楼层
这可不是【竞争冒险】啊,而是错误的。

消除微亮鬼影的核心思路是,必须确保数码管在任何时刻,不该点亮的段,LED在任何微观的时刻永远不能正偏

点评

这个板子使用的是138同时挂着段码驱动和位驱动。 如果切换的时候不是同步的触发abc三路,就会连续触发多次异常的通道选通。 并且每个通道都带有锁存器,就算是一瞬间的选通也会导致数据被锁存。 此时就算想要控制数  详情 回复 发表于 2024-11-15 00:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-15 00:44:42 | 显示全部楼层
VC*** 发表于 2024-11-15 00:11
这可不是【竞争冒险】啊,而是错误的。

消除微亮鬼影的核心思路是,必须确保数码管在任何时刻,不该点亮的 ...

这个板子使用的是138同时挂着段码驱动和位驱动。
如果切换的时候不是同步的触发abc三路,就会连续触发多次异常的通道选通。
并且每个通道都带有锁存器,就算是一瞬间的选通也会导致数据被锁存。
此时就算想要控制数据口也没法控制了。
本质上算是硬件设计的一个小bug
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:126
  • 最近打卡:2025-05-01 17:37:50

13

主题

164

回帖

359

积分

中级会员

积分
359
发表于 2024-11-15 08:06:39 | 显示全部楼层
王*** 发表于 2024-11-14 23:16
有可能是这个问题,如果你其他段位可以正常显示和消隐的话,我的建议是换个板子或者给缓冲芯片换一下 ...

这是学校老师发的板子,本来好像就只有2块,我也不好意思去要了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2025-1-19 16:10:45 | 显示全部楼层
只能说蓝桥杯的板子做的太好了,问题和bug层出不穷,非常考技术,然后主控还是非常落后的芯片,真的是不如STC8H
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:44 , Processed in 0.191314 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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