数码管的静态显示与动态显示介绍

发布者:创新驿站最新更新时间:2018-03-16 来源: eefocus关键字:数码管  静态显示  动态显示 手机看文章 扫描二维码
随时随地手机看文章

数码管是单片机系统中经常用到的显示器件, 从内部结构上可以分为共阴极和共阳极数码管。对不同的数码管,电路的接法也不一样。图1A为数码管的结构图。以共阳极数码管为例, 要想点亮某段, 只需要在相应的段上给低电平即可。图1B为共阳极数码管段码分布, 以及一个显示的实例。

 

图1 数码管段码分布及显示示例

图1 数码管段码分布及显示示例

按照工作方式, 数码管驱动可以分为静态显示和动态扫描。所谓静态显示, 就是每一个数码管的段码都要独占具有锁存功能的输出口, CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符, 直到下一次送出另外一个字码之前, 显示的内容一直不会消失;动态扫描是把所有显示器的8个段码中的A-dp的各个相同段连接在一起, 接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。即让各位数码管按照一定顺序轮流显示, 只要扫描频率足够高, 由于人眼的“ 视觉暂留”现象,就能连续稳定的显示。静态显示法的优点是显示稳定、亮度大, 节约CPU时间, 但占有I/O口线较多, 硬件成本高。动态扫描其特点在于能显著降低显示部分成本,大大减少显示接口的连线结构。举例, 静态驱动4位数码管, 需要4×8=32个I/O口, 而动态的驱动位数码管只需要4+8=12个I/O口。

电路图详解

单片机的I/O资源是有限的, 因此如何节省I/O口线而又不影响系统的功能是单片机工程师面临的实际问题。图2采用是串行转并行芯片74HC595和三线一八线译码器实现8位数码管的驱动, 好处是可以节省更多的I/O口线作其他用途。正常驱动8个数码管需要8+8=16根口线, 采用595+138的方式只需要3+3=6根。

图2 数码管显示电路连接图

图2 数码管显示电路连接图

为了更好地理解电路, 这里简单介绍一下74HC595和74LS138两个芯片的作用。74HC595是一款串行移位输入、8位并行输出的芯片, 内带数据移位寄存器和三态输出锁存器;SER为串行数据输入;SRCLK为移位时钟输入;RCLK为锁存控制输入;QA-QH为数据输出, QH’为向下一片(位)的串行数据输出。74LS138是一个3线一8线的译码器, 低电平有效输出, 因此每个时刻输出端口只有一个是低电平, 其余都是高电平输出, 因此可以驱动共阴极数码管。如果驱动共阳极的数码管还需要做一个非门的转换。最后, 为了增加单片机I/O的输出能力, 在74HC595与数码管之间串接了一个74HC245并行驱动芯片。

从电路图中可以看到, 每个芯片的电源和地附近都接了一个104电容, 这个高频滤波电容, 可以减小电源对IC的影响。注意高频电容的布线, 连线应靠近电源端并尽量粗短, 否则, 等于增大了电容的等效串联电阻, 会影响滤波效果。其实, 不加这个电容也可以, 但万一因为干扰出了问题, 就会很难查找根源, 实际调试电路板的时候就会发现电容的作用非常大的, 而这些恰恰是初学者容易忽略的地方。

关健程序分析

动态扫描需要注意的一个问题, 由于所有数码管的段码接到一个公用的I/O上, 在每个瞬间, 各个位数码管上的段码都是一样的, 要想在不同的位显示不同的信息, 必须用扫描显示的方式, 在一段时间内, 只点亮一个数码管, 其余的都处于关闭状态;下一个时间段内点亮下一个数码管, 其余的都处于关闭状态。如此循环, 造成一个视觉暂留的效果, 当闪烁的频率大于50Hz的时候, 人眼就分辨不出来了, 即各个位上显示的信息就“ 区分”开了。扫描频率过高, 每个位显示的时间太短, 数码管的亮度不够;扫描频率过低, 会有明显的闪烁感。这个时间需要根据不同的硬件电路, 做不同的调整, 而且跟数码管的个数有关, 一般的经验值延时10ms左右。

图3 数码管动态显示流程图

图3 数码管动态显示流程图

总结

动态扫描过程中, LED显示的亮度同驱动电流、点亮时间和关断时间有关, 调整驱动电流大小和扫描频率, 可以控制LED显示的亮度, 同时稳定显示。这需要在实际的调试过程中不断的尝试, 找到一个最佳临界点!对于尺寸比较大的数码管, 可以在74HC245与数码管之间再串接一个ULN2003(7段)或者ULN2803(8段)达林顿管增加驱动能力。


