产品选型

单片机数码管显示 详解数码管显示控制

小编 2024-10-06 产品选型 23 0

详解数码管显示控制

数码管种类繁多,按外观来划分,可以分为七段数码管、米字型数码管、点阵块等。图8-5所示为各种不同形状的数码管。

图8-5 各种不同形状的数码管

LED数码管结构与工作原理

单片机系统中常用的是七段数码管,它由8个发光二极管(以下简称字段)构成,如图8-6(a)图所示(注:由于小数点字段不常用,所以一般称为七段),通过不同的组合可以显示数字0~9、字符A~F、H、L、P、U、符号“-”及小数点“.”。

根据发光二极管物理连接的不同,七段数码管可以分为共阴极和共阳极两种结构。共阴极型数码管如图8-6(b)所示,所有字段的阴极均连接低电平,因此在使用共阴极数码时,需要在相应字段上加高电平,才会使其发光。共阳极数码管如图8-6(c)所示,所有字段的阳极均连接高电平,在使用时,需要在相应字段上加低电平。

图8-6 7段数码管结构

LED数码管字型编码

在单片机与数码管组成的应用系统中,一般将单片机的一个并口与数码管的8个段控制引脚连接,且按照口线位的顺序由低到高与a、b、c、d、e、f、g、h连接,这样,若要显示不同字符,只需应用单片机的口线输出相应的控制的电平就可以实现。向口线送的数据就是LED的字型编码。共阴和共阳的字型编码如表8-2所示。

表8-2 共阴和共阳的字型编码表

LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态显式和动态显式两类。

LED数码管静态显示

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口线进行驱动,或者使用如BCD码、二–十进位解码器解码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口较多,如驱动5个数码管静态显示则需要5×8=40根I/O口线来驱动,而1个89S51单片机可用的I/O口线才32个。

2位共阳极数码管的静态显示电路如图8-7所示。

图8-7 2位共阳极数码管的静态显示电路原理图

显示数字12的C51程序如下:

LED数码管动态显示

数码管动态显示是单片机中应用最为广泛的显示方式,动态驱动是将所有数码管的8个同名端“a,b,c,d,e,f,g,h”连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

当单片机输出字形码时,所有数码管都接收到相同的字形码,究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示,不会有闪烁感,动态显示的效果和静态显示相同,并且能够节省大量的I/O口线,降低功耗。

2位共阳极数码管动态显示电路如图8-8所示。

显示数字12的C51程序如下:

图8-8 2位共阳极数码管动态显示电路原理图

单片机之我见之数码管显示

数码管在生活中的使用十分常见,主要提供数字的显示,如时钟显示,计数,家用电磁炉,电饭煲等等设备上都有其身影。数码管由7个LED发光二极管组合而成,7个发光二极管的负极相连在一起称为共阴,正极相连在一起称为共阳。

数码管/共阳及共阴

从上图来看,要想使数码管显示相应的数字,只要对应的发光二极管点亮就可以。如想显示数字2,以共阴极的来说,只要A、B、D、E、G对应的发光管阳极接电源,共阴极接地。这几个发光二极管就显示,对应在数码管上就显示数字2。用单片机来控制的话,可以对数码管ABCDEFG实现不同的电平切换,最终显示不同的数字,电路图如下:

共阴极的数码管显示电路

软件是硬件电路的心脏,能够调度所以的资源工作。本文将以以C语言为基础来编写程序达到控制数码管显示的目的。由于前几次都是在编程软件上写程序,拷贝到文章中,但发现效果不好,不容易理解。因此就在文中以简单通俗的语言进行程序的编写。应读者的要求,编写一个延时函数,是程序更为简单有效。

#include <reg51.h> //可以这么理解,这语句指的就是链接硬件和软件的桥梁

sbit leda=P0^0; //数码管中a的发光二极管连接单片机的P0^0管脚,用leda来代替P0^0

sbit ledb=P0^1; //数码管中b的发光二极管连接单片机的P0^1管脚,用ledb来代替P0^1

sbit ledc=P0^2; //数码管中c的发光二极管连接单片机的P0^2管脚,用ledc来代替P0^2

sbit ledd=P0^3; //数码管中d的发光二极管连接单片机的P0^3管脚,用ledd来代替P0^3

sbit lede=P0^4; //数码管中e的发光二极管连接单片机的P0^4管脚,用lede来代替P0^4

sbit ledf=P0^5; //数码管中f的发光二极管连接单片机的P0^5管脚,用ledf来代替P0^5

sbit ledg=P0^6; //数码管中g的发光二极管连接单片机的P0^6管脚,用ledg来代替P0^6

