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

news2025/1/12 15:45:42

多位数码管介绍:

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

         一般一位数码管有 10 个引脚, 二位数码管也是 10 个引脚, 四位数码管是 12 个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办 法就是用数字万用表测量,若没有数字万用表也可用 5V 直流电源串接 1k 电阻后 测量,将测量结果记录,通过统计便可绘制出引脚标号。多位数码管有许多是按 一定要求设计的,引脚不完全按照一般规则设定,所以需要在使用时查找手册,最直接的办法就是按照数码管上的标示向生产商要求。 

数码管显示原理:

        多位数码管依然可以静态显示,但是显示时要么只显示一位数码管,要么多 位同时显示相同内容。当多位数码管应用于某一系统时,它们的“位选”是可独 立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码 管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因 为它们的段选是连接在一起的,送入所有数码管的段选信号都是相同的,所以它 们显示的数字必定一样,数码管的这种显示方法叫做静态显示。
        而动态显示,就是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。比如在第一次选中第一位数码管时,给段选数据 0,下一次位选中第二位数码管时显示 1。为了在显示 1 的时候,0 不会消失(当然实际上是消失了),必须在人肉眼观察不到的时间里再次点亮第一次点亮的 0。而这时就需要记住,人的肉眼正常情况下只能分辨变化超过 24ms 间隔的运动。也就是说,在下一次点亮 0 这个数字的时间差不得大于 24ms。这时就会发现,数码管点亮是在向右或者向左一位一位点亮,形成了动态效果。如果把间隔时间改长就能直接展现这一现象。
74HC245 74HC138 芯片介绍:
        通过前面内容的介绍我们知道,要使单片机能控制开发板上 2 位一体的共阴 数码管显示,仅靠单片机 IO 口来驱动是不行的,这里就需要增加外部驱动芯片, 开发板上使用的是 74HC245 芯片。2 个 4 位一体的共阴数码管的位选线有 8 根, 直接让单片机 IO 口控制是没有任何问题的,但考虑到 51 单片机 IO 口资源的限制,通常我们会使用一种 IO 扩展芯片,比如74HC138,74HC164,74HC595 芯片 等,只需要很少的单片机 IO 口就可以扩展出 8 个控制口,通过级联式甚至可 扩展出更多的控制口(这个在后面 LED 点阵实验章节中会有详细介绍)。我们开 发板上使用的是 74HC138 译码器芯片,只需单片机 3 个 IO 口就可以实现 8 个位 选管脚的控制,节省了芯片的 IO 资源。
74HC245 芯片这里简单简介:详细看芯片中文资料
        74HC245 是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其 它的消费类电子产品中增加驱动
        
1)主要特性:
   ①采用CMOS工艺
   ②宽电压工作范围:3.0V-5.0V
   ③双向三态输出
   ④八线双向收发器
   ⑤封装形式:SOP20、SOP20-2、TSSOP20、DIP20
2)管脚功能定义
        从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单,给 OE 使能管脚低电平,DIR 管脚为高电平传输方向是 A->B 输出,DIR 为低电平传输方 向是 B->A,至于输出高电平还是输出低电平取决于输入端的状态,如果输入为 低电平,输出即为低;输入为高电平,输出即为高。如果 OE 使能管脚为高电平, 不论 DIR 管脚是高还是低,输出是高组态。

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

74HC138 芯片简单简介:详细看芯片中文资料

        74HC138D 是一种三通道输入、八通道输出译码器,主要应用于消费类电子产 品。
1)主要特性
        ①采用 CMOS 工艺
        ②低功耗
        ③工作电压:3.0V-5.0V
        ④封装形式:SOP16

备注:L低电平   H高电平

        从上面的管脚功能定义说明及真值表可以知道该芯片使用方法很简单,给 E1、E2 使能管脚低电平,E3 管脚为高电平,至于哪个管脚输出有效电平(低电 平),要看 A0,A1,A2 输入管脚的电平状态。如果 A0,A1,A2 都为低电平,则 Y0 输出有效电平(低电平),其他管脚均输出高电平。如果 A0 为高电平,A1, A2 都为低电平,则 Y1 输出有效电平(低电平),其他管脚均输出高电平。其他几种输出大家可以对照真值表查看。如果 E1、E2 使能管脚任意一个为高电平或 者 E3 为低电平,不论输入是什么,输出都为高电平。
        这里给大家总结一个方法:A0、A1、A2 输入就相当于 3 位 2 进制数,A0 是 低位,A1 是次高位,A2 是高位。而 Y0-Y7 具体哪一个输出有效电平,就看输入 二进制对应的十进制数值。比如输入是 101( A2,A1,A0),其对应的十进制数 是 5,所以 Y5 输出有效电平(低电平)
