硬件电路学习系列(三)-----数码管驱动电路设计

分类: 手机365体育网站经常打不开 发布时间: 2025-07-11 19:00:48 作者: admin 阅读: 5946

系列文章目录

硬件电路学习系列(一)-----电源滤波整流电路设计 硬件电路学习系列(二)-----常用电子元件 硬件电路学习系列(三)-----数码管驱动电路设计

文章目录

系列文章目录前言一、LED驱动二、数码管驱动1.数码管显示原理2.数码管驱动3.数码管动态显示

总结

前言

这一章节我们来学习一下数码管显示电路,数码管驱动的硬件电路比较简单,上手很容易。

一、LED驱动

我们学习数码管驱动电路前,我们要知道,数码管内部就是由LED灯珠构成,所以我们要先来了解一下Led是怎么驱动的。

Led灯,即发光二极管,当阳极电压超过阴极电压0.7V(硅管,锗管为0.3V)时,二极管导通,发光二极管会点亮,我们可以通过二极管两个电压差就可以点亮该二极管,但是发光二极管的亮度是由流经该二极管的电流决定的,电压决定了是否导通,电流决定了其亮度。

所以我们在驱动LED的时候我们要考虑好输入电流的大小,像使用单片机时,为保证其正常工作,一般IO口的电流不超过1mA,而LED正常工作时的电流一般为10-20mA,故需要外部驱动电路。

LED驱动电路 驱动LED的方法有很多,可以直接用三极管驱动,也可以用达林顿管或者驱动芯片来驱动,这里我直接用三极管来进行驱动。 电路中各个元件的作用: 电阻R1:主要起限流作用。 电阻R2:下拉电阻,保证上电后为电路状态为低电平状态。 电阻R3:主要起限流作用,限制流经LED的电流。 电容C15:主要起滤波作用。 二极管D1:该二极管为TVS瞬态二极管,当电压超过所需电压时起保护作用。

二、数码管驱动

1.数码管显示原理

简单来说,数码管其实就是由几个二极管构成,从照片可以看出来数码管由8个发光二极管组成,其实就相当于一次性驱动八个发光二极管。 根据公共端的接法,我们可以将数码管分为共阴极数码管和共阳极数码管 共阴极主要是八个发光二极管阴极同时接地,共阳极是八个二极管阳极全都接在电源上,我们在使用发光二极管时要注意好该二极管是共阴极还是共阳极。 对于多位一体的数码管,他们的数字段都是连接在一起的,但是他们的公共端是独立的,我们通过控制公共端来控制显示的数码管,我们称该公共端为位选线。

数码管中,每个LED灯对应一个横段,我们可以通过同时点亮几个LED灯来组成我们想要的数值,比如同时亮bc段显示数字1,同时亮abdeg显示数字2,以此类推,我们就可以得到数字0到9了

2.数码管驱动

上面介绍了一下数码管的工作原理,其实涉及到的东西很简单,利用多段二极管同时点亮来显示我们想要的数值,数码管的驱动其实和LED驱动差不多,不过由于数码管内部涉及到的发光二极管比较多,如果单纯用三极管和电阻来搭建驱动电路的话使用到的元件比较多,我们这里直接使用达林顿管来驱动数码管。

我们这里使用89c52通过达林顿管驱动四位一体数码管,原理图(随手画的)如下

3.数码管动态显示

数码管的动态显示又叫做数码管的动态扫描显示,静态显示其实就是几个数码管都是一样的,太简单了,直接按照上面给的数值表就可以了,我们这里主要讲动态显示。

动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼已经无法分辨出来。

程序代码如下:

#include //52系列单片机头文件

unsigned char table[]={

0x3f, //00111111->0x3f 0

0x06, //00000110->0x03 1

0x5b, //01011011->0x5b 2

0x4f, //01001111->0x4f 3

0x66, //01100110->0x66 4

0x6d, //01101101->0x6d 5

0x7d, //01111101->0x7d 6

0x07, //00000111->0x07 7

0x7f, //01111111->0x7f 8

0x6f, //01101111->0x6f 9

};

void delay_ms(unigned int x)

{

unsigned char i, j;

while(x--)

{

i = 2;

j = 199;

do

{

while (--j);

} while (--i);

}

}

void display(unsigned char Choose,unsigned char ShowNumber)

{

switch(Choose)

{

case 1:P2_0=1;P2_1=1;P2_2=1;P2_3=1; break;

case 2:P2_0=0;P2_1=1;P2_2=1;P2_3=1; break;

case 3:P2_0=0;P2_1=0;P2_2=1;P2_3=1; break;

case 4:P2_0=0;P2_1=0;P2_2=0;P2_3=1; break;

case 5:P2_0=0;P2_1=0;P2_2=1;P2_3=0; break;

case 6:P2_0=0;P2_1=1;P2_2=0;P2_3=0; break;

case 7:P2_0=1;P2_1=0;P2_2=0;P2_3=0; break;

case 8:P2_0=0;P2_1=0;P2_2=0;P2_3=0; break;

}

P0=table[ShowNumer];

delay_ms(2);

P0=0x00;

}

void main(){

while(1)

{

display(1,4);

display(2,3);

display(3,2);

display(4,1);

}

}

总结

这一章主要学了一下数码管驱动的知识,比较简单