江协科技51单片机学习- p11 静态数码管显示

前言:

本文是根据哔哩哔哩网站上"江协科技51单片机"视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。

引用:

51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili

c51语言变量语句意思,C51中循环语句-CSDN博客

数码管显示:

【51单片机实验笔记】LED篇(三) 数码管的基本控制_51单片机数码管-CSDN博客

https://zhuanlan.zhihu.com/p/657909281

嵌入式硬件入门------74HC138译码器(三个IO实现8选1)-CSDN博客

正文:

0. 概述

在淘宝上购买了江协科技51单片机开发板套件(普中科技STC51单片机A2型号),就上在上一篇博文里说的自己计划学习下江协科技51单片机开发教程,通过STC51单片机这种MCU这种贴近于裸机的开发来增加对于系统硬件层面知识的了解和掌握。

1. LED数码管的显示原理

LED数码管的简介:数码管是一种简单,廉价的显示器,是由多个发光二极管封装在一起组成"8"字型的器件。

LED数码管的显示原理:

  • 共阴极LED数码管
  • 共阳极LED数码管

在如下截图里,共阴极/共阳极LED数码管的3和8号引脚都是地实际上是接在一起的。数码管的A,B,C,D,E,F,G,DP的和外部引脚是就近连接。

1位LED数码管的有8个外部引脚,

4位LED数码管的有12个外部引脚,8为引脚控制LED数码管显示的字符,4个引脚作为选择引脚控制哪个数码管显示。

2. 共阴极数码管驱动需要缓冲器(驱动器)

LED的连接方式 可以分为共阴极 数码管和共阳极数码管。

  • 共阴极 :将LED的阴极连在一起称为公共阴极COM
  • 共阳极 :将LED的阳极连在一起称为公共阳极COM

共阴极需要单片机 IO 给高电平,对应的段(LED)才能点亮,而单片机的 IO 引脚电流输出能力不足,往往需要借助驱动芯片(如74HC245芯片)才可以点亮数码管。而共阳极只需要单片机 IO 给低电平,单片机的灌电流大于拉电流,故共阳极数码管应用更加广泛。

注:由于每段都是由LED组成,故实际电路中应该串联限流电阻,一般接一个8P排阻。


段选和位选

数码管 中有段选位选两个概念,现阐释如下:

  • 段选:针对单个数码管而言。选择要点亮数码管中 a、b、c、d、e、f、g、dp 哪些段。一般通过给 IO 引脚赋值实现。
  • 位选:针对多位数码管而言。选择点亮哪个数码管。即控制COM端的高低电平。

仔细观察数码管的段选顺序,按 a、b、c、d、e、f、g、h 逆时针排列,依次对应字节的低位至高位。因此,我们可以给出共阴极数码管的字形码编码表。(有些字母不易表示,缺省)

字形码 dp g f e d c b a 十六进制
0 0011 1111 0x3f
1 0000 0110 0x06
2 0101 1011 0x5b
3 0100 1111 0x4f
4 0110 0110 0x66
5 0110 1101 0x6d
6 0111 1101 0x7d
7 0000 0111 0x07
8 0111 1111 0x7f
9 0110 1111 0x6f
A 0111 0111 0x77
b 0111 1100 0x7c
c 0101 1000 0x58
d 0101 1110 0x5e
E 0111 1001 0x79
F 0111 0001 0x71
G - -
H 0111 0110 0x76
I 0011 0000 0x30
J 0000 1110 0x0e
K - -
L 0011 1000 0x38
M - -
n 0101 0100 0x54
o 0101 1100 0x5c
p 0111 0011 0x73
q 0110 0111 0x67
r 0101 0000 0x50
s 0110 1101 0x6d
t - -
U 0011 1110 0x3e
v 0001 1100 0x1c
w - -
x - -
y 0110 1110 0x6e
z - -

如果是共阳极,其编码表刚好是共阴极的按位取反(~)。

其实可以看出,数码管对显示字母并不友好,一般用于显示数字,在电梯楼层显示,计算器显示应用广泛。

从上述一系列分析中我们得到,数码管相当于LED的堆叠,它对 IO 口资源的消耗是巨大的。如果要同时显示多个数字,除了采用芯片(如38译码器)来节约 IO 口,还可以采用不同的显示方式实现。数码管有两种驱动显示方式:静态显示和动态显示。

  • 静态显示:即每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。优点是编程简单,显示亮度高,缺点是占用I/O端口过多,这显然是致命的。
  • 动态显示:利用人眼暂留效应,分时轮流控制 COM端(位选),每个数码管的点亮时间为1ms~2ms,因为频率很快,仿佛所有数码管都是同时点亮的,这即是动态的含义。优点的节省大量IO口,功耗低,缺点是亮度不及静态显示方式,但可以通过降低限流电阻的阻值来提高亮度。

3. 驱动芯片

