【51单片机】实现一个动静态数码管显示项目(前置知识铺垫,代码&图演示)(5)

本文主要是介绍【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);}
}

这篇关于【51单片机】实现一个动静态数码管显示项目(前置知识铺垫,代码&图演示)(5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689081

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont