单片机数码管显示消隐

发布者:太和清音最新更新时间:2016-12-23 来源: eefocus关键字:单片机  数码管  显示消隐 手机看文章 扫描二维码
随时随地手机看文章

不知道同学们是否发现了,我们的这两个数码管动态显示程序的运行效果似乎并不是那么完美,第一个小问题,大家仔细看,数码管的不应该亮的段,似乎有微微的发亮,这种现象叫做“鬼影”,这个“鬼影”严重影响了我们的视觉效果,我们该如何解决呢?

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

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

“鬼影”的出现,主要是在数码管位选和段选产生的瞬态造成的。举个简单例子,我们在数码管动态显示的那部分程序中,实际上每一个数码管点亮的持续时间是 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)这句程序之前,加上一句 ENLED=1;等到把 ADDR2=0; ADDR1=0;ADDR0=0; i++; P0=LedBuff[0];这几条刷新程序全部写完后,再加上一句 ENLED=0;然后再进行 break 操作即可。

这个地方逻辑思路上稍微有点复杂,大家一定要理解深刻,深刻理解,彻底弄明白,把这个瞬间的问题弄明白了,后边很多牵扯到此类情况的问题,我们都可以一并搞定。

上边的数码管程序还有第二个问题,大家仔细看,我们的数码管上的数字每一秒变化一次,变化的时候,不参加变化的数码管可能出现一次抖动,这个抖动没有什么专业的名字,我们就称之为数码管抖动吧。这种数码管抖动是什么原因造成的呢?为何在数据改变的时候才抖动呢?

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

关键字:单片机  数码管  显示消隐 引用地址:单片机数码管显示消隐

上一篇:单片机逻辑电路与逻辑运算
下一篇:单片机中断的优先级

推荐阅读最新更新时间:2024-03-16 15:26

用AT89S205 1单片机实现PWM输出控制
 PWM(Pulse Width Modulation)脉宽调制技术。通过对脉冲宽的调制,获得所需要的波形(含形状和幅值)。   PWM也是单片机常用的模拟量输出方法,通过外接转换电路,可以将不同占空比的脉冲变成与之对应的电压(占空比是指正脉冲与整个周期的比值)。本文介绍的程序,是通过调整占空比来调节输出模拟电压的方法之一。可以用其控制直流电机的转速。   一、用延时子程序实现PWM控制   P1.0口接PWM转换电压输入端.电压输出接电压表的+端,电压表的-端接地,通过改变PWM的占空比来观察电压表的读数,占空比越大,电压表的读数就越大。   二、用中断实现PWM控制   通过对单片机定时器初始值的两次不同设置,来实现占空
[单片机]
德州仪器推出首款量产超低功耗双频无线MCU
2016年9月13日,北京讯 为了扩展物联网(IoT)的功能性,德州仪器(TI)今日宣布推出业界功耗最低的双频无线微控制器(MCU),这款已量产的MCU可以在单芯片上支持Sub-1 GHz和Bluetooth 低功耗连通性。作为TI引脚和软件兼容的SimpleLink 超低功耗平台的一员,这款全新的SimpleLink双频CC1350无线MCU能够帮助开发人员利用一个微型单芯片取代以往的三芯片解决方案,同时降低设计的复杂度、节省功耗、成本和电路板空间。CC1350无线MCU在由一颗纽扣电池供电的情况下能够覆盖高达20km的范围,满足了楼宇和工厂自动化、警报和安防、智能电网、资产跟踪和无线传感器网络等应用的需求。 针对低功耗
[物联网]
基于单片机的低成本高精度A/D转换方案设计
  目前单片机在电子产品中已经得到了广泛的应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高几元甚至很多!本文给大家提供一种实用的用普通单片机实现的A/D转换电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D转换精度可达到8位或更高,因此很具有实用价值。   其电路如图一所示:      图一   其工作原理说明如下:   1、硬件说明:   图一中“RA0”和“RA1”为单片机的两个I/O脚,分别将其设置为输出与输入状态,在进行A/D转换时,在程序中通过软件产生PWM,
