文章目录

  • 一、数码管介绍
    • 1.多位数码管简介
    • 2.数码管动态显示原理
  • 二、74HC245和74HC138芯片介绍
    • 1.74HC245 芯片简介
    • 2.74HC138 芯片简介
  • 三、硬件设计
  • 四、软件设计
  • 五、实验现象

  前面已经介绍了如何使用 51 单片机控制静态数码管显示,在实际应用中通常都需要显示多位数值,如果采用静态数码管显示就不够好,因此就需要采用另外一种显示方式,即数码管动态显示。开发板上板载 2 个四位一体的共阴数码管,下面介绍如何使用51单片机控制动态数码管显示。

一、数码管介绍

1.多位数码管简介

  多位数码管,即两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线(a-dp)全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。
  所使用的A4开发板上使用了 2 个四位一体的共阴数码管,这样可在上面同时显示 8个数值。

2.数码管动态显示原理

  多位数码管依然可以静态显示,但是显示时要么只显示一位数码管,要么多位同时显示相同内容。当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,送入所有数码管的段选信号都是相同的,所以它们显示的数字必定一样,数码管的这种显示方法叫做静态显示
  动态显示,就是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。比如在第一次选中第一位数码管时,给段选数据 0,下一次位选中第二位数码管时显示 1。为了在显示 1 的时候,0 不会消失(当然实际上是消失),必须在人肉眼观察不到的时间里再次点亮第一次点亮的 0。而这时就需要记住,人的肉眼正常情况下只能分辨变化超过 24ms 间隔的运动。也就是说,在下一次点亮 0 这个数字的时间差不得大于 24ms。这时就会发现,数码管点亮是在向右或者向左一位一位点亮,形成了动态效果。如果把间隔时间改长就能直接展现这一现象。

二、74HC245和74HC138芯片介绍

  通过前面内容的介绍我们知道,要使单片机能控制开发板上 2 位一体的共阴数码管显示,仅靠单片机 IO 口来驱动是不行的,这里就需要增加外部驱动芯片,开发板上使用的是 74HC245 芯片。2 个 4 位一体的共阴数码管的位选线有 8 根,直接让单片机 IO 口控制是没有任何问题的,但考虑到 51 单片机 IO 口资源的限制,通常我们会使用一种 IO 扩展芯片,比如: 74HC13874HC16474HC595 芯片等,只需要很少的单片机 IO 口就可以扩展出 8 个控制口,通过级联方式甚至可扩展出更多的控制口(这个在后面 LED 点阵实验章节中会有详细介绍)。我们开发板上使用的是 74HC138 译码器芯片,只需单片机 3 个 IO 口就可以实现 8 个位选管脚的控制,节省了芯片的 IO 资源。

1.74HC245 芯片简介

  74HC245 是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其它的消费类电子产品中增加驱动。

  • 主要特性

    • 采用 CMOS 工艺
    • 宽电压工作范围:3.0V-5.0V
    • 双向三态输出
    • 八线双向收发器
    • 封装形式:SOP20SOP20-2TSSOP20DIP20
  • 管脚功能定义



    从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单,给 OE使能管脚低电平,DIR 管脚为高电平传输方向是 A->B 输出,DIR 为低电平传输方向是 B->A,至于输出高电平还是输出低电平取决于输入端的状态,如果输入为低电平,输出即为低;输入为高电平,输出即为高。如果 OE 使能管脚为高电平,不论 DIR 管脚是高还是低,输出是高组态。

  通常我们使用 74HC245 芯片用作驱动只会让其在一个方向输出,即 DIR 管脚为高电平,传输方向是 A->B

2.74HC138 芯片简介

  74HC138D 是一种三通道输入、八通道输出译码器(38译码器),主要应用于消费类电子产品。

  • 主要特性

    • 采用 CMOS 工艺
    • 低功耗
    • 工作电压:3.0V-5.0V
    • 封装形式:SOP16
  • 管脚功能定义


    从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单,给E1E2 使能管脚低电平,E3 管脚为高电平,至于哪个管脚输出有效电平(低电平),要看 A0A1A2 输入管脚的电平状态。如果A0A1A2 都为低电平,则Y0 输出有效电平(低电平),其他管脚均输出高电平。如果 A0 为高电平,A1A2 都为低电平,则 Y1 输出有效电平(低电平),其他管脚均输出高电平。其他几种输出大家可以对照真值表查看。如果 E1E2 使能管脚任意一个为高电平或者 E3 为低电平,不论输入是什么,输出都为高电平。

  总结一个方法A0A1A2 输入就相当于 3 位 2 进制数,A0 是低位,A1 是次高位,A2 是高位。而 Y0-Y7 具体哪一个输出有效电平,就看输入二进制对应的十进制数值。比如输入是 101A2A1A0),其对应的十进制数是 5,所以 Y5 输出有效电平(低电平)

三、硬件设计

  本实验使用到硬件资源如下:

  • 动态数码管模块
  • 74HC138

  A4开发板上的动态数码管模块电路如下图所示:

数码管的段选数据由P0口控制

数码管的位选通过38译码器来进行控制,输入脚为P22P23P24来进行控制

上图电路使用的是 2 个四位一体的共阴数码管组成,即 8 位数码管的段选数据 a-dp 全部并联一起引出,每位数码管的位选即公共端引出。数码管的段选 a-dp连接在 74HC245 驱动芯片输出口,由 P0 端口控制。由P2.2P2.3P2.4 管脚控制 74HC138 译码器输入从而控制数码管位选。

四、软件设计

  所要实现的功能是:控制动态数码管从左至右显示数字 0-7。
  我们直接复制前面创建好的工程模板,将复制过来的模板文件夹重新命名为“7-动态数码管实验”。打开工程直接在 main.c 源文件内进行编程,main.c 内代码如下:

/*
实验名称:动态数码管实验
接线说明:
实验现象:下载程序后“数码管模块”显示 01234567
*/#include "reg52.h"//对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned int u16;//使用宏定义数码管段码口
#define SMG_A_DP_PORT P0
//定义数码管位选信号控制管脚
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;//使用数组保存共阴极数码管0-F的段码数据
u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
*/
void delay_10us(u16 ten_us)
{while (ten_us--);
}/*
函 数 名 : smg_display
函数功能 : 动态数码管显示
输入 : 无
输出 : 无
*/
void smg_display(void)
{u8 i = 0;for (i=0;i<8;i++){//位选switch (i){case 0 : LSC = 1;LSB = 1;LSA = 1;break;case 1 : LSC = 1;LSB = 1;LSA = 0;break;case 2 : LSC = 1;LSB = 0;LSA = 1;break;case 3 : LSC = 1;LSB = 0;LSA = 0;break;case 4 : LSC = 0;LSB = 1;LSA = 1;break;case 5 : LSC = 0;LSB = 1;LSA = 0;break;case 6 : LSC = 0;LSB = 0;LSA = 1;break;case 7 : LSC = 0;LSB = 0;LSA = 0;break;}//给当前位传送段选数据SMG_A_DP_PORT = gsmg_code[i];delay_10us(100);  //延时1ms,循环一轮8ms,小于肉眼可区分的24msSMG_A_DP_PORT =0x00; //消音,消除上一次数码管段选数据对下一次的影响}
}void main()
{   while (1){      smg_display();}
}

至此,整个程序就编写完成,我们编译一下,如下图所示:

可以看到没有错误,也没有警告。
  该函数是根据动态数码管显示原理所编写,即选中所要显示的那位数码管,然后发送在该位数码管上所要显示的段码数据,延时一定时间后在将段选口清零即消隐(消除之前的显示),如此循环 8 次即可实现 8 位数码管显示。在动态显示中,要注意延时时间,只要保证在人肉眼所能感觉时间之内即可,让我们看到所要显示的内容就像是同时显示一样。如果时间过长或者过短都可能会影响数码管的显示效果。

五、实验现象

  使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),把编译后产生的.hex 文件烧入到芯片内,实现现象如下:动态数码管显示01234567。

51单片机 | 动态数码管实验相关推荐

  1. 51单片机——动态数码管实验,小白讲解,相互学习

    多位数码管介绍: 多位数码管,即两个或两个以上单个数码管并列集中在一起形成一体的数码管.当多位一体时,他们内部的公共端是独立的,二负责显示什么数字的段线(a-dp)全部是连接在一起的,独立的公共端可以 ...

  2. 51单片机动态数码管显示自己学号

    实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...

  3. 51单片机动态数码管显示时间+protues仿真

    项目场景: 纯小白 第一次写文章 写的不好请见谅 做51单片机数码管显示时间实验的时候protues 仿真出现了问题 问题描述 做51单片机数码管显示时间实验的时候protues 仿真出现了问题 仿真 ...

  4. 51单片机 动态数码管显示

    本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...

  5. 3.6 51单片机-动态数码管

    3.6 动态数码管 3.6.1 数码管原理图 图3-6-1 图3-6-2 注意:使用排线连接时,排线有金属触点的一片必须朝右

  6. 51单片机动态数码管显示

    1.数码管介绍 LED数码管:数码管是一种简单.廉价的显示器,是由多个发光二极管封装在一起组成"8"字型的器件 2.位选 选第几位显示,G1,G2A,G2B为使能端,有效就工作.图 ...

  7. 51单片机八位数码管1到F动态滚动显示仿真及程序

    51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...

  8. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  9. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

最新文章

  1. 【转载】全面理解javascript的caller,callee,call,apply概念(修改版)
  2. transformers、pytorch-transformers、pytorch-pretrained-bert的关系
  3. python之父叫什么-Python之父:为什么操作符很有用?
  4. atlas mysql 数据库同步_atlas+mysql实现主从复制和读写分离(二)
  5. 如何激发孩子的想象力_如何激发孩子的想象力?这4个方面要了解,让孩子快乐成长...
  6. 04_Java面向对象特征之继承与多态
  7. Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能
  8. 华北科技学院计算机期末考试,华北科技学院 专业计算机 考试专用
  9. 思想篇(1)--企业需要什么样的人才?
  10. gimp中文版教程_GIMP中详细教程.pdf
  11. 使用 Adobe Acrobat 裁剪 PDF 白边及其他操作
  12. 自旋锁学习系列(2):TAS锁
  13. 宏转录组研究成果荣登10分JHM
  14. RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍
  15. grad-cam原理
  16. 关于数据治理的读书笔记 - 什么是数据治理?
  17. Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)
  18. X特效 html+css+js
  19. 【20保研】北京大学信息工程学院关于举办 “2019年全国优秀大学生夏令营”的通知...
  20. mesh 协调器 路由器_双模网络协调器、双模路由器和双模mesh组网系统的制作方法...

热门文章

  1. 一步一步做项目(8)用例描述管理通知公告(ManagePublicNotice)
  2. 互联网+医疗(FW)
  3. 论文:多智能体编队控制综述
  4. 写在新书《Swift开发手册:技巧与实战》出版之际
  5. 2018 年了,你还是只会 npm install 吗?
  6. 达梦数据库用户权限管理
  7. 通过一个小项目介绍Python3读写Access数据库(.mdb)的方法
  8. css meta自适应,自适应网页
  9. 二、更换Abp Vnext默认的UI 布局
  10. 2018.7.8随想