第3章数码管显示输出Word文件下载.docx

上传人:b****6 文档编号:21835404 上传时间:2023-02-01 格式:DOCX 页数:18 大小:409.22KB
下载 相关 举报
第3章数码管显示输出Word文件下载.docx_第1页
第1页 / 共18页
第3章数码管显示输出Word文件下载.docx_第2页
第2页 / 共18页
第3章数码管显示输出Word文件下载.docx_第3页
第3页 / 共18页
第3章数码管显示输出Word文件下载.docx_第4页
第4页 / 共18页
第3章数码管显示输出Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

第3章数码管显示输出Word文件下载.docx

《第3章数码管显示输出Word文件下载.docx》由会员分享,可在线阅读,更多相关《第3章数码管显示输出Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

第3章数码管显示输出Word文件下载.docx

0xC0

8

10000000

0x80

1

11111001

0xF9

9

10010000

0x90

2

10100100

0xA4

A

10001000

0x88

3

10110000

0xB0

b

10000011

0x83

4

10011001

0x99

C

11000110

0xC6

5

10010010

0x92

d

10100001

0xA1

6

10000010

0x82

E

10000110

0x86

7

11111000

0xF8

F

10001110

0x8E

②共阳数码管全部熄灭不显示

如果要让共阳数码管全部熄灭不显示,可以在公共端接高电平的条件下,各段对应的所有阴极引脚都接高电平,即段码为0xFF(二进制11111111)。

此段码一般被用作共阳消隐处理(消隐的原理及意义后叙)。

3.2.2共阴数码管显示输出原理

①共阴数码管显示数字或字符

给共阴数码管的公共端(com端)接低电平,将需要点亮的段对应的阳极引脚接高电平,将不需要点亮的段对应的阳极引脚接低电平,就可使数码管显示我们希望看到的数字或字符。

表3-2列出了共阴数码管显示数字和字符时各引脚所加电平的情况,俗称共阴段码表,其中,小数点段dp不点亮且排在8位二进制数据的最高位(位7),后面依次是段g、f、e、d、c、b和a,段a排在8位二进制数据的最低位(位0)。

表3-2共阴数码管段码表

00111111

0x3F

01111111

0x7F

00000110

0x06

01101111

0x6F

01011011

0x5B

01110111

0x77

01001111

0x4F

01111100

0x7C

01100110

0x66

00111001

0x39

01101101

0x6D

01011110

0x5E

01111101

0x7D

01111001

0x79

00000111

0x07

01110001

0x71

②共阴数码管全部熄灭不显示

如果要让共阴数码管全部熄灭不显示,可以在公共端接低电平的条件下,所有阳极引脚都接低电平,即段码为0x00(二进制00000000)。

此段码一般被用作共阴消隐处理。

3.2.3数码管显示输出驱动电路

在数码管的实际应用中,除按以上段码数据加载引脚的电平外,还需考虑数码管的驱动问题,数码管的驱动电流大小一般在5mA左右,使用74LS573类锁存器驱动电路或使用8550类晶体管驱动均可。

3.2.4静态显示和动态显示

静态显示和动态显示,是在多位数码管同时显示信息的前提下分类的,1位数码管的显示不存在静态和动态显示之分。

在了解和掌握静态显示和动态显示原理之前,需先掌握位码的概念。

当多位数码管同时显示时,自然要关注每个数码管显示的内容是什么,但同时也要区分是哪一个或者是哪几个数码管在显示。

这时,除控制数码管显示内容的段码数据外,还要有用于区分数码管位置的数据,即位置码,简称位码。

如图3-6所示,8个数码管同时显示时,名称相同的段的引脚彼此相连,即8个数码管中,8个名称为a的段的引脚连接在一起,形成公共“A”段的引脚;

8个名称为b的段的引脚连接在一起,形成公共“B”段的引脚,……,8个名称为dp的段的引脚连接在一起,形成公共“DP”段的引脚。

这样,送到公共段引脚A,B,C,D,E,F,G,DP的段码数据,自然会送到每个数码管,并用来控制数码管显示的内容。