我们需要清楚一点,单片机 适合用于控制 ,它可以输入输出电平 ,但电流 是很小的。或许单片机 驱动单独一个LED 是足够的,但当LED 数量多起来时,它便无能为力了,更别提驱动大功率灯泡 或是电机了。

这些功率比较大的外设 往往需要外接电源 ,通过驱动芯片 来提供电流能量 ,单片机提供信号指令

使用138译码器和74HC245驱动器

  • 74HC245驱动器(缓冲器)
  • 74HC138译码器

3.1 74HC138译码器

使用74HC138译码器节省了单片机的IO口,使用单片机的3个IO口可以控制8个输出。

74HC138译码器,有A,B,C三个输入,Y0~Y78个输出,还有G1, ++G2A++ , ++G2B++ 三个控制引脚,当控制端如下电平配置G1=1,++G2A++ =0,++G2B++=0时,74HC138译码器使能输出。

|---------|---|
| G1 | 1 |
| ++G2A++ | 0 |
| ++G2B++ | 0 |

74HC138译码器芯片上 ++Y0++ , ++Y1++ , ++Y2++ , ++Y3++ , ++Y4++ , ++Y5++ , ++Y6++ , ++Y7++ , 引脚字符上面的横线表示低电平有效。 也就是说当 138译码器选中某个输出位的时候该引脚输出低电平,其它剩下的引脚输出高电平。

74HC138译码器真值表

嵌入式硬件入门------74HC138译码器(三个IO实现8选1)-CSDN博客

74HC138管脚定义及说明

管脚定义

管脚主要分为:输入(A0、A1和A2)、输出(Y0-Y7)、使能(E1-E3)、电源(VDD)和(GND)。

管脚说明

下表是74HC138所有管脚的功能说明

逻辑图

74HC138的逻辑图可以形象地展示其逻辑功能,只有当E1=0,E2=0,E3=1时,芯片才能被使能,不然芯片不会有任何有效输出。

74HC138真值表

真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。
H代表高电平,L代表低电平,X代表随机电平(可高可低)

3.2 74HC245驱动器

因为单片机的高电平驱动能力弱通过的电流能力弱,单片机的低电平驱动能力强通过的电流能力强。

主要用于提升单片机 IO 口的驱动电流。一般 IO 口的输出电流为20mA,这个电流大小仅仅点亮一颗LED是没有问题的,但对于驱动数码管、点阵等多负载模块就力不从心了。

74HC245芯片可以将输出电流提升至70-80mA左右,具有8路输入和8路输出,可输出低电平高电平高阻态三态。

  • 其中DIR引脚用于控制输入输出方向,高电平(A => B)、低电平(B => A)。
  • ++OE++ 为使能引脚低电平输出有效。

3.3 课程使用普中51开发板电路原理图分析

课程使用普中51开发板电路原理图分析,从电路原理图看到 LE 接74HC245 的 DIR 方向控制引脚,DIR=1 时74HC245双向缓冲器输出方向为从A=>B,DIR=0时输出方向为从B=>A。在电路原理图中 LE 接 J21 跳帽引脚,通过跳帽把LE接到VCC 则 DIR=1, 74HC245的输出方向为从A=>B,这也是我们本次实验开发板需要的配置。

4. 程序编写数码管显示

根据可能使用的普中科技STC51单片机A2开发板的电路原理图,可以看到 P2_2,P2_3,P2_4 接到74HC138译码器的 A, B, C 三个输入引脚,通过P2_2,P2_3,P2_4 输出值可以控制选中8个数码管的那一个管显示。

P2_2 = 1,P2_3 = 0, P2_4 =1

A,B,C = 101(2进制) = 0x5 (16进制)

74HC138译码器的A,B,C输入0x5,则译码器的 ++Y5++ 输出引脚输出低电平,其它引脚输出高电平。因为此开发板使用的是共阴极数码管,当数码管位选信号为低电平时数码管亮。

P0口输出控制数码管的显示段码值。

#include <REGX52.H>
#include <INTRINS.H>

void main()
{
	
	//ABC=0b101=0x5=选中Y5,连接LED6,从左往右数第3个数码管
	P2_2 = 1;
	P2_3 = 0;
	P2_4 = 1;
	
	//数码管段码
	P0 = 0x3f;
	
	while(1)
	{

	}
}
相关推荐
灰太狼不爱写代码27 分钟前
CUDA11.4版本的Pytorch下载
人工智能·pytorch·笔记·python·学习
Simp1e_a2 小时前
最大转矩电流比(MTPA)
科技·自动化·硬件工程·能源·制造
eybk6 小时前
Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
学习
6.946 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
守护者1707 小时前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
学会沉淀。8 小时前
Docker学习
java·开发语言·学习
Rinai_R8 小时前
计算机组成原理的学习笔记(7)-- 存储器·其二 容量扩展/多模块存储系统/外存/Cache/虚拟存储器
笔记·物联网·学习
吃着火锅x唱着歌8 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
ragnwang8 小时前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习