关键字:数码管  静态显示  动态显示 引用地址:数码管的静态显示与动态显示介绍

上一篇:无人机遥感控制平台电路设计
下一篇:单片机测速的几种方案解析

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

数码管显示的ADC0831电压表程序
/* 程序效果:数码管显示0.00-5.00U电压,调节电位器,得到      ADC0831的2脚电压值。 注:测量时先把电位器调节到中间,也就是2.5U,但切记   所测的引脚的电压值不能超过5U,否则会烧坏ADC0831    芯片和单片机,小心哦。 程序版权所有: http://www.51hei.com ,如无法编译,请去掉所有前导空白。 */ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code table ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6
[单片机]
4位数码管电子时钟(冒号为秒闪烁)
org 0000h ajmp main org 000bh ljmp inti0 org 0030h main: mov ie,#82h mov tmod,#01h mov th0,#4ch mov tl0,#00h mov 31h,#00 mov 32h,#00 mov 33h,#00 mov sp,#60h setb tr0 loop:lcall display lcall keyer ajmp loop display: mov a,31h ;秒显示 mov b,#10 div ab mov 20h,a mov 21h,b disp
[单片机]
51单片机C编程(十四 数码管飞入效果)
#include reg51.h #define uchar unsigned char #define LED P0 uchar code tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管数字码 uchar disp1 ={{8,10,10,10},{0,8,10,10},{5,0,8,10},{1,5,0,8},{10,1,5,0},{10,10,1,5},{10,10,10,1},{10,10,10,10}}; //数码管的8个显示状态 uchar scan; void delay1ms(int); void
[单片机]
51单片机对8位数码管依次显示0-7的设计
共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90} 共阳极数组A~F:display[]={0x88,0x83,0xA6,0xC1,0x86,0x8E} 共阴极数组0~9:display[]={0x3F,0x06,0x5B,0x4F,0x6E,0x6D,0x7D,0x07,0x7F,0x6F} 共阴极数组A~F:display[]={0x77,0x7C,0x59,0x3E,0x79,0x71} 共阴、两组四位一体数码管,位选接74LS138译码器,输入(位选)CBA接P20,P21,P22。段选通过74573后接P1口。 若不使用译码器,可直
[单片机]
51单片机对8位<font color='red'>数码管</font>依次<font color='red'>显示</font>0-7的设计
51单片机入门之四:静态数码管
LED数码管是单片机外围接口设备中常用的显示设备,有七段管和米字管两种,实验室中常用的是七段管。其工作方式有两种:共阴极和共阳极。所谓共阴极是把LED的com端都接地,而共阳极就是把com端都接高电平。其驱动显示方式也有两种:静态显示和动态显示。 静态显示中每个数码管占用单片机的一个八位口I/O口,工作时点亮的段常亮。于该种方式而言,硬件电路简单,编程简单,但是浪费单片机的I/O口。下面简单演示一下该种驱动方式。 P2口接一个数码管,数码管显示的数字每秒钟自动加一,加到9后清0,一直循环,本实验中数码管采用共阴极接法。 实验原理图如下: 实验程序如下: view plain copy #include reg52.
[单片机]
51单片机入门之四:<font color='red'>静态</font><font color='red'>数码管</font>
51单片机实验1——数码管显示串行口接收的字符的ASCII码
仿真电路图如下: 代码如下: #include reg51.h #define uint unsigned int #define uchar unsigned char uint code segcode ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D, 0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; uchar code weicode ={0x0e,0x0d,0x0b,0x07}; uchar disbuf ={0,0,0,0}; //定义并初始化数码管数据缓冲区 void delayms(uint x) //延时1ms函数
[单片机]
51单片机实验1——<font color='red'>数码管</font><font color='red'>显示</font>串行口接收的字符的ASCII码
ATmega16控制MAX7219驱动数码管
ATmega16控制MAX7219驱动数码管,提供源码,原理图,焊接实物图等。链接见文末。 原理图 源码 MAX7219.H /********************************************************** * 文 件 名 : MAX7219.H * 描 述 : MAX7219驱动包程序 **********************************************************/ #ifndef _MAX7219_H_ #define _MAX7219_H_ #include #include //功能寄存器宏定义 #define DEC
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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