【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/673393.shtml

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

相关文章

vue electron应用调exe程序

描述 用Python写了一个本地服务编译成exe程序&#xff0c;在electron程序启动后&#xff0c;自动执行exe程序 实现 1. 使用node的child_process模块可以执行windows执行&#xff0c;通过指令调exe程序 // electron/index.js var cp require("child_process"); /…

.NET Core 实现 JWT 认证

写在前面 JWT&#xff08;JSON Web Token&#xff09;是一种开放标准, 由三部分组成&#xff0c;分别是Header、Payload和Signature&#xff0c;它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说&#xff0c;就是通过数字签名算法生产一个字符串&#xff0c;然后在网络…

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

bpmn.js是由开源工作流引擎camunda内部组织BPMN.IO组织开发的一款基于BPMN 2.0的工作流展示、编辑的web端工具库。由于工作流引擎activiti、flowable、camunda属于同宗分流&#xff0c;其工作流定义格式大致相同&#xff0c;所以我们可以使用bpmn.js完美融合其中任一工作流引擎…

VScode为什么选择了Electron,而不是QT?

选择Electron而不是QT可能是基于以下几个原因&#xff1a; Web技术的普及和开发者生态系统&#xff1a;Web技术如HTML、CSS和JavaScript在开发者中非常普及&#xff0c;开发者生态系统庞大且活跃。使用Electron可以利用这些熟悉的Web技术和丰富的开发者社区资源。跨平台支持&am…

CleanMyMac是否有必要购买?2024有啥优惠

CleanMyMac X是一款专业的Mac电脑清理和优化工具&#xff0c;它提供了多种功能&#xff0c;如智能清理、系统垃圾清理、恶意软件移除、个人隐私保护、优化加速等&#xff0c;可以帮助用户解决Mac系统维护问题&#xff0c;保持Mac电脑的最佳运行状态。 此外&#xff0c;Mac电脑的…

文件上传的另类应用

1.Imagemagick CVE-2016-3714 CVE-2022-44268 CVE-2020-29599可在vulhub靶场进行复现1.1.Imagemagick简介 ImageMagic是一款图片处理工具&#xff0c;当传入一个恶意图片时&#xff0c;就有可能存在命令注入漏洞。 ImageMagick默认支持一种图片格式mvg&#xff0c;而mvg与svg…

登录+JS逆向进阶【过咪咕登录】(附带源码)

JS渗透之咪咕登录 每篇前言&#xff1a;咪咕登录参数对比 captcha参数enpassword参数搜索enpassword参数搜索J_RsaPsd参数setPublic函数encrypt加密函数运行时可能会遇到的问题此部分改写的最终形态JS代码&#xff1a;运行结果python编写脚本运行此JS代码&#xff1a;运行结果&…

Java实现民宿预定管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Android7.0-Fiddler证书问题

一、将Fiddler的证书导出到电脑&#xff0c;点击Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop 二、下载Window版openssl&#xff0c; 点击这里打开页面&#xff0c;下拉到下面&#xff0c;选择最上面的64位EXE点击下载安装即可 安…

51单片机 跑马灯

#include <reg52.h>//毫秒级延时函数 void delay(int z) {int x,y;for(x z; x > 0; x--)for(y 114; y > 0 ; y--); }sbit LED1 P1^0x0; sbit LED2 P1^0x1; sbit LED3 P1^0x2; sbit LED4 P1^0x3; sbit LED5 P1^0x4; sbit LED6 P1^0x5; sbit LED7 P1^0x6; s…

Rust通用代码生成器莲花发布红莲尝鲜版二十一,前端代码生成物有巨大改进

Rust通用代码生成器莲花发布红莲尝鲜版二十一&#xff0c;前端代码生成物有巨大改进 Rust通用代码生成器莲花已发布红莲尝鲜版二十一&#xff0c;此版本采用了新的前端代码生成引擎&#xff1a;时空之门前端代码生成器6.2.0。此引擎支持Nodejs 21,Nodejs 18和Nodejs 14。消除了…

Ansible自动化工具(1)

目录 ansible的特性&#xff1a;. 二.部署ansible 管理端安装 ansible&#xff1a; ansible 目录结构&#xff1a; 管理主机上配置主机清单&#xff1a; ​编辑 配置密钥对验证&#xff1a; ansible 命令行模块 &#xff1a; 1&#xff0e;command 模块 指定 ip 执行…

蓝桥杯-求阶乘-python

问题描述 满足N!的末尾恰好有K个0的最小的N是多少&#xff1f; 如果这样的N不存在输出一1。 思路解析 末尾的0是由10产生的&#xff0c;而10是由质数2和5产生的 在求阶乘的过程中&#xff0c;只要是偶数就会有2&#xff0c;而5相对2更少&#xff0c;所以对于10的数量我们可以…

MyBatis中#和$符的区别,sql注入问题,动态sql语句

MyBatis中#{}和${}的区别 #{}和${}都是MyBatis提供的sql参数替换。区别是&#xff1a;#{}是预编译处理&#xff0c;${}是字符串直接替换。#{}可以防止SQL注入&#xff0c;${}存在SQL注入的风险&#xff0c;例如 “ or 11”虽然存在SQL注入风险&#xff0c;但也有自己的适用场…

分享3款开源免费好用的Docker可视化管理工具安装部署教程

文章目录 1.前言2.Docker Desktop3.Portainer3.1 Portainer默认英文版本安装3.2 Portainer汉化版本安装3.3官方镜像说明3.3.1ssl访问3.3.2Nginx反代3.3.3Nginx反代设置子目录3.3.4docker-compose部署 3.4登录 4.DockerUI4.1简介4.2项目地址4.3部署启动命令4.4登录4.5首页 5.总结…

C语言数组与扫雷游戏实现(详解)

扫雷游戏的功能说明 使⽤控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷可以排查雷 ◦ 如果位置不是雷,就显示周围有几个雷 ◦ 如果位置是雷,就炸死游戏结束 ◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结…

【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

我的QQ编程学习群

欢迎大家加入我的QQ编程学习群。 群号:950365002 群里面有许多的大学生大佬&#xff0c;有编程上的疑惑可以随时问&#xff0c;也可以聊一些休闲的东西。 热烈欢迎大家加入&#xff01;&#xff01; 上限:150人。

Linux联网安装MySQL Server

yum安装 以下代码复制粘贴到控制台即可 yum list | grep mysql-server #查看可以下载的MySQLyum install -y mysql-server #安装MySQLmysql_secure_installation #引导安装 引导安装实例如下 systemctl enable mysqld 设置开机自动启动 systemctl sta…

Powershell Install 一键部署Openssl+certificate证书创建

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 Windows openssl 下载 前提条件 开启wmi,配置网卡,参考 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器…