硬件设计:
本实验使用到硬件资源如下:
(1)动态数码管模块
(2)74HC138
开发板上的动态数码管模块电路如下图所示:
        上图电路使用的是 2 个四位一体的共阴数码管组成,即 8 位数码管的段选数 据 a-dp 全部并联一起引出,每位数码管的位选即公共端引出。数码管的段选 a-dp 连接在 74HC245 驱动芯片输出口,由 P0 端口控制。由 P2.2、P2.3、P2.4 管脚控 制 74HC138 译码器输入从而控制数码管位选。

 软件设计

/**********************************************************************************
****
实验名称:动态数码管实验
接线说明:
实验现象:下载程序后“数码管模块”显示 01234567
注意事项:
***********************************************************************************
****/
#include "reg52.h"
typedef unsigned int u16;//对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//定义38译码器输入管脚,也是数码管位选信号控制脚
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)//位选数据,i循环次数
        {
            //当i=0时候就进入这个case 0语句, LSC=1;LSB=1;LSA=1 就是111,换算十进制就是7,
            //就是Y7端输出是有效的,所以LED8数码管点亮
            case 0: LSC=1;LSB=1;LSA=1;break; 
            //当i=0时候就进入这个case 0语句, LSC=1;LSB=1;LSA=0 就是110,换算十进制就是6,
            //就是Y6端输出是有效的,所以LED7数码管点亮,后面都是一样的原理
            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);//延时一段时间,等待显示稳定
        SMG_A_DP_PORT=0x00;//消隐,是为了消除上个数码管数据对下个数码管数据的影响
    }
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
    while(1)
    {
        smg_display();
    }
}
        main.c 文件内代码非常少也很简单,首先将 51 单片机的头文件包含进来, 然后定义 38 译码器的控制引脚,并将共阴数码管 0-F 段码数据使用数组定义好。 主函数功能也很简单,直接进入 while 循环,在循环体内执行 smg_display()数 码管动态显示函数。该函数是根据动态数码管显示原理所编写,即选中所要显示 的那位数码管,然后发送在该位数码管上所要显示的段码数据,延时一定时间后 在将段选口清零即消隐(消除之前的显示),如此循环 8 次即可实现 8 位数码管 显示。在动态显示中,要注意延时时间,只要保证在人肉眼所能感觉时间之内即 可,让我们看到所要显示的内容就像是同时显示一样。如果时间过长或者过短都 可能会影响数码管的显示效果,大家可以在例程基础上试着修改延时时间观察效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国水文地质图集

概述 水文地质图集部分来源于 《中华人民共和国水文地质图集》(地质出版社1979年版)的GIS数字化版(数据格式:JPEG),图集是由全国性、地区性和分省/自治区/直辖市等三类图幅组成,共68幅图(实际收集到55幅图)。 主要内容包括:水文地质图、地下热水分布图、水化学图、…

数据结构C语言版 —— 栈的实现

文章目录栈1. 基本概念2. 栈的实现1) 初始化栈2) 栈的扩容3) 判断栈是否为空4) 入栈5) 出栈6) 获取栈顶元素7) 获取栈中元素个数8) 销毁栈栈 1. 基本概念 栈(Stack)&#xff1a;一种特殊的线性表&#xff0c;其只限定于在表尾进行插入或者删除操作。进行数据插入和删除操作的…

RocketMq02_复制刷盘、Broker常用模式、磁盘阵列、集群搭建

文章目录①. 单机版本安装与启动②. 控制台的安装与启动③. 复制刷盘、Broker集群模式④. 磁盘阵列 - RAID⑤.JBOD、RAID0⑥. RAID1、RAID10、01⑦. 搭建集群 - 异步两主两从①. 单机版本安装与启动 ①. 系统要求是64位的,JDK要求是1.8及其以上版本的 ②. 将下载的安装包上传到…

NFT及智能合约开发

文章目录1.Web3.01.1 GameFi1.2 DeFi1.3 dApp2.NFT2.1 NFT Applications2.2 NFT Earning2.3 NFT结构2.3 IPFS2.4 Wallet3.Smart Contract3.1 Smart Contract System3.2 Smart Contract Development3.2.1 Language3.2.2 IDE3.2.3 BlockChain3.2.4 FrontEnd3.2.5 NFT Test WebSit…

《Mysql是怎样运行的》

客户端查询mysql版本&#xff1a;select version(); 1 第1章 装作自己是个小白-重新认识MySQL 1.1 MySQL的客户端&#xff0f;服务器架构每个进程都有一个唯一的编号&#xff0c;称为 进程ID &#xff0c;英文名叫 PID &#xff0c;这个编号是在我们启动程序的时候由操作系统随…

