跟我学51单片机5单片机动态扫描驱动数码管

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

跟我学51单片机(五):单片机动态扫描驱动数码管

一、本文内容提要

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

二、原理简介

常用的段式数码管有七段式和八段式,八段比七段多了一个小数点,其他的基本相同。所谓的几段就是指数码管里有相应的几个小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)传入字节左移一位。

相关文档
最新文档