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

系列文章目录

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



前言

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


一、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 <reg52.h>         //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);
	}
}

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值