[单片机]
基于<font color='red'>单片机</font>的低成本高精度A/D转换方案设计
如何充分利用MSP430单片机的FLASH
优点: 能够充分利用MSP430单片机的自带FLASH储存空间,就可避免外扩EEROM芯片了,一是节约成本,二是少了外扩EEROM的读写代码,三是同样可以储存用户数据,比如A/D转换后的数据。当然,如果是常量就不必了,直接将常量申明为“CONST”变量即可,这个就不多说了,懂的。 具体方法: 先把完整的程序编好(不包括FLASH的),然后编译(我用的是IAR,CCE没试过),进行在线仿真(软仿真硬仿真均可),在菜单栏选择 View/Memory ,然后就可以看到FLASH 各个地址的数据了,记下FLASH 还没有被程序占用的空间的地址,然后将FLASH的程序加到你的主程序里,再编译,检验你记下的地址是否被程序占用,如果
[单片机]
AVR单片机用于车载空调控制器的实用电路
简介:汽车空调控制系统框图如图1所示。系统由按键扫描、电压检测、温度检测、风机控制、压缩机控制、LED数码管显示、蜂鸣器报警电路和单片机组成。 汽车空调控制系统框图如图1所示。系统由按键扫描、电压检测、温度检测、风机控制、压缩机控制、LED数码管显示、蜂鸣器报警电路和单片机组成。 图1 汽车空调控制系统框图 单片机工作的主要原理为:扫描键盘,当制冷键按下,同时无故障报警时系统将ADC采样的车内温度与预先设定的制冷温度比较,如车内温度高于设定温度则打开冷凝风机、压缩机制冷;当车内温度低于设定温度2℃时关闭压缩机、冷凝风机,若此时强制冷键按下,系统将忽略预设温度直接启动制冷。其中单片机PB0、PB1口输出高低信号控制MOS
[单片机]
AVR<font color='red'>单片机</font>用于车载空调控制器的实用电路
有关51单片机有关晶振的问题总结(干货)
在初学51单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就是如同人的心脏,是血液的脉搏,把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解…… 有关51单片机有关晶振的问题一并总结出来,希望对学51的童鞋来说能有帮助。 一、为什么51单片机爱用11.0592MHZ晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。 其二:用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器
[单片机]
基于AVR单片机LED照明灯控制系统应用设计
1 LED照明灯控制系统原理   系统原理图如图1所示。当红外接收器接收到红外遥控信号时,通过外部中断将AVR单片机从休眠模式中唤醒;AVR单片机开始解析红外信号,如果与系统地址匹配,则将根据解析到的命令改变LED恒流源驱动的输入,从而改变LED灯的状态。   2 系统硬件设计   2.1 控制器   控制器采用AVR单片机ATmega8。ATmega8是Atmel公司在2002年推出的一款AVR单片机,采用小引脚封装。ATmega8内部集成 8 KB的可编程F1ash、512字节EEPROM和1KB内部SRAM;3个PWM通道,可实现任意小于16位、相位和频率可调的PWM脉宽调制输出;1 个可编程的串行USART接
[单片机]
基于AVR<font color='red'>单片机</font>LED照明灯控制系统应用设计
基于单片机C8051F021和时钟芯片实现定时采集存储系统的设计
随着科技的高速发展,现代工业测控领域的很多应用中都需要实现大量数据的定时采集存储。以为海流计设计的海流数据采集存储接口电路为例,介绍一种定时采集存储系统的工作原理及其实现方法。 1 总体结构 在很多情况下,尤其是恶劣的工作环境下,高性能的单片机和大容量的Flash存储器是数据采集存储系统的最佳选择,本文介绍的系统也是基于这样的考虑。系统硬件结构并不复杂,包括高性能单片机C8051F021、实时时钟芯片SD2300、大容量Flash存储器K9G8G08及其外围电路,如图1所示。工作原理也较为简单,通过串口将单片机C8051F021与海流计相连,通过对单片机的编程实现对海流计的控制和使用。同时,为了实现定时采集和数据存储的功能,还
[单片机]
基于<font color='red'>单片机</font>C8051F021和时钟芯片实现定时采集存储系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved