数码管的静态显示

  • 一、数码管的显示原理
  • 二、74HC573锁存器工作原理
    • 2.1 原理图分析
    • 2.2 真值表
  • 三、74HC573锁存器在数码管中的应用
  • 四、实际静态数码管程序的设计

一、数码管的显示原理

数码管:是一种可以显示数字和其他信息的电子设备,可以看成是多个二极管的组成。

数码管有单位数码管、双位数码管、四位数码管,我们开发板上的数码管为2个四位数码管。

数码管显示原理:通过点亮内部的发光二极管来发光

引脚:又被称为管脚,从集成电路内部电路引出与外围电路的接线,所有的引脚构成了这块芯片的接口

单位数码管的引脚有10个,内部一共有8个小的发光二级管,还有2个引脚是公共端,其实只有一个公共端,但是生产厂家为了封装统一,把这2个引脚连接在了一起。

数码管根据其公共端所接的阳极和阴极的不同,分为了共阴极数码管和共阳极数码管。

共阳极接法:几个二极管的阳极接在一起,接到VCC(高电平),我们要想点亮,只要在在对应的二极管的阴极接上低电平即可。

共阴极接法:几个二极管的阴极接在一起,接到GND(低电平),我们要想点亮,只要在在对应的二极管的阳极接上高电平即可。

我们所用开发板上的是数码管是共阴极接法,如果要要显示数字1,我们只需让“b、c”得高电平,其余引脚给低电平即可,转换为16进制表示即为0x06,下面为共阴极数码码表:

16进制表示 显示的数字
0x3f 0
0x06 1
0x5b 2
0x4f 3
0x66 4
0x6d 5
0x7d 6
0x07 7
0x7f 8
0x6f 9
16进制表示 显示的字母
0x77 A
0x7c B
0x39 C
0x5e D
0x79 E
0x71 F
0x76 H
0x38 L
0x40 -
0x00 熄灭

STC89C52开发板上所用的是2个四位的数码管,在其内部公共端是独立的,独立的公共端可以用来控制哪一位数码管点亮,段线是连接在一起的,用来负责显示什么数字,我们常常把公共端叫做”位选线“,连接在一起的线叫做”段选线“。

位选:控制哪一个数码管亮
段选:控制数码管显示的内容
有了这两个线之后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字。

二、74HC573锁存器工作原理

2.1 原理图分析


OE:Output Enable 输出使能端
LE:Latch Enable 锁存器使能端
D0~D7:数据的输入引脚
Q0~Q7:数据的输出引脚
GND:地线接地端
VCC:供电电压

74HC573锁存器:是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。一个口可以控制两个LED灯,对第一个LED灯送数据,“打开”第一个锁存器,而“锁住”第二个锁存器,使得第二个LED上的数据不变。对第二个LED灯送数据时,“打开”第二个锁存器而“锁住”第一个锁存器,使得第一个LED灯上的数据不变。

从图中来看,简单来说就是用D引脚控制Q引脚,OE和LE影响D引脚控制Q引脚的结果。

2.2 真值表


L:低电平
H:高电平
D:数据输入端
Q:数据输出端
X:任意是任何状态:高电平或者低电平
Z:高阻态

74HC573有三种工作模式:

  1. 锁存模式:输出使能为L,锁存使能为L,此时Qx的输出被锁存,锁存的意思就是进入锁存状态之前是高就一直是高,进入锁存状态之前是是低就是低,这就是锁存器的作用。
  2. 跟随模式:输出使能为L,锁存使能为H,此时Qx的输出跟随Dx的输入变化而变化,此时可以认为锁存器是透明的。
  3. 跟随模式:输出使能为H,无论锁存使能为什么状态,Qx都为高组态,既不是高电平,也不是低电平。在这种状态下,可以多个芯片并联输出,但是只能有一个处于非高组态,否则会烧毁芯片,高组态会在后期的RS232、RS422中用到。

在实际应用中,我们往往是按照(1)OE端给上一个低电平,LE端给上一个高电平;(2)将数据从单片机的口线上输出到Dn;(3)此时给OE端一个低电平,LE端一个低电平;(4)此时我们所需要的数据就锁存在Qn上了,输入的数据再变化也不能影响到输出的数据了

三、74HC573锁存器在数码管中的应用

从图中我们可以看出,我们要驱动2片4位的数码管,也就是说驱动8位的数码管,我们采用2片的74HC573锁存器进行驱动,一片用来锁存位码,一片用来锁存段码。74HC573锁存器能够驱动几位数码管取决于使用了几片74HC573。

74HC573锁存器驱动8位数码管

  1. 图中我们所采取的数码管是共阴极的数码管,可以看出数码管的阳极,即a、b、c、d、e、f、g、h的引脚全部连接在一起,然后与左边的U9锁存器的数据输出端相连,U9的数据输入端连接单片机的P0口,在P0口同时加上上拉电阻。
  2. 图中每一个数码管对应一个位选端(WE1 WE2 WE3 WE4 WE5 WE6 WE7 WE8),与左边U8锁存器数据的数据输出端的低8位相连,U8的数据输入端也连接到单片机的P0口
  3. U9、U8锁存器的锁存端分别与单片机的P2.6、P2.7相连,利用单片机控制锁存器的锁存端,进而控制锁存器的数据输出,这种分时控制可以方便的控制任意数码管显示任意的数字
  4. 共阴极数码管在进行位选的时候,每一位(WE1 WE2 WE3 WE4 WE5 WE6 WE7 WE8)都是公共的阴极,只有输入低电平的时候才有可能被点亮,所以在进行位选的时候必须是低电平。
  5. 共阴极数码管在进行段选的时候,只有输入高电平,才能点亮数码管。
  6. 74HC573锁存器用于数码管显示的时候通常都是采用段选、位选共用同一组并口的驱动。
  7. 从图中我们不难发现,如果用单片机来控制数码管的显示,直接用I/O进行驱动数码管,至少需要16个引脚才能实现数码管的控制,但是利用了锁存器之后,只需要10个引脚就可以实现数码管的控制,如果数码管的数量持续增多,则对引脚的节省就更加突出。

四、实际静态数码管程序的设计

设计要求:我们假设需求是点亮第一个数码管,并让第一个数码管显示数字1,以下是我们实现的步骤:

  1. 点亮第一个数码管,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选
  2. 我们先给U8锁存器的锁存端一个高电平,然后将数据从单片机的P0口直接送出到锁存器U2的数据输出端,然后再关闭U2锁存端
  3. 由于数码管为共阴极数码管,所以位选选通时为低电平,位选关闭时为高电平,所以只有W1端对应的数据为低电平,其他位选位置为高电平,因此P0口要输出的数据为0xfe(二进制为1111 1110)
  4. 位选确定了以后,再确定段选。要显示数字1,就要给b、c段对应的数据一个高电平,其他段对应的数据一个低电平,然后接着用操作U2的方法给U1的数据输出端再送一个0x06(二进制为0000 0110)

程序代码:

#include <reg52.h> //52单片机头文件sbit WE = P2^7;  //位定义 WE为标识符 代表着位选 P2^7为地址符     申明U8锁存器的锁存端
sbit DU = P2^6;  //位定义 DU为标识符 代表着段选 P2^7为地址符   申明U9锁存器的锁存端int main()    //主函数
{WE = 1;    //打开U8锁存端P0 = 0xfe;    //送入位选信号 0xfe为16进制表示方法,转换为二进制为1111 1110,代表着第一个数码管被点亮WE = 0;  //关闭U8锁存端DU = 1;   //打开U9锁存端P0 = 0x06;    //送入段选信号 0x06为16进制表示方法,转换为二进制为1111 0110,代表着显示数字1WE = 0;  //关闭U9锁存端while(1);      //程序到这里停止
}

效果:

进阶显示1(联系前面所学的延时函数)
设计要求:让实验板子上的8个数码管同时点亮,依次显示数字0到F,循环下去

这里我们要引入编码定义的概念

uchar code table[] = {   //这里的uchar 为unsigned char的缩写 在使用时需要先定义
0x3f 0x06 0x5b 0x4f
0x66 0x6d 0x7d 0x07
0x7f 0x6f 0x77 0x7c
0x39 0x5e 0x79 0x71};