而每个数码管的公共端(引脚3和引脚8并联后的引脚)各自独立,在图3-6中,从左至右,8个数码管的公共端暂且命名为W1,W2,……,W8,这些独立的公共端可以用来区分每一个数码管,而送到这些独立的公共端上的电平数据就是数码管的位码,使用这些位码数据可以区分每一个数码管。

假设图3-6中8个数码管是共阳的,则公共端W1,W2,……,W8是各个数码管的阳极。

根据共阳数码管显示的原理,只有在阳极是高电平的前提下,送到段引脚的段码数据(低电平有效)才可以显示出来,如果阳极是低电平,则无论段引脚是高电平还是低电平,数码管都不会显示。

所以,8个数码管中,如果希望哪个数码管显示,就将其公共端置成高电平。

例如,如果仅仅希望数码管LED1这一个数码管显示,则送数据0x01(二进制00000001)到公共端W8~W1,此处假定W8~W1引脚连接到一个8位的数据I/O口,而W8是一个字节数据的最高位,W1是一个字节数据的最低位。

送到段引脚的数据将在第一个数码管LED1上显示出来,其余七个数码管尽管得到了段数据,但其公共端是低电平,是不显示的。

此时,送到公共端引脚的数据0x01就是位码。

如果希望8个数码管全部显示,则送到公共端引脚的位码数据就是0xFF。

如果图3-6中的8个数码管是共阴的,则送到段引脚的数据应是共阴数码管的段码(如表3-2所示),送到公共引脚com的数据就是位码,因为是共阴数码管,所以位码中低电平0对应的数码管将显示信息。

例如,如果计划让数码管LED1和LED3显示,则位码为0xFA(二进制11111010,依旧假定W8是字节数据中的最高位,W1是字节数据中的最低位)

图3-68个数码管同时显示

在学习和掌握位码的概念之后,下面来说明静态显示和动态显示。

所谓静态显示,就是多个数码管同时显示时,相同的段码数据,能使位码数据选中的多个数码管,同时显示相同的内容,如同一个数码管一样。

相反,动态显示可以使同时显示的各个数码管显示出不同的内容。

数码管动态显示的本质是动态扫描显示,即分时显示的过程。

动态显示的原理可以这样描述:

让多个数码管一个接一个地依次点亮,这样,送到每个数码管用于显示的段码数据就可以不同,每个数码管显示的内容自然不同,但每个数码管被点亮时间必须要短,并且依次点亮的过程要不断地快速重复。

尽管某一时刻只有一个数码管在显示,但在数码管的余辉效应和人眼的视觉暂留效应共同作用之下,人眼看到的是多个数码管“同时”被点亮的效果。

3.2.5数码管静态显示实例

功能要求:

使用数码管静态显示数字或字符。

硬件说明:

如图3-7所示共阳数码管显示输出电路,单片机P0口输出位码数据,P1口输出段码数据。

8位位码数据经驱动晶体管8550后,分别连接到8个数码管的公共端(阳极)。

8个数码管的同名段引脚彼此连接,100Ω电阻起限流作用。

软件说明:

1、P1口依据表3-1所示共阳数码管段码表,送出段码数据;

2、在PNP驱动晶体管8550的作用下,共阳数码管的位码数据是低电平有效,即P0口送出的位码数据中,低电平数据位经晶体管8550之后会变为高电平数据位,恰好选中对应的数码管;

例如,选中数码管LED1的位码数据是0xFE,8个数码管全部选中用于显示的位码是0x00。

3、本例P1口送出的段码数据是0xF8,即数组元素duan[7],则显示数字“7”;

P0口送出的位码数据是0x00,即8个数码管全部显示。

最终显示效果是8个数码管同时静态显示数字“7”。

4、通过改变本例主函数中送到P0口的位码数据和送到P1口的段码数据,可以显示其它数字或字符。

 

图3-7共阳数码管显示输出

程序清单如下:

#include<

reg52.h>

#defineucharunsignedchar

