名奢网 名表 最新资讯 查看内容

单片机数码管显现消隐

2022-12-7 16:01| 发布者: 挖安琥| 查看: 101| 评论: 0

放大 缩小
简介:不知道同窗们能否发现了,我们的这两个程序的运转效果似乎并不是那么圆满,第一个小问题,大家认真看,数码管的不应该亮的段,似乎有轻轻的发亮,这种现象叫做“鬼影”,这个“鬼影”严重影响了我们的视觉效果,我们 ...

不知道同窗们能否发现了,我们的这两个程序的运转效果似乎并不是那么圆满,第一个小问题,大家认真看,数码管的不应该亮的段,似乎有轻轻的发亮,这种现象叫做“鬼影”,这个“鬼影”严重影响了我们的视觉效果,我们该如何处置呢?


同窗们在今后可能会遇到各种各样的实践问题,可能很多都是我们没有讲过的,遇到问题怎样办呢?大家要置信,你作为初学者,遇到的问题肯定不是第一个遇到的,肯定有前辈曾经遇到过相同的或相似的问题,他们普通都会在网上发表各种帖子,各种讨论,所以大家遇到问题,首先就应该构成一个到网上搜索的条件反射,这个问题大家能够到网上搜:“数码管消隐”或者“数码管鬼影处置”,多找相关关键词搜索试试,会搜索也是一种才干。


大家在网上搜了一下会发现,处置这类问题的措施有两个,其中之一是延时,延时之后我们肉眼就可能看不到这个“鬼影”了。但是延时是一个十分拙劣的伎俩,且不说延时多久能让我们看不到“鬼影”,延时后,我们的数码管亮度会普遍降低。我们处置问题呢,不能只知其然,还要知其所以然,那么我们首先就来弄明白为什么会呈现“鬼影”。


“鬼影”的呈现,主要是在数码管位选和段选的瞬态构成的。举个简单例子,我们在数码管动态显现的那部分程序中,实践上每一个数码管点亮的持续时间是 1ms 的时间,1ms后中止下个数码管的切换。在中止数码管切换的时分,好比我们从 case 5 要切换到 case 0 的时分,case 5 的位选用的是 ADDR0=1; ADDR1=0; ADDR2=1;假定此刻 case 5 也就是最高位数码管对应的值是 0,我们要切换成的 case 0 的数码管位选是 ADDR0=0; ADDR1=0; ADDR2=0;而对应的数码管的值假定是 1。又由于 C 言语程序是一句一句次第往下执行的,每一条语句的执行都会占用一定的时间,即便这个时间十分十分短暂。但是当我们把“ADDR0=1”改动成“ADDR0=0”的时分,这个瞬间存在了一个中间状态 ADDR0=0; ADDR1=0; ADDR2=1;在这个瞬间上,我们就给 case 4 对应的数码管 DS5 瞬间赋值了 0。当我们全部写完了 ADDR0=0;


ADDR1=0; ADDR2=0;后,这个时分,我们的 P0 还没有正式赋值,而 P0 此刻却坚持了前一次的值,也就是在这个瞬间,我们又给 case 0 对应的数码管 DS1 赋值了一个 0。直到我们把case 0 后边的语句全部完成后,我们的刷新才正式完成。而在这个刷新过程中,有 2 个瞬间我们给的数码管赋了值,固然很弱(由于亮的时间很短),但是我们还是能够发现。


那么搞明白了原理后,处置起来就不是艰难的事情了,我们只需避开这个瞬间错误就能够了。不产生瞬间错误的措施是,在中止位选切换期间,避免一切数码管的赋值即可。措施有两个,一个措施是刷新之前关闭一切的段,改动好了位选后,再翻开段即可;第二个措施是关闭数码管的位,赋值过程都做好后,再重新翻开即可。这个不是很难,答案我都发布一下。


关闭段


在 switch(i)这句程序之前,加一句 P0=0xFF;这样就把数码管一切的段都关闭了,当把“ADDR”的值全部搞定后,再给 P0 赋对应的值即可。


关闭位


在 switch(i)这句程序之前,加上一句 EN=1;等到把 ADDR2=0; ADDR1=0;ADDR0=0; i++; P0=LedBuff[0];这几条刷新程序全部写完后,再加上一句 ENLED=0;然后再中止 break 操作即可。


这个中央逻辑思绪上稍微有点复杂,大家一定要了解深化,深化了解,彻底弄明白,把这个瞬间的问题弄明白了,后边很多牵扯到此类状况的问题,我们都能够一并搞定。


上边的数码管程序还有第二个问题,大家认真看,我们的数码管上的数字每一秒变更一次,变更的时分,不参与变更的数码管可能呈现一次,这个颤动没有什么专业的名字,我们就称之为数码管颤动吧。这种数码管颤动是什么缘由构成的呢?为何在数据改动的时分才颤动呢?


来剖析一下我们的程序,程序在定时到 1 秒的时分,执行了“秒数+1 并转换为数码管显现字符”这个操作,一个 32 位整型数的除法运算,实践上是比较耗费时间的,至于这一段程序究竟耗费了多少时间,大家能够经过第四章讲的调试措施来看看这段程序运转用了多少时间。由于每次定时到 1 秒的时分,程序都多运转了这么一段,招致了某个数码管的点亮时间比其他状况下要长一些,总时间就变成了 1ms+本段程序运转时间,于此同时,其它的数码管就熄灭了 5ms+本段程序运转时间,假如这段程序运转时间十分短,那么能够疏忽不计,但很明显,往常这段程序运转时间曾经比较长了,致使于严重影响到视觉效果了,所以我们要采取另外一种思绪去处置这个问题。


原文链接:



路过

雷人

握手

鲜花

鸡蛋
已有 0 人参与

会员评论

最新文章

文章列表

 名表回收网手机版

官网微博:名表回收网服务平台

今日头条二维码 1 微信公众号二维码 1 抖音小程序二维码 1
浙江速典奢贸易有限公司 网站经营许可证 备案号:浙ICP备19051835号2012-2022
名表回收网主要专注于手表回收,二手名表回收/销售业务,可免费鉴定(手表真假),评估手表回收价格,正规手表回收公司,浙江实体店,支持全国范围上门回收手表
返回顶部