51单片机——数码管

目录

[6. 数码管介绍](#6. 数码管介绍)

[6.1 一位数码管](#6.1 一位数码管)

[6.2 四位一体数码管](#6.2 四位一体数码管)

[6.2.1 74HC245](#6.2.1 74HC245)

[6.2.2 74HC138](#6.2.2 74HC138)

[6.2.3 共阴/阳极](#6.2.3 共阴/阳极)

[6.3 静态数码管实验](#6.3 静态数码管实验)

[6.4 动态数码管实验](#6.4 动态数码管实验)


6. 数码管介绍

数码管是一种简单、廉价的显示器,由多个发光二极管一起组成 " 8 " 字型的器件

数码管也称 LED数码管

按段数可分为七段 数码管、八段数码管(八段比七段多一个小数点(DP)发光二极管单元)

按发光二极管单元连接方式可分为共阳极 数码管、共阴极数码管

6.1 一位数码管
6.1.1 概述

下图是一位数码管:

工程实践中,一律以 "DP 对应段码最高位(bit7)、A 对应最低位(bit0)" 为标准约定,所有通用数码管段码表均基于此规则设计。

6.1.2 管脚说明

共阴极数码管(最常用)

结构 :所有 LED 的「阴极」连在一起作为公共端(COM),公共端接 GND(电源负极)。

工作原理:某一段 LED 的阳极(对应 a~g/DP 引脚)接高电平(VCC,如 5V)时,LED 导通点亮。

电路特征:公共端固定接 GND,段引脚由单片机 IO 口控制(输出高电平点亮对应段)。

共阳极数码管

结构 :所有 LED 的「阳极」连在一起作为公共端(COM),公共端接 VCC(电源正极)

工作原理:某一段 LED 的阴极(对应 a~g/DP 引脚)接低电平(GND)时,LED 导通点亮。

电路特征:公共端固定接 VCC,段引脚由单片机 IO 口控制(输出低电平点亮对应段)。

若采用共阴极连接,二极管要形成 6 ,则需以下方式:

(二极管加正向电压才能通电,所以正极接高电平,用" 1 "表示)

共阳连接则恰好相反:

6.2 四位一体数码管

下图是四位一体数码管:

6.2.1 74HC245

74HC245 是一种双向三态输出,八路双向收发器

主要应用:大屏显示;电路驱动

OE 使能管脚低电平,DIR 管脚高电平,传输方向:A --->B 输出;

OE 使能管脚低电平,OE 使能管脚低电平,传输方向:B --->A 输出;

OE 使能管脚高电平,输出是高阻态(不管OE 使能管脚是高/低电平)

至于输出是高电平还是低电平,这取决于输入端状态:

输入为低电平,输出就是低电平;输入为高电平,输出就是高电平

板载动态数码管模块一般共阴极连接(共阴极驱动能力强,灯较亮)

共阴极连接需要增加单片机 IO 口驱动电流,但单片机 IO 口难以输出稳定的、较大的电流

所以需要增强IO口电流输出------ 使用上拉电阻 / 专门的数码管驱动芯片

数码管驱动芯片有 74HC573、74HC245等,其输出电流较大,电路接口简单

简单的来说,74HC245缓冲器就是一个"信号放大器"------原本的信号较小,直接流向数码管驱动能力弱,经过芯片放大后,电流信号更大更稳定,用于提高缓冲能力

一般只让其在一个方向输出,即 DIR管脚 为高电平,传输方向 A -> B

6.2.2 74HC138

2个四位一体的数码管位选线有8根,但单片机IO资源有限

通常使用一种IO扩展芯片 ,如 74HC138,74HC164,74HC595

只需要用很少的单片机IO口就可扩展出8个控制口,通过级联方式甚至可以拓展更多IO口

74HC138 译码器芯片,只需要单片机3个IO口就可以实现8个位选管脚的控制,节省了单片机 IO 口资源

使用如下:

A2,A1,A0 输入相当于3位2进制数,A0是低位,A1是次高位,A2是最高位

Y0-Y7哪一个输出有效电平(低电平),就看输入二进制对应的十进制

比如输入 101 (A2,A1,A0),其对应的十进制是5,所以Y5输出有效电平(低电平),其他管脚输出高电平

6.2.3 共阴/阳极

共阳极数码管:其在应用时将公共极(COM)接到+5v,当某一字段发光二极管的阴极为低电平时相应字段就点亮;

共阴极数码管 :指将所有发光二极管的阴极接在一起形成公共阴极(COM)的数码管,其将公共极(阴极)接到地线 GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮;

不管是共阴还是共阳连接,发光二极管都必须是正极为高电平,阴极为低电平;

共阴极连接,位选为阴极,阴极接地,阳极为高电平,即段选为高电平即可点亮;

共阳极连接,位选为阳极,阴极为低电平,即段选为低电平即可点亮;

6.3 静态数码管实验

要求:LED8 显示数字 0

cpp 复制代码
#include <at89c51RC2.h>
//静态数码管显示 0

//
typedef unsigned char u8;

//数字图像:0-F;断码与数码管的对应关系:
//如,0x3f 转换为二进制:0011 1111(分别对应 dp,g,f,e,d,c,b(次低位),a(最低位))
u8 gsmg[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
			  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()
{
	while(1)
	{
		//共阴极接法:阴极接地,而8个段的阳极"独立",段引脚接高电平时,对应段点亮,低电平则熄灭
		P0 = gsmg[0];
		
		//若是共阳数码管,直接取反即可:P0 = ~gsmg[0];
	}
}
6.4 动态数码管实验

动态显示:利用减少段选线,分开位选线 ,即利用位选线不同时通断,改变段选数据实现

因为段选控制数码管显示的内容(数字),位选控制哪一个数码管点亮或熄灭

下图模块电路中,74HC138 连接数码管位选,74HC245 连接数码管段选

(图中,74HC138 输入端口为P24,P23,P22

此外,为了在显示下一个数码管的同时,上一个数码管内容不消失(实际上会消失

必须在人肉眼观察不到的时间里再次点亮上一个数码管(人的肉眼正常情况下只能分辨变化超过24ms 间隔的运动,也就是说点亮下一个数码管的时间差不能大于 24ms

这样才会形成动态效果

实验要求:数码管从左到右显示数字 0-7

cpp 复制代码
#include <at89c51RC2.h>
#include <intrins.h>
//动态数码管实验:从左至右点亮数字 0-7

typedef unsigned int u16;
typedef unsigned char u8;

/*不能直接使用 P2^4 = 1 这种语法操作单个 IO 位
单片机操作单个 IO 位的唯一正确方式是:
用 sbit 关键字显式定义"位变量",再通过位变量赋值
*/
sbit P24 = P2^4;
sbit P23 = P2^3;
sbit P22 = P2^2;

//数码管断码表(共阴数码管:0-7,低电平点亮)
u8 gsmg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
				
//延时函数
void Delay1ms(unsigned char ms)	//@11.0592MHz
{
	unsigned char data i, j;
	
	while(ms--)
	{
		_nop_();
		_nop_();
		_nop_();
		i = 11;
		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	u8 i = 0;
	while(1)
	{
		for(i=0;i<8;i++)
		{
			//位选,通过定义的位变量赋值。3个控制位组合出8种状态,对应8个数码管
			switch(i)
			{
				case 0:P24 = 1;P23 = 1;P22 = 1;break;//111;7;Y8
				case 1:P24 = 1;P23 = 1;P22 = 0;break;//110;6;Y7
				case 2:P24 = 1;P23 = 0;P22 = 1;break;//101;5;Y6
				case 3:P24 = 1;P23 = 0;P22 = 0;break;//100;4;Y5
				case 4:P24 = 0;P23 = 1;P22 = 1;break;//011;3;Y4
				case 5:P24 = 0;P23 = 1;P22 = 0;break;//010;2;Y3
				case 6:P24 = 0;P23 = 0;P22 = 1;break;//001;1;Y2
				case 7:P24 = 0;P23 = 0;P22 = 0;break;//000;0;Y1
			}
			//段选:输出对应数字的断码
			P0 = gsmg[i];
			//延时3ms(实参必须为整数,且不能太小):利用"人眼视觉暂留现象",实现"同时点亮效果"
			Delay1ms(3);
			//消影:清空段选,避免串影
			P0 = 0x00;
		}
	}
}
相关推荐
别掩3 小时前
三极管恒流电路
单片机·嵌入式硬件
花落已飘3 小时前
STM32 SDIO接口介绍
stm32·单片机·嵌入式硬件
DIY机器人工房4 小时前
嵌入式面试题:了解软件SPI和软件I2C吗?说一说。
stm32·单片机·嵌入式硬件
小尧嵌入式5 小时前
基于HAL库实现F407的基本外设GPIO输入输出USART收发RTC时钟I2CEEPROM和SPIW25Q128读写及CAN通信
arm开发·单片机·嵌入式硬件
shuidaoyuxing6 小时前
嵌入式系统系统讲解
单片机·嵌入式硬件
brave and determined7 小时前
可编程逻辑器件学习(day26):低主频FPGA为何能碾压高主频CPU?
人工智能·嵌入式硬件·深度学习·学习·fpga开发·云计算·fpga
三品吉他手会点灯7 小时前
stm32f103学习笔记-17-STM32 中断应用总结
笔记·stm32·单片机·嵌入式硬件·学习
搞机械的假程序猿7 小时前
普中51单片机学习笔记-ULN2003芯片驱动步进电机
笔记·学习·51单片机
the sun348 小时前
数电基础:移位寄存器、顺序脉冲、序列信号发生器
单片机·嵌入式硬件·fpga开发·数电