IDEA运行SpringBoot项目常见问题【统一答疑】

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

PRISEMI芯导科技推出PDG7115直驱型E-Mode氮化镓功率IC

PRISEMI芯导科技推出PDG7115直驱型E-Mode氮化镓功率IC 氮化镓以开关速度快&#xff0c;导阻低&#xff0c;低输入输出电荷的优势&#xff0c;应用在快充上逐渐取代了传统的高压硅MOS管。使用氮化镓取代硅MOS管&#xff0c;不仅降低了开关损耗&#xff0c;提高充电器的转换效率…

SpringBoot RabbitMq 六大模式

目录 依赖、配置 简单队列 模型 代码示例 工作队列 模型 代码示例 订阅模式 模型 代码示例 路由模式 模型 代码示例 主题模式 模型 代码示例 RPC 依赖、配置 依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId&g…

三分查找算法

目录 一 算法简介 详细介绍 两种基本方法 二 算法实践 1&#xff09;实数三分 拓展&#xff1a;秦九韶算法计算多项式 方法1&#xff1a;直接模拟累加 方法二&#xff1a;根据秦九韶算法 1&#xff09;模板三分法 题目描述 解法 2&#xff09;三分求极值 题目描述 …

3D激光里程计其四:点云线面特征提取

3D激光里程计其四&#xff1a;点云线面特征提取1. 点云线面特征提取1.1 按线数分割1.2 计算曲率1.3 按曲率大小筛选特征点2. 基于线面特征的位姿变化2.1 帧间关联2.1.1 点云位姿转换2.1.2 线特征关联2.1.3 面特征关联2.2 残差函数2.2.1 线特征2.2.2 面特征2.3 位姿优化2.3.1 线…

数据结构——二叉树2.0

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;数据结构——二叉树 &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;上期讲了…

尚医通-医院接口设置(七)

&#xff08;1&#xff09;后台系统-医院设置接口-需求和准备 &#xff08;2&#xff09;后台系统-医院设置接口-创建基础类 &#xff08;3&#xff09;医院设置接口-查询和逻辑删除 &#xff08;4&#xff09;医院的设置接口-统一返回结果定义 &#xff08;5&#xff09;医…

[附源码]Python计算机毕业设计Django校园代取快递系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

知到/智慧树——大学生心理健康(华东政法大学)参考答案

目录 注&#xff1a;有些图片上传异常&#xff0c;请以参考答案为准&#xff0c;不要以蓝色选项为全部答案。 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第六章测试 第七章测试 第八章测试 第九章测试 第十章测试 第十一章测试 第十二章测试 第一章…

传统技术如何阻碍零信任以及如何应对

随着组织采用零信任安全模型&#xff0c;传统技术制造了一些障碍。事实上&#xff0c;根据最近的一项研究&#xff0c;更换或重建现有的遗留基础设施是实施零信任的最大挑战。 通用动力公司的 2022 年零信任研究报告对美国联邦、民事和国防机构的 300 名 IT 和项目经理进行了调…

计算机毕设Python+Vue兴澜幼儿园管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

重定向和缓冲区

文章目录一个奇怪的现象缓冲区详解如何理解缓冲区缓冲区是谁给我提供的&#xff1f;缓冲区的源码体现案例&#xff1a;模拟实现FILE结构体第二个奇怪的现象重定向命令行上使用重定向操作dup2系统调用接口stdout和stderror一个奇怪的现象 首先&#xff0c;我们来看这样一段代码…

毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计服务器模块设计客户端模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java 设计项目: 基于Java聊天室系统的设计与实现 一、项目设计 1. 模块设计 服务器模块设计 服务端的功能主要如下&#xff1a; 一&#xf…

R语言绘制森林图

在绘制森林图之前当然需要先下载RStudio软件啦&#xff0c;在下载后需要安装对应的rtool,最后将两者关联起来才能使用其中对应的包&#xff0c;否则只安装了软件很多功能不能使用而且还会报错&#xff0c;这篇文章主要是总结怎么使用forestploter包绘制森林图&#xff0c;本来是…

【Linux修炼手册:基本指令(完结)】

Life is about waiting for the right moment to act. 目录 1 zip/unzip指令 2 tar指令&#xff08;重要&#xff09;&#xff1a;打包/解包&#xff0c;不打开它&#xff0c;直接看内容 3 bc指令 4 uname –r指令 5 重要的几个热键[Tab],[ctrl]-c, [ctrl]-d 6 shutdown 7…