【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)

前言

大家好吖,欢迎来到 YY 滴单片机 系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《STM32》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

目录

  • 一.前置操作
    • 1.LED数码管介绍
    • 2.位选的基本概念
    • 3. 1位数码管的引脚(10个)定义(应用【位选】概念)
    • 4. 4位1体数码管的引脚(12个)定义
    • 5.138译码器
      • (5.1)138译码器的作用
      • (5.2)138译码器的使能端
      • (5.3)138译码器的输出端
      • (5.4)138译码器的输入端
    • 6.74HC245芯片(双向数据缓冲器)
      • (6.1)74HC245芯片的作用
      • (6.2)74HC245芯片的使能端【OE(LE)引脚】
      • (6.2)74HC245芯片的方向选择端【DIR引脚】
        • (6.2.1)[J21跳线帽]
        • (6.2.2) 数码管模块为什么要加上74HC245芯片?
    • 7.104电容
    • 8. 4位1体排阻部分(限流电阻)
  • 二.基本的静态数码管显示
    • 1.总结步骤:怎么样让某盏灯显示数字
    • 2.根据原理图,确定LED第几个亮的位选(注意:数据端位对应端口端位,即高位对高位)
    • 3.根据原理图,确定LED数字的段选(注意:数据端位对应端口端位,即高位对高位)
    • 4.代码演示
  • 三.自定义的静态数码管显示(代码演示)
  • 四.自定义的动态数码管显示
    • 1.视觉暂留原理
    • 2.消影问题
    • 2.利用自定义延时函数封装(代码演示)

一.前置操作

1.LED数码管介绍

  • 在这里插入图片描述

2.位选的基本概念

  • 在单片机中,位选通常指的是 选择特定的寄存器位或者特定的位操作 。单片机中的寄存器通常是一个二进制数,每一位都代表一个特定的状态或者功能。当进行位选时,我们通常是指通过编程来选择特定的寄存器位,或者对特定的寄存器位进行操作, 比如置位(设置为1)或者清零(设置为0) 。这种操作可以用来控制单片机的各种功能,比如控制输入输出、控制器件的工作状态等。

3. 1位数码管的引脚(10个)定义(应用【位选】概念)

  • 1位数码管
  • 两种连接方式: 共阴极链接,共阳极链接
  • 【3,8引脚】事实上是同一个引脚,引出来两根 ,可以接正也可以接负
  • 数码管的链接实际上符合: 就近原则
    在这里插入图片描述
  • 例:我们要展示数字6,用共阴极的LED:
  1. 位选3,8译码器为0或者低电平
  2. 对应设置A,B,C,D,E,F,G,DP的L口(即7 6 4 2 1 9 10 5)
  3. 如图所示1011 1110 就是这个LED的段码在这里插入图片描述

4. 4位1体数码管的引脚(12个)定义

  • 4位1体数码管
  • 分成4个小的单元,各自小的单元的公共端各自独立(图中12,9,8,6引脚)
  • 剩余位选端为(10 7 4 2 1 10 5 3)
    在这里插入图片描述
  • 例:我们要展示第三个LED的数字1,用共阴极的LED:
  1. 位选8为0或者低电平,【12,9,6】为1
  2. 对应设置A,B,C,D,E,F,G,DP的L口(即11 7 4 2 1 19 5 3)
  3. 如图所示1001 1111 就是这个LED的段码
    在这里插入图片描述

5.138译码器

(5.1)138译码器的作用

  • 138译码器可以用于 选择某个特定的输出端
  • 通常被用于将输入的二进制数据转换成对应的输出信号。它通常有三个输入端和八个输出端。输入端通常是三位二进制数据,而输出端则对应着八种可能的组合。138译码器的作用是将特定的输入编码转换成相应的输出信号,从而实现特定的逻辑功能或控制。

(5.2)138译码器的使能端

  • 使能端:“使能端”是指在数字电路或者数字系统中用来 启用或者禁用某种功能或操作的输入端口 。当使能端为有效状态 时,相应的功能或操作会被激活或者允许执行;而当使能端为无效状态时,相应的功能或操作会被禁用或者停止执行。、
  • 如下图所示,138译码器中的使能端
  • 必须6号引脚接1 ; 4号五号引脚接0,元器件才能工作
  • 实际中并不需要管它,因为其上电就工作
    在这里插入图片描述

(5.3)138译码器的输出端

  • 我们观察输出端的Y0~Y7
  • 上方有横线,代表低电平有效 —— 即此时LED亮,位选为0;

在这里插入图片描述

  • 我们查看开发板图,发现: LED1~8接到的是138译码器的输出端
    在这里插入图片描述

在这里插入图片描述

(5.4)138译码器的输入端

  • 输入端C->B->A,从左到右: 高位到低位,表示一个二进制数
  • 这个2进制是n,就代表Yn有效
  • 有效: 上方有横线,代表低电平有效 —— 即此时LED亮,位选为0;
  • 如果CBA为000,就代表Y0有效,Y0为0
  • 接着再找Yn对应的LED
    在这里插入图片描述

6.74HC245芯片(双向数据缓冲器)

(6.1)74HC245芯片的作用

  • 它的作用是允许数据在 两个方向上 进行传输,同时提供了 数据缓冲和隔离的功能 ,以及 提高驱动能力
  • 双向数据缓冲器通常被用于数字系统中,特别是在多个设备或模块之间进行数据传输时。它可以有效地解决数据传输速度不匹配、数据格式不一致以及数据冲突等问题,从而提高了系统的稳定性和可靠性。

(6.2)74HC245芯片的使能端【OE(LE)引脚】

  • 如图所示, OE(LE)上方有横线,代表低电平有效
    在这里插入图片描述

(6.2)74HC245芯片的方向选择端【DIR引脚】

  • 英文注释为direction(方向)
  • 决定了数据是把左送右边,还是右边读回来
  • DIR接 高电平,把数据输送到右边;
  • DIR接 低电平,把数据读回左边;
    在这里插入图片描述
  • 如电路图所示:DIR引脚接的是LE引脚,也就是J21跳线帽
  • 我们这个静态数码管显示的项目只需要,写数据而不需要读
  • 所以LE接高电平即可, 也就是跳线帽链接LE和VCC
    在这里插入图片描述
    在这里插入图片描述
(6.2.1)[J21跳线帽]
  • 跳线帽是一种用于在电子电路板上进行连接的小组件。它通常由一个塑料外壳和两个金属引脚组成。跳线帽的作用是在电路板上的引脚之间建立连接,从而改变电路的功能或功能
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
(6.2.2) 数码管模块为什么要加上74HC245芯片?
  • 单片机高电平的驱动能力有限,最大电流不能太大
  • 单片机低电平的驱动能力强一些(LED采用低电平点亮会更亮一些)
  • 所以我们要加上 74HC245芯片(双向数据缓冲器) 提高驱动能力
  • 驱动的能力来源——双向数据缓冲器上的电源

7.104电容

  • 滤波电容是一种用于电路中的被动元件,其主要作用是在电路中实现 滤波 功能。滤波电容可以通过对不同频率的信号进行响应,将高频或低频信号滤除或通过,从而实现对信号的滤波处理
  • 作用:用来稳定电源
  • 单位:F(法拉)
    在这里插入图片描述

8. 4位1体排阻部分(限流电阻)

  • 四位一体
    在这里插入图片描述
    在这里插入图片描述

二.基本的静态数码管显示

  • 这次实验:让LED6显示数字6

1.总结步骤:怎么样让某盏灯显示数字

图中以LED4示例

  1. 控制138译码器的3个口,让其输出口选中对应的LED
  2. 给P0口一个段码的数据,经过缓冲器,送到公共段码端
    在这里插入图片描述

2.根据原理图,确定LED第几个亮的位选(注意:数据端位对应端口端位,即高位对高位)

  • 因为 数据端位对应端口端位,即高位对高位
  • 我们要让LED6亮,138译码器需要输入5对应到Y5即101;所以反推出我们的位选为P2_2=1;P2_3=0;P2_4=1;
    在这里插入图片描述

3.根据原理图,确定LED数字的段选(注意:数据端位对应端口端位,即高位对高位)

  • 因为 数据端位对应端口端位,即高位对高位 ;所以反推出我们的段选为0111 1101
    在这里插入图片描述
  • 寄存器不支持二进制,所以我们将其转换成十六进制P0=0x7D;
    在这里插入图片描述

4.代码演示

  • 烧写进单片机步骤详情LED实验烧写部分:传送门
