历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2021年01月28日 | 51单片机教程(五):单片机动态扫描驱动数码管

2021-01-28 来源:eefocus

简介:上一讲介绍了单片机外接键盘的原理,并给出了应用实例。本讲将介绍单片机动态驱动段式数码管。通过该讲,读者可以掌握段式数码管的工作原理和如何通过动态驱动的方法设计电路以及程序。


一、本文内容提要

上一讲介绍了单片机外接键盘的原理,并给出了应用实例。本讲将介绍单片机动态驱动段式数码管。通过该讲,读者可以掌握段式数码管的工作原理和如何通过动态驱动的方法设计电路以及程序。


二、原理简介

常用的段式数码管有七段式和八段式,八段比七段多了一个小数点,其他的基本相同。所谓的几段就是指数码管里有相应的几个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形(见图1(a))。从各发光二极管的电极连接方式又可以分为共阳极和共阴极两种类型。共阴极则是所有的二极管的阴极连接在一起,而阳极是分离的(见图1(b));而共阳极就是所有二极管的阳极是公共相连,而阴极则是分离的(见图1(c))。本学习板采用的是八段共阴极数码管,型号为LG3641AH。

图1 数码管内部结构图


前文所述,数码管与发光二极管的工作原理相同,共阳极时,所有正端接电源正极,当负端有低电平时,该段有电流流过,发光管亮,当负端为高电平时,该段无电流流过,发光管不亮。要显示什么数字,就使对应的段为低电平(见表1)。共阴极与共阳极的电平变化状态相反。当每个段的驱动电流为2~20mA,电流越大,发光越亮。


表1 显示的数字和七段码各位的对应关系表

常用的七段式数码管的硬件驱动设计方法有:静态驱动与动态驱动。


静态驱动即指每个数码管的数据线都有一个单独的数据锁存器,数据锁存器输入的数据由使能端控制,当使能端为高电平时,数据线上的数据(要显示的七段码)进入显示器,使能端与地址译码器的输出相连,要显示那位,则选通那位的地址,在软件设计上不要求程序循环,也不存在显示数字发生闪烁。但是这样会占用很多口线。


动态显示是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而节省了口线,地简化了硬件电路。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。


三、电路详解

此讲的电路图如图2。从图2 中可以看出,驱动八个八段数码管总共用了6 个单片机IO 口,其中三个IO通过控制74HC595 来实现对数码管中的各段驱动,另外三个IO 通过控制74HC138 来实现对8 个数码管中的公共端驱动。此外为了增加74HC595 输出的驱动能力,在其输出后接了一级74HC245 芯片,以提高驱动能力,增加数码管的亮度。在这里对这三个芯片进行介绍说明。


图2 数码管动态驱动电路图


74HC138 是常用的3-8 线译码器, 即具有3 个输入端( 管脚1,2,3) 与8 个输出端( 管脚15,14,13,12,11,10,9,7),作用为完成3 位二进制数据到8 位片选的译码。也就是说,3 个输入端对应8 个二进制数据(000,001,010,011,100,101,110,111),对于每个输入的数据,输出端相应位输出低电平,其他7 位输出高电平。74HC138 具有2 个低电平使能端(管脚4,5)与1 个高电平使能端(管脚6), 当低电平使能端接低电平且高电平使能端接高电平时74HC138 才能正常工作,否则8 个输出端全部输出高电平。因此在本学习板上设置一个跳线,如图2 中所示中的SM-EN 短路块,跳上时表示接低电平,74HC138 正常工作,跳开时表示接高电平,74HC138 不工作。74HC138 的真值表如表2 所示:H 代表高电平,L 代表低电平,X 代表不定的状态。


表2 74HC138输入输出真值表

74HC595 是8 位串行输入/ 输出或者并行输出移位寄存器芯片,可以将串行的数据,转为并行的输出,这样可以节约控制器的IO 口资源,因而广泛应用。


74HC595 最多需要5 根控制线, 即SDI(Pin14)、SCK(Pin11)、RCK(Pin12)、(Pin10)和(Pin13)。图2 中将直接接到高电平, 用软件来实现寄存器清零;直接接到低电平, 一直输出有效。把其余三根线和单片机的I/O 口相接, 即可实现对74HC595 的控制。数据从SDI 口送入74HC595 , 在每个SCK 的上升沿, SDI 口上的数据移入寄存器, 在SCK 的第9 个上升沿, 数据开始从SDO 移出。如果把第一个74HC595的SDO 和第二个74HC595 的SDI 相接, 数据即移入第二个74HC595 中, 照此一个个接下去, 可接任意多个。数据全部送完后, 给RCK 一个上升沿, 寄存器中的数据即置入锁存器。此时为低电平, 数据即从并口Q0 ~ Q7 输出。


74HC245 为八总线收发器芯片,即可以将数据从A 总线端口传送到B 总线端口,也可将数据从B 总线端口传送到A 总线端口。传送方向由方向控制管脚DIR(芯片1 脚)输入的逻辑电平而定。其真值表如表3 所示:


表3 74HC245输入输出真值表


H 代表高电平,L 代表低电平,X 代表不定的状态。


四、程序设计

本讲设计实例核心程序如下:



#define SDI P2_7 ( 1)


#define SCLK P2_6 ( 2)


#define RCLK P2_5 ( 3)


……


void dat_in(unsigned char dat) ( 4)


{


unsigned char i; ( 5)


for(i=0;i<8;i++) ( 6)


{


SCLK=0; ( 7)


SDI=dat&0X80; ( 8)


dat<=1; ( 9)


SCLK=1; ( 10)


}


RCLK=0; ( 11)


RCLK=1; ( 12)


}


程序详细说明:


(1)将数据输出端定义为P2.7 管脚。


(2)将数据时钟输出端定义为P2.6 管脚。


(3)将寄存器时钟输出端定义为P2.5 管脚。


(4)数据传入函数,传入一字节。


(5)定义一个无符号字符型变量。


(6)要因为要传送一个字节,故要8 次。


(7)数据时钟先输出低。


(8)让数据管脚输出传入字节的最高位。


(9)传入字节左移一位。


(10)数据时钟输出高,上升沿将数据所存储至74HC595 数据寄存器中。


(11)寄存器时钟先输出低。


(12)寄存器时钟输出高,上升沿将数据所存储至74HC595 数据寄存器中。


以上字程序的作用, 当发送一个字节的显示数据的时候, 通过74HC595 进行串行转并行的控制,每次从单片机IO发送1Bit出去, 循环8次, 完成发送一个字节,之后再的输出端以一个字节的方式传输给数码管, 实现显示。


五、调试要点与实验现象


接好硬件电路,通过冷启动方式将程序所生成的。hex 文件下载到单片机运行后,复位单片机,就可以观察到板上8 个数码管都点亮(见图3),并从数字0 到9 变化闪烁。调试的时候需要注意的是,数码管的使能控制端(见图2)必须用跳线帽跳上,从而让74HC138 能工作输出。不需要用到数码管时可以, 反之,跳开以节省系统电流损耗。



图3 数码管显示效


另外动态扫描过程中, 数码管显示的亮度与驱动电流、点亮时间和关断时间有关, 所以应当适当调整驱动电流大小和扫描频率, 从而控制显示所需要的亮度。这在驱动尺寸较大的数码管组时更是如此,为了稳定显示,硬件方面必须达到该有的驱动能力,如在驱动端再接达林顿管等。软件方面,应在实际的调试过程中不断的尝试(见本讲程序中所扫描次数的经验值),找到一个最佳临界点,即要注意动态扫描的延时间隔和扫描次数。


六、总结


本讲介绍了单片机动态驱动数码管的原理并给出了实例,通过该讲,我们可以总结如下:


动态扫描驱动数码管的优点:当显示位数较多时,采用动态显示方式比较节省I/O 口,硬件电路也较静态显示简单;缺点:其稳定度不如静态显示方式。而且在显示位数较多时CPU要轮番扫描,占用CPU较多的时间。


总的来说,无论是动态还是静态显示,其显示更新的速率不能太快,如数据不停变化,太快则无法看清楚显示的内容,在软件设计是必须注意的。另外,在同等条件下动态显示的亮度比静态显示要差一些,所以在适当提高驱动电流,例如使用限流电阻,就应略小于静态显示电路中的,或者使用缓冲驱动芯片。下讲将重点讲述单片机外部中断以及应用,以对红外遥控器进行解码作为实例,敬请期待。


推荐阅读

史海拾趣

AMI [American Megatrends Inc]公司的发展小趣事

AMI(American Megatrends Inc)是一家全球领先的硬件和软件解决方案提供商,主要专注于计算机主板固件、嵌入式系统管理和云计算服务。以下是关于AMI公司发展的五个相关故事:

  1. 公司创立与起步阶段:AMI公司于1985年成立于美国佐治亚州的诺克罗斯,并在当地建立了总部。公司创始人为S. Shankar和Pat Sarma。最初,AMI专注于为个人计算机和服务器等设备提供BIOS(基本输入/输出系统)固件,为计算机硬件行业奠定了基础。

  2. BIOS技术创新:AMI在BIOS领域进行了持续的技术创新,不断推出新的功能和改进。公司开发了多个版本的AMI BIOS,包括AMI WinBIOS、AMI Aptio和AMI UEFI BIOS等。这些BIOS版本在计算机硬件市场上得到了广泛应用,为用户提供了稳定可靠的固件解决方案。

  3. 嵌入式系统管理解决方案:除了BIOS固件,AMI还致力于开发和提供嵌入式系统管理解决方案。这些解决方案包括远程管理、监控、诊断和维护等功能,用于企业服务器、网络设备、嵌入式系统和物联网(IoT)设备等领域。

  4. 合作伙伴关系与生态系统建设:AMI与全球各种硬件和软件供应商建立了紧密的合作伙伴关系,共同推动技术创新和产品发展。公司与主板制造商、芯片厂商、系统集成商和软件开发商等合作,为客户提供全面的解决方案和支持服务。

  5. 云计算服务和新兴技术领域:随着云计算和人工智能等新兴技术的发展,AMI也开始拓展业务领域,提供云计算服务和相关解决方案。公司致力于为客户提供高性能、高可靠性的云计算平台和服务,以满足不断增长的数据处理和存储需求。