编码定义与C语言中数组定义的方法非常类似,不同的地方在于多了一个code,code即为编码的意思。

注意:单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间中的,使用编码的方式进行编译,占用的是程序空间,而不是内存空间,节省了资源
[]中的当前数字个数可以加也可以不加,C51编译器在编译时能够自动计算出来,通常来说,为了方便,不用去加

调用数组的方式:

P0 = table[4];

即将table这个数组中第5个元素直接赋给P0口,即

P0 = 0x6d;

注意:在使用数组的时候,table后面中括号的数字是从0开始的,对应后面大括号里的第1个元素。

程序代码:

#include <reg51.h> //51单片机头文件sbit WE = P2^7;      //位选信号的锁存器控制 位定义 WE为标识符 代表着位选 P2^7为地址符  申明U8锁存器的锁存端
sbit DU = P2^6;        //段选信号的锁存器控制 位定义 DU为标识符 代表着段选 P2^7为地址符  申明U9锁存器的锁存端#define uchar unsigned char  //宏定义(预处理指令,不是语句,后面不用加分号)其中直接用uchar替换了unsigned char 此时我们可以用uchar num等价于unsigned char num;
#define uint unsigned int     //宏定义(用法和上面类似)
uchar num;  //定义变量numuchar code table[] = {     //显示0~f的码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};void delay(uint z)  //延时函数
{unsigned int x,y;for(x = z;x>0;x--)for(y=144;y>0;y--);
}void main()       //主函数
{   while(1)   //进入大循环{for(num=0;num<19;num++)    //16个数循环显示{WE = 1;        //打开U8锁存器(U8为位选)P0 = 0x00;       //送入位选信号,选中8个数码管WE = 0;         //关闭U8锁存器delay(1000);   //调用延时函数DU = 1;        //打开U9锁存器(U9为段选)P0 = table[num]; //送入段选信号,调用数组中的值DU = 0;         //关闭U9锁存器}}
}

效果:(由于压缩成gif大小有限,只上传了开始和结尾的部分)

进阶显示2
设计要求:让实验板子上的数码管从第一位开始流动显示数字1

程序代码:

#include <reg51.h> //51单片机头文件sbit DU = P2^6;      //段选信号的锁存器控制    位定义 WE为标识符 代表着位选 P2^7为地址符   申明U8锁存器的锁存端
sbit WE = P2^7;        //位选信号的锁存器控制    位定义 DU为标识符 代表着段选 P2^7为地址符   申明U9锁存器的锁存端#define uchar unsigned char  //宏定义(预处理指令,不是语句,后面不用加分号)其中直接用uchar替换了unsigned char 此时我们可以用uchar num等价于unsigned char num;
#define uint unsigned int     //宏定义(用法和上面类似)unsigned char code table[]={  //数码管各位的码表
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};void delay(uint z)  //延时函数
{unsigned int x,y;for(x = z;x>0;x--)for(y=144;y>0;y--);
}
void main()
{uchar num;while(1){for(num=0;num<8;num++){   WE = 1;        //打开U8锁存器(U8为位选)P0=table[num];   //送入位选信号,调用数组WE = 0;         //关闭U8锁存器DU = 1;        //打开U9锁存器(U9为段选)P0=0x06;     //送入段选信号,显示数字1的代码DU = 0;        //关闭U9锁存器delay(200);    //调用延时函数}}
}

效果:

51单片机小白零基础教程——数码管的静态显示,以及数码管拓展程序(含74HC573锁存器的介绍)相关推荐

  1. 51单片机小白零基础教程——点亮第一个小灯以及流水灯(附原理图、代码详细讲解)

    点亮第一个小灯以及流水灯 一.LED灯电路图分析 (1)LED灯的描述 (2)LED灯在电路图中的分析 (3)主控电路分析 二.如何利用Keil uVision4创建一个程序 三.Stc-isp烧录软 ...

  2. vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程

    vue教程 提示:Vue3系列请参考Vue2+Vue3小白零基础教程-vue3篇文章,本文为vue2篇. 1. Vue核心 1.1 Vue简介 1.1.1 Vue是什么 一套用于构建用户界面的渐进式J ...

  3. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  4. 《网络安全》零基础教程-适合小白科普

    <网络安全>零基础教程 目录 目录 <网络安全>零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻 ...

  5. 保姆级的HTML零基础教程少见吧?这是第一节(1)

    作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者.15-16年曾在网上直播,带领一批程序小白走上程序员之路.欢迎各位小白加我咨询我相关信息,迷茫的你会找到 ...

  6. ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)

    ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...

  7. OpenMV零基础教程

    一.资料导航 "工欲善其事,必先利其器".在正式学习OpenMV之前,你必须知道一条或几条OpenMV的学习途径.这里推荐星瞳科技的中文官网教程,这个教程里面包括了OpenMV I ...

  8. **浅谈STM32系列单片机的零基础学习方法**

    浅谈STM32系列单片机的零基础学习方法 *很多朋友想必在零基础学习STM32F1这系列单片机时会感觉无从下手,或者不知道写程序时到底是用库函数好还是寄存器好.* 我个人认为一个零基础的朋友可以通过以 ...

  9. 单片机 | 51单片机实践【基础篇】

    [金善愚] 单片机应用实践--基础篇 笔记整理 课程视频 :https://space.bilibili.com/483942191/channel/collectiondetail?sid=1440 ...

  10. python中5种简单的数据类型,Python小白零基础入门 —— 变量及简单的数据类型

    微信公众号:「Python读财」 若有问题或建议,请公众号留言 最近想着出一个Python小白零基础入门系列的文章,但愿能对入门的小伙伴有所帮助,内容会囊括简单的数据类型.列表.字典.循环以及函数的定 ...

最新文章

  1. Cobbler部署指南之Cobbler安装操作系统篇
  2. Boost:双图bimap与range范围的测试程序
  3. Spark 连接 HBase 入库及查询操作
  4. 2012年最佳免费网站和移动应用 PSD 界面素材揭晓
  5. C# XXX.XmlSerializers”的程序集未能加载到..
  6. 算法:移除数组中的数字,不用额外空间27. Remove Element
  7. 制作u盘运行kali linux系统,U盘的进阶用法----打造U盘启动盘+USB KALI Linux+普通U盘。...
  8. 如何添加使用微信小程序,教程在这里,微信小程序怎样添加使用
  9. 【CF #807 Div2】A-D
  10. FireFox插件开发--弃用NPAPI
  11. 苹果手机有护眼模式吗_调节手机明暗度能起到护眼模式一样的效果?
  12. exchange 2016升级版本及最新安全补丁
  13. ICCV2021:Focal Frequency Loss for Image Reconstruction and Synthesis
  14. windows10删除EFI分区(绝对安全)
  15. matlab求异面直线的公垂线,求异面直线的公垂线
  16. CorelDRAW Graphics Suite2022免费图形设计软件
  17. 亚丁号云控之发布云控地址
  18. 计算机网络——各种计算
  19. 2022-2028中国聚合物增材制造设备市场现状研究分析与发展前景预测报告
  20. 2011Android技术面试整理附有详细答案(包括百度、新浪、中科软等多家公司笔试面试题)

热门文章

  1. TOYOTA MOTOR CORPORATION Programming Contest 2022(AtCoder Beginner Contest 270) AB题解
  2. [电动智能汽车-3]:原理 - 整车控制器VCU功能
  3. 【转】如何用中控系统建造震撼的家庭影院
  4. 最强大脑记忆曲线(7)——“复习页面”逻辑实现
  5. 光量子计算机技术突破,真正突破光刻机封锁的技术诞生了!可编程光量子计算芯片是什么?...
  6. java liveness_Kubernetes Liveness and Readiness Probes
  7. 数字通信之数字信号基带传输(九)
  8. 武汉理工计算机研究生就业去向统计,武汉理工大学《2019届毕业生就业质量报告》发布,本科生月薪7333...
  9. 梁宁:增长思维30讲脑图笔记
  10. 完整最新的f1比赛规则