#include <REGX52.H>void main()
{
//138译码器P2_2=1;P2_3=0;P2_4=1;P0=0x7D;while(1){}}
  • 现象:我们烧写入单片机后,可以发现LED6处出现数字6

三.自定义的静态数码管显示(代码演示)

  • 根据数码管段码图,以及while函数,我们进行改装
    在这里插入图片描述
#include <REGX52.H>unsigned char smgduan[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;			case 4:P2_4=1;P2_3=0;P2_2=0;break;			case 5:P2_4=0;P2_3=1;P2_2=1;break;			case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=smgduan[Number];}void main()
{Nixie(2,2);//控制第几个灯亮什么数字while(1){}
}

四.自定义的动态数码管显示

1.视觉暂留原理

  • 利用视觉暂留原理:视觉暂留原理是指在人眼观察到快速连续变化的图像时,由于视觉系统的特性,前一幅图像留存在视网膜上的印象会持续一段时间,从而使得人眼看到的图像在一定时间内仍然保持在视野中,这就是所谓的视觉暂留。

2.消影问题

  • 数码管显示主要分两个过程:1.位选 2.段选
  • 我们发现在用视觉暂留原理解决显示问题后,显示过程中会出现 数字乱位 的问题
  • 出现问题的原因: 单片机处理速度很快,上一个过程的段暄会影响到这个过程的位选
  • 解决方法:在每一个过程中间加入一个 清零步骤 P0=0x00;
    在这里插入图片描述

2.利用自定义延时函数封装(代码演示)

#include <REGX52.H>unsigned char smgduan[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};void Delay(unsigned int xms)		
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;			case 4:P2_4=1;P2_3=0;P2_2=0;break;			case 5:P2_4=0;P2_3=1;P2_2=1;break;			case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=smgduan[Number];Delay(1);//Á¢¿ÌÇå0ÊýÂë¹Ü»á±äµÃºÜ°µP0=0x00;//ÏûÓ°
}void main()
{while(1){Nixie(1,1);Delay(20);Nixie(2,2);Delay(20);Nixie(3,3);Delay(20);Nixie(2,2);}
}

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

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

相关文章

Redis篇之集群

一、主从复制 1.实现主从作用 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。主节点用来写的操作&#xff0c;从节点用来读操作&#xff0c;并且主节点发生写操作后&#xff0c;会把数据同…

Web后端开发:登录认证案例

登录功能 需求分析 在登录界面中&#xff0c;输入用户的用户名以及密码&#xff0c;然后点击 “登录” &#xff0c;服务端判断用户输入的用户名和密码是否都正确。如果正确&#xff0c;则返回成功结果&#xff0c;前端跳转至系统首页面&#xff1b;否则报错&#xff0c;停留在…

从零开始手写mmo游戏从框架到爆炸(十)— 集成springboot-jpa与用户表

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 集成springboot-jpa&#xff0c;不用mybatis框架一个是方便对接不同的数据源。第二个目前规划的游戏内容可能对数据库的依赖不是很大&#xff0c;jpa应该肯定能满足要求了…

Unity类银河恶魔城学习记录4-1,4-2 Attack Logic,Collider‘s collision excepetion源代码 P54 p55

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic; u…

深入探索 Express.js 的高级特性

引言 Express.js 是一个基于 Node.js 平台的 Web 开发框架&#xff0c;旨在提供一种简单、易于使用的方式来创建 Web 应用程序。由于其灵活性和可扩展性&#xff0c;它已经成为了 Node.js 社区最受欢迎的框架之一。在本文中&#xff0c;我们将重点介绍 Express.js 的高级特性&…

Flink从入门到实践(一):Flink入门、Flink部署

文章目录 系列文章索引一、快速上手1、导包2、求词频demo&#xff08;1&#xff09;要读取的数据&#xff08;2&#xff09;demo1&#xff1a;批处理&#xff08;离线处理&#xff09;&#xff08;3&#xff09;demo2 - lambda优化&#xff1a;批处理&#xff08;离线处理&…

【Python基础】案例分析:电影分析

电影分析 项目背景&#xff1a; 数据集介绍&#xff1a;movie_lens数据集是一个电影信息&#xff0c;电影评分的数据集&#xff0c;可以用来做推荐系统的数据集需求&#xff1a;对电影发展&#xff0c;类型&#xff0c;评分等做统计分析。目标&#xff1a;巩固pandas相关知识…

Layui 表格组件 头部工具栏 筛选列 加入全选和全不选的功能