unsignedcharduan[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

main()

{

P0=0x00;

P1=duan[7];

}

3.2.6数码管动态显示实例1

使用数码管动态显示数字或字符。

动态显示与静态显示使用同一电路,如图3-7所示共阳数码管显示输出电路。

具体细节请参照静态显示硬件说明。

1、P0口输出位码,低电平有效。

因为采用动态扫描方式,每次只能有一个数码管被点亮,所以P0口输出位码依次是0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;

2、P1口输出段码,共阳数码管段码如表3-2所示;

3、主程序中的for延时语句for(j=0;

j<

=200;

j++);

是动态扫描的时间间隔,读者可通过调节延时时间的长短,观察现象,深入理解动态扫描的原理。

首先设置较长的延时时间,则各个数码管如同流水灯一样被逐个点亮;

将延时时间逐渐减小,各个数码管类似流水灯一样“跑”得会更快;

进一步将延时时间减小,可以看到数码管全部点亮,但数码管闪烁现象较严重;

继续减小延时时间,数码管闪烁效果会减弱,直至肉眼感觉不到闪烁为止。

4、主函数中P1=0xff;

语句用于消影。

动态扫描可以实现动态显示,即多个数码管同时显示,而每一个数码管的显示内容可以不同,为了使本次扫描的显示结果不影响下次扫描的显示结果,在每次扫描显示之后,将数码管各段全部熄灭,即共阳数码管送段码0xFF,共阴数码管送段码0x00,这就是消影。

消影可使显示稳定、清晰。

5、本例程序清单的显示效果是8个数码管依次显示数字0~7。

改变主函数中P1=duan[i];

语句为P1=duan[i+1];

可使显示结果变为8个数码管依次显示数字1~8;

若改为P1=duan[i+8];

显示结果变为8个数码管依次显示89AbCdEF。

#defineuintunsignedint

unsignedcharwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchari;

uintj;

while

(1)

for(i=0;

i<

=7;

i++)

{

P0=wei[i];

P1=duan[i];

for(j=0;

P1=0xff;

}

}

}

3.2.7数码管动态显示实例2

如图3-10所示,使用74HC573锁存器的共阳数码管显示输出电路。

1、因为使用P0口输出位码和段码,所以P0口带有上拉电阻(PR_10K);

2、电路使用两片74HC573锁存器驱动,一片用于驱动段码,另一片用于驱动位码。

74HC573锁存器双列直插实物如图3-8所示,引脚分布如图3-9所示,

图3-874HC573锁存器实物图图3-974HC573锁存器引脚图

表3-374HC573引脚定义表3-4锁存器74HC573真值表

引脚

序号

名称

功能描述

OE

输出使能端,低电平有效

2~9

D0~D7

数据输入端

10

GND

数字地

11

LE

锁存使能端

12~19

Q7~Q0

数据输出端

20

Vcc

电源端

输入

输出

输出使能OE

锁存使能LE

D

Q

X

不变化

高阻

从74HC573的真值表可见,输出使能OE端高电平时,不论锁存使能LE和输入D是什么值,输出都是高阻,所以输出使能OE端必须接低电平,一般是直接接地。

在输出使能OE端接低电平的前提下,锁存使能端LE高电平时,输出与输入一致,即输出Q紧跟输入D的变化而变化;

当LE处于低电平时,不论输入是什么,输出电平Q都保持不变,还是LE变为低电平之前的Q值(锁存)。

从以上分析可见,通过对锁存使能端的控制,可以使输出端Q跟随输入端D的变化而变化(LE高电平),也可以使输出端保持上一次输出端的状态不变化(LE低电平)。

对于数码管显示输出而言,从51单片机I/O口输出的位码和段码,可分别锁存在两片74HC573中,两片74HC573的输出端再分别连接到数码管的各段引脚和各位引脚,即可实现数码管的显示输出。

还有一点需要提及的是,本节前面讲述的数码管静态和动态显示中,51单片机用两个I/O口分别输出位码和段码,占用口线较多,这对口资源缺乏的51单片机而言,显然不够高效。