void delay( ); //延时函数的声明,所谓延时 就是等待,发呆

/********延时函数功能的实现****************************************

*******主要用于等待发呆,让LED灯闪烁的时间等待*************/

void delay( )

{

int ds=30000; //定义一个变量,用来控制延时时间。ds的值大小可以控制延时的时间

while(ds--); //循坏30000次发呆

}

/***下面进行主函数的编写*************************C语言程序最主要的就是主函数,

任何功能的实现都是在主函数里去实现,且是单片机程序的入口函数*********************/

void main( ) //主函数的定义

{

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0;//初始化LED灯,就是让数码管初始化,处于不亮的状态

while(1) //让程序一直循环,简称死循环

{

leda=1;ledb=1;ledc=1;ledd=1;lede=1;ledf=1;ledg=0; //显示数字0,让abcdef对应的LED亮,g对应的LED 不亮

delay( ); //调用延时函数,让数码管显示0保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

leda=0;ledb=1;ledc=1;ledd=0;lede=0;ledf=0;ledg=0; //显示数字1,让bc对应的LED亮,adefg对应的LED 不亮

delay( ); //调用延时函数,让数码管显示1保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

leda=1;ledb=1;ledc=0;ledd=1;lede=1;ledf=0;ledg=1; //显示数字2,让bc对应的LED亮,adefg对应的LED 不亮

delay( ); //调用延时函数,让数码管显示1保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

//其他数字的显示相信读者会了,可以尝试编写

} //while的结束

} //主函数的结束

结束语:此程序目前实现了0和1、2的轮流显示。可以尝试写显示其他的数字。下图是仿真效果图

数码管显示2的效果图

相关问答

单片机数码管显示 不全解决方法?

1、先更换同型号规格新电池试试。电量不足会引起数显数字不全。更换新电池不能解决问题,就是显示器故障了。2、显示器基本没有维修价值,建议到衡器门市更换新...

单片机 .速度来回答(43)在共阳极 数码管 使用中,若要仅 显示 ...

[最佳回答](45)C.模拟量到数字量的转换和采样/保持

c语言编程中,如何在51 单片机 8位 数码管 上滚动 显示 -HELLO--字符。比如?

P0=smgduan[i];delay(100);这两句是显示字母的语句,把它们加入对应的case语句里,就可以指定哪一段数码管显示啥字母,比如:case(2):LSA=0;LSB=1;LSC.....

在mc s51系列 单片机 应用系统中led 数码管显示 电路通常有什么显示方式?

在51系列单片机的应用系统中,LED数码管通常采用共阳扫描显示方式,选择单片机的一个8位IO口,作为数码管的段驱动,也就是a、b……dp段驱动,每段都需串联限流电...

关于 单片机 独立按键切换 数码管显示 不同数字?

都是逐个点亮,只不过流水灯间隔时间慢一点,数码管间隔时间快一点,当后者间隔时间小于0.1s时(实际上最好小于0.01s),由于视觉暂留效应,人类就觉察不到数码...

51 单片机 8个 数码管 初始 显示 “87654321”,然后用8个独立按键...

51单片机8个数码管初始显示“87654321”,然后用8个独立按键分别控制这8个数码管,每按一个键,相对应的数码管更换显示字符,要求8只按键按完后,数码管显示“nJnU...

关于51 单片机数码管显示 的问题。怎么样才能让第一个数码管显示2,第二个数码管显示0呢?

利用人眼的视觉暂留,先写第一个数码管的数字,再写第二个数码管,只要两个数码管动态显示快,人眼就可以看成同时显示。利用人眼的视觉暂留,先写第一个数码管的...

什么是 显示 缓冲区?

单片机中的显示缓冲区就是几个变量或者一个数组而已,用于保存需要显示出来的数据。程序将需要显示的数据计算出来后保存在这里面,然后当数码管扫描函数运行时...

如何将 数码管 与LCD同时接入 单片机 ,我想做一个999秒的倒计时,同时用LCD 显示 我的英文名字?

用个引脚比较多的单片机就可以了。比如STC89C52等等。数码管用扫描方式,LCD如果用1602就直接写,也不会占用单片机多少时间。用个引脚比较多的单片机就可以了...

利用总线结构,用51 单片机 结合373锁存器来完成 数码管 显示 程序怎么写(C语言版的)?

按你电路的意思也很简单,设一显示缓冲区,要显示内容的显示码放入缓冲区。设一3-5毫秒的定时中断,中断服务程序中用位选作为地址输出显示代码,输出地址被373...

猜你喜欢