Layui 表格组件 头部工具栏 筛选列 加入全选和全不选的功能 问题 前端使用Layui表格组件展示后台数据&#xff0c;因数据中涉及字段较多&#xff0c;因此加入了组件中固有的控制表格列隐藏显示的功能。奈何客户希望再此基础上&#xff0c;加入“全选”和“全不选”的功能&…

【动态规划】【前缀和】【C++算法】LCP 57. 打地鼠

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LCP 57. 打地鼠 勇者面前有一个大小为3*3 的打地鼠游戏机&#xff0c;地鼠将随机出现在各个位置&#xff0c;moles[i] [t,x,y] 表…

Stable Diffusion 模型下载:Samaritan 3d Cartoon SDXL(撒玛利亚人 3d 卡通 SDXL)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 由“PromptSharingSamaritan”创作的撒玛利亚人 3d 卡通类型的大模型&#xff0c;该模型的基础模型为 SDXL 1.0。 条目内容类型大模型基础模型SDXL 1.0来源CIVITA…

2024.2.7

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef char datatype;typedef struct node {//数据域datatype data;//指针域&#xff1a;左struct node *lchild;//指针域&#xff1a;右struct node *rchild; }*btree;//创建节点 btree creat_n…

嵌入式中轻松识别STM32单片机是否跑飞方法

单片机项目偶尔经常出现异常&#xff0c;不知道是程序跑飞了&#xff0c;还是进入某个死循环了&#xff1f; 因为发生概率比较低&#xff0c;也没有规律&#xff0c;所以没办法在线调试查找问题。 结合这个问题&#xff0c;给大家分享一下用ST-LINK Utility识别单片机程序是否…

python-可视化篇-pyecharts库-气候堆叠图

准备 代码 # codingutf-8 # 代码文件&#xff1a;code/chapter10/10.3.py # 3D柱状图import randomfrom pyecharts import options as opts from pyecharts.charts import Bar3D# 生成测试数据 data [[x, y, random.randint(10, 40)] for y in range(7) for x in range(24)]…

Git中为常用指令配置别名

目录 1 前言 2 具体操作 2.1 创建.bashrc文件 2.2 添加指令 2.3 使其生效 2.4 测试 1 前言 在Git中有一些常用指令比较长&#xff0c;当我们直接输入&#xff0c;不仅费时费力&#xff0c;还容易出错。这时候&#xff0c;如果能给其取个简短的别名&#xff0c;那么事情就…

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM) 所谓预测,就是指通过对事物进行分析及研究,并运用合理的方法探索事物的发展变化规律,对其未来发展做出预先估计和判断。…

计算机毕业设计 | SSM 医药信息管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 本系统由说书客面向广大民营药店、县区级医院、个体诊所等群体的药品和客户等信息的管理需求&#xff0c;采用SpringSpringMVCMybatisEasyui架构实现&#xff0c;为单体药店、批发企业、零售连锁企业&#xff0c;提供有针对性的信息数据管理…

MySQL 时间索引的选择

背景 MySQL 在使用过程中经常会对时间加索引&#xff0c;方便进行时间范围的查询&#xff0c;常见的时间类型有 data、datetime、long、timestamp 等&#xff0c;在此分析下这几种时间类型的索引大小&#xff0c;以找到比较合适的时间类型。 时间类型对比 常用的索引类型是 …

HttpServletResponse接口用于表示状态代码的字段

1. HttpServletResponse接口用于表示状态代码的字段 您已学习了状态代码以及可用于从servlet向客户机发送状态代码的HttpServletResponse接口的字段。下表列出了HttpServletResponse接口表示状态代码的一些其他字段。 字段状态代码描述SC_HTTP_VERSION_NOT_SUPPORTED505服务器…

PyTorch深度学习实战(23)——从零开始实现SSD目标检测

PyTorch深度学习实战&#xff08;23&#xff09;——从零开始实现SSD目标检测 0. 前言1. SSD 目标检测模型1.1 SSD 网络架构1.2 利用不同网络层执行边界框和类别预测1.3 不同网络层中默认框的尺寸和宽高比1.4 数据准备1.5 模型训练 2. 实现 SSD 目标检测2.1 SSD300 架构2.2 Mul…

Verilog刷题笔记25

题目&#xff1a; You’re already familiar with bitwise operations between two values, e.g., a & b or a ^ b. Sometimes, you want to create a wide gate that operates on all of the bits of one vector, like (a[0] & a[1] & a[2] & a[3] … ), whic…