运用74HC573锁存器时,位码和段码可以从同一个I/O口上分时输出,例如,先从P0口输出位码到一片74HC573并锁存,再从P0口输出段码到另一片74HC573并锁存,锁存的位码和段码加载到数码管上,数码管就可以显示设定的内容。

当然,两片74HC573的锁存使能端(LE)要分开并占用不同的I/O口线。

本例中,两片74HC573的锁存使能端,分别连接到P2.0(位码)和P2.1(段码),位码和段码都从P0口输出。

这样的驱动电路除两片74HC573外,不再需要其它额外的元器件,电路简单实用。

1、从P0口输出位码和段码时,首先将位码锁存使能端LW拉高,使其呈高电平;

然后位码从P0口输出,进入到第一片74HC573中,随后将位码锁存使能端LW拉低,锁存位码。

接着将段码锁存使能端LD拉高,使其呈高电平;

然后段码从P0口输出,进入到第二片74HC573中;

随后将段码锁存使能端LW拉低,锁存段码。

2、语句for(j=0;

的功能与前面的例子一样,起到延时功能;

3、段码和位码依旧采用查表实现。

图3-10使用74HC573锁存器的共阳数码管显示输出

unsignedcharduanca[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

//

unsignedcharweica[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

sbitLW=P2^0;

sbitLD=P2^1;

while

(1)

for(i=0;

8;

LW=1;

P0=weica[i];

LW=0;

LD=1;

P0=duanca[i];

LD=0;

for(j=0;

}

3.2.8数码管动态显示实例3

设计一个使用数码管显示时间的电子钟。

显示格式是“HH-MM-SS”,其中“HH”表示小时,“MM”表示分钟,“SS”表示秒。

本例继续使用图3-10所示硬件电路。

1、子函数voiddelay4ms(void)是一个延时子函数,延时用for循环嵌套实现,延时时间约为4ms,由于不是精确的4ms延时,所以本例的电子钟时间有较大误差(1小时慢大约1分钟)。

如果想得到精确的延时,可以使用51单片机的定时/计数器来实现,定时/计数的知识将在第四章讲解,届时再设计精确延时电子钟并用数码管显示时间;

2、由于延时时间是4ms,1秒钟就需要250次4ms延时,然后秒值才加1;

秒值计数到60后,分钟值加1,同时将秒值清零;

当分钟值计数到60后,小时值加1,同时将分钟值清零;

小时值计数到24时,小时值清零;

3、全局变量hour表示小时值,minute表示分钟值,second表示秒值。

它们的十位和个位数值分别对各自变量用10整除和求余数得到;

4、送到P0口的数值0xbf,用于在小时和分钟、分钟和秒之间显示一条短线“-”,以示区分。

unsignedcharduanca[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uinthour=0,minute=0,second=0,second0=0;

voiddelay4ms(void)

uinti,j;

=2;

for(j=0;

=164;

LW=1;

P0=weica[i];

LW=0;

LD=1;

switch(i)

case0:

P0=duanca[hour/10];

break;

case1:

P0=duanca[hour%10];

case2:

P0=0xbf;

case3:

P0=duanca[minute/10];

case4:

P0=duanca[minute%10];

case5:

case6:

P0=duanca[second/10];

case7:

P0=duanca[second%10];

default:

delay4ms();

second0++;

if(second0==250)

{

second0=0;

second++;

if(second==60)

second=0;

minute++;

if(minute==60)

minute=0;

hour++;

if(hour==24)

hour=0;

}

思考题

1.简述数码管的原理和应用领域。

2.

3.如何区分共阳和共阴数码管?

4.

5.简述数码管显示输出的原理。

6.

7.分别编写0~9,A,b,C,d,E,F的共阳和共阴数码管的段码值。

8.

9.试说明数码管的静态扫描和动态扫描各有何特点?

10.

11.消影是什么?

数码管如何消影?

12.

13.如何理解数码管动态显示中的段码和位码概念?

14.

15.简述74HC573的使用方法。

16.

17.简述PNP三极管8550的使用方法。

18.

19.编制程序实现数码管动态显示“HELLO”字样。

20.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1