这些故事展示了AMI公司从创立初期到如今在BIOS技术创新、嵌入式系统管理、合作伙伴关系建设和拓展新兴技术领域等方面取得的重要进展。AMI作为一家全球知名的硬件和软件解决方案提供商,持续致力于为客户提供创新的产品和卓越的服务。

Gentron Corp公司的发展小趣事
如果某个LED不亮或闪烁异常,可能是LED本身损坏,需要更换新的LED。
C&K Switches公司的发展小趣事

随着公司规模的扩大,C&K开始在全球范围内进行布局。它在中国、法国、越南、德国和印度等地设立了生产基地,这些工厂不仅提高了生产效率,还使得C&K能够更好地服务全球客户。同时,C&K的产品线也不断扩展,覆盖了消费类、工业类和汽车类等多个领域。此外,C&K还支持定制化开发,能够满足不同客户的特殊需求。这种全球布局和业务拓展使得C&K在电子行业中获得了广泛的认可和好评。

GREEGOO公司的发展小趣事
合理规划时钟网络,减少时钟信号的传输距离和转接次数,以降低信号衰减和抖动。
DuPont公司的发展小趣事

早在20世纪初,DuPont公司就开始涉足电子材料的研发。当时,随着电子技术的飞速发展,对于高性能、高可靠性的电子材料的需求日益迫切。DuPont凭借其深厚的化学技术积累,成功开发了一系列具有优异性能的电子材料,如高性能绝缘材料、导电材料和封装材料等。这些材料的推出,不仅极大地推动了电子行业的发展,也为DuPont公司在电子材料领域奠定了坚实的基础。

Advanced Interconnections Corp公司的发展小趣事

随着市场竞争的加剧,AIC公司意识到品质是赢得客户信赖的关键。于是,公司加大了对生产过程的管控力度,从原材料采购到生产流程,再到产品检验,都实行了严格的质量控制。同时,AIC公司还建立了完善的售后服务体系,及时响应客户需求,解决产品使用过程中出现的问题。这些举措使AIC公司的产品赢得了客户的广泛好评,进一步巩固了市场地位。

问答坊 | AI 解惑

单节锂离子电池保护芯片的设计

前 言   锂离子电池保护芯片的设计与其封装结构密切相关,如图1所示为封装在锂离子电池内部的保护电路的基本结构。在正常情况下,充电控制端CO 和放电控制端DO 为高电位,N型放电控制管FET1和充电控制管FET2处于导通状态,电路的工作方式可以是电 ...…

查看全部问答>

《求助》dsPIC33FJ128 串口设置问题

各位好,最近想用dsPIC33FJ128GP802或MC802 SDIP28封装的,做一个交流电压测量的东西,初学,想请教一个比较低级的问题: 我查看了数据手册,看到这两款芯片都有UART和SPI,但是怎么在管脚图上没找到是哪个脚呢?是需要配置RPx管脚来复用吗? 请 ...…

查看全部问答>

如何映射网络驱动器

目前做一个wince程序,用的是vs2005。想问如何把自己电脑上的文件夹映射到模拟器上该怎么做??…

查看全部问答>

大学生申请创新项目

我该选择什么项目好那?? 我是大二的学生,学的专业是自动化 我们学校要学生自己创新可以申请3000元左右的经费,但是这个项目要创新而且能得到批准。 我是一个懵懂的学生。 对这个行业是俩眼摸黑,对这种项目申请更是不知。 请有经验的朋友们 ...…

查看全部问答>

100分求:打印过滤驱动,有这方面的资料或者例子都可以,谢谢大家!!!!!

并口过滤驱动,俺是新手,刚接触驱动,希望有例程或这文档,谢谢!!!…

查看全部问答>

图像处理的问题

本帖最后由 dontium 于 2015-1-23 13:23 编辑 我先对图像做yuv到rgb的转换,然后将图像上abs(R)<=80 && abs(G)<=60 && abs(B)<=80的点的灰度置为0,其他点的灰度置为255,然后对图像做区域标记。结果是出现两 …

查看全部问答>

单片机秒表和数字钟的实现

非常好的资料_秒表时钟程序_c语言_51单片机_ 基于单片机的数字钟设计与实现…

查看全部问答>

基于cortex-A8的3D动感游戏机

看了很多人的项目,发现大家都是用这块板子做控制功能,其实只是做控制操作外围设备的话用9B96或cortex-M4足够了。这块开发板最大的优势就在于主频高,可以支持OPENGL,所以就有了做本项目的想法。如果时间允许的话,还可以把项目扩展成为联网的。 ...…

查看全部问答>

FlashMagic V7.02

FlashMagic V7.02软件下载,支持LPC800…

查看全部问答>

TL494输出的波形

本帖最后由 paulhyde 于 2014-9-15 03:51 编辑 求教一下 ,TL494的9、10两个脚输出的波形是同相还是反相的啊  …

查看全部问答>