【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.hqwc.cn/news/460072.html

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

相关文章

海外云手机——平台引流的重要媒介

随着互联网的飞速发展&#xff0c;跨境电商、短视频引流以及游戏行业等领域正经历着迅猛的更新换代。在这个信息爆炸的时代&#xff0c;流量成为至关重要的资源&#xff0c;而其中引流环节更是关乎业务成功的关键。海外云手机崭露头角&#xff0c;成为这一传播过程中的重要媒介…

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

分享78个行业PPT,总有一款适合您

分享78个行业PPT&#xff0c;总有一款适合您 78个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/19UL58I5Z1QZidVrq50v6fg?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

【数据结构】二叉树的三种遍历(非递归讲解)

目录 1、前言 2、二叉树的非递归遍历 2.1、先序遍历 2.2、中序遍历 2.3、后序遍历 1、前言 学习二叉树的三种非递归遍历前&#xff0c;首先来了解一下递归序&#xff1a; 递归序就是按照先序遍历的顺序&#xff0c;遇到的所有结点按顺序排列&#xff0c;重复的结点也必须记…

芯片设计方法学之--握手

1.面向对象 本文主要介绍握手的基本概念&#xff0c;读者可通过该篇文章对握手有个基本概念。也借此机会发表下自己对流水线中的握手反压的一些愚见。更深的理解可期待后续更新&#xff1b; 2. 握手简介 举个简单例子&#xff1b; 上图中sender拉高vld发送有效的数据给recei…

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机&#xff08;FSM&#xff09;与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍&#xff0c;这里使用状态机…

【JS逆向八】逆向某企查网站的headers参数,并模拟生成 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 加密方法&#xff1a;未知 / 标准库Hmac-SHA512 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;AES加…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法&#xff08;续篇五&#xff09; 1.1 种子词 ​ 种子词&#xff08;seed word&#xff09;通常指的是在对话中使用的初始提示或关键词&#xff0c;用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子&#xff0c;通常与对话的主题…

相机图像质量研究(9)常见问题总结:光学结构对成像的影响--工厂镜头组装

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

机器学习中常用的性能度量—— ROC 和 AUC

什么是泛化能力&#xff1f; 通常我们用泛化能力来评判一个模型的好坏&#xff0c;通俗的说&#xff0c;泛化能力是指一个机器学期算法对新样本&#xff08;即模型没有见过的样本&#xff09;的举一反三的能力&#xff0c;也就是学以致用的能力。 举个例子&#xff0c;高三的…

【EEG信号处理】时频图与时频图的观察

非常快速和松散的介绍频谱和时频分析 当我们看到一个时频图时&#xff0c;我们应该考虑什么&#xff0c;应该有什么样的问题 什么是time-frequency plots 我们知道&#xff0c;左边是在时间维度上&#xff0c;根据电极的变化来绘制的折线图&#xff0c;他在时间维度上的&#…

单片机——FLASH(2)

文章目录 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09;flash写数据时 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09; Main memory 主存储区 放置代码和常数 System memory 系统存储区 方式bootloader代码 OTP区 一次性可编程区 选项…