51单片机入门————数码管显示

我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换

数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示
电路原理图


我们先讨论一个数码管

数码管有共阳极和共阴极,我们现在使用的STC89C52是共阴极的,说明数码管共用阴极

上面是阴极,下面我们给阳极,即给1,就可以亮了
说这么多,我们来是通过实例来看吧
首先我们要选灯的位置,假如我们要选择,左手边第一个灯,我们怎么设置
灯的位置通过138译码器来控制

通过原理图也可以看出,左手边第一个灯LED8是通过Y7来确定的,那么怎么控制呢
Y7即对应的数字为7,二进制表示为111
这个111又赋给谁
我们规定P24是高位,P23是中间的一位,P22是最低位
这个111就是赋值给P24~P22
灯的位置在哪里我们知道控制了
数字的显示又怎么控制

我们是通过控制74HC245来控制信号的,先了解一下74HC245

我们给P0给值就可以控制信号了
我们在前面知道5对应在数码管信号为10110110
因为低位放在放在P0_0,所以我们在P0赋值是5的信号二进制的倒过来,即01101101对应的16进制0x6D
我们看看代码的实现吧

下面我们再来控制一个灯试一试,就LDE4吧,对应的是Y3,二进制011,显示数字为8,则对应的为
1111 1110,我们给P0的是0111 1111 对应16进制0x7F

点亮一个灯的步骤应该我们已经熟悉了
1.选位置,LED8~Y7,以此类推,Y后面的数字,对应P24~P22的二进制
2.选数字,根据共阴极来确定0或者1
3.在P0中存(倒过来)
如果我们要点亮很多个灯怎么实现,138编码器好像只能控制一个灯的亮灭啊
如果我们想点亮多个数字,eg

这个代码可以在屏幕显示12吗

好像不怎么行啊

这个代码的功能是什么,可以在不断的显示1和2,中间间隔0.5秒
那么我们让它一直显示怎么操作

我们把时间间隔改成0.001秒会怎么样

好像结果不怎么令人满意
出现这个原因是什么

我们怎么消除影响
我们可以将P0置为0

我们将P0置为0,这样就可以消除影响了,这时可以显示12

我们假如Delay的作用是什么,不加会怎么样
我们去除是怎么样的

我们去除了,显示会变暗一点,加了延时1毫秒我们可以让1或者2显示更久一点这样就会亮一点
总结:
我们显示多个数字操作和显示一个数字的操作大同小异
但是我们显示多个数字的时候,在显示下一个数字的时候,我们需要消除P0的影响,即把P0置空
我们138译码器只能控制一个灯的亮灭,我们利用人眼的视觉差,其实我们一个时间只能显示一个数字,我们看到两个数字是因为,这两个数字之间在不断转换,转换得很快,我们肉眼觉得它们没有变化,起到以假乱真得效果
我们每次设置显示的位置,都要定义,数字也要定义,显得十分不方便
我们构造一个函数来实现他会事半功倍
#include <REGX52.H>void Delay(long xms) //延时函数
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixietube_number(int position,int number)//对应的位置左手边为第一个显示屏
{unsigned char numberSize[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};switch(position){case 1:P2_4=1;P2_3=1;P2_2=1;break;//对应138译码器Y7 LED8case 2:P2_4=1;P2_3=1;P2_2=0;break;//??138???Y6 LED7case 3:P2_4=1;P2_3=0;P2_2=1;break;//??138???Y5 LED6case 4:P2_4=1;P2_3=0;P2_2=0;break;//??138???Y4 LED5case 5:P2_4=0;P2_3=1;P2_2=1;break;//??138???Y3 LED4case 6:P2_4=0;P2_3=1;P2_2=0;break;//??138???Y2 LED3case 7:P2_4=0;P2_3=0;P2_2=1;break;//??138???Y1 LED2case 8:P2_4=0;P2_3=0;P2_2=0;break;//??138???Y0 LED1}P0=numberSize[number];Delay(1);//稳定显示数字P0=0;//消除数字}
利用这个函数,我们可以快速设置数码管上的数字

我们调用这个函数就可以显示数字了

相关文章:

51单片机入门————数码管显示
我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示电路原理图我们先讨论一个数码管数码管有共阳极和共阴极,我们现在使用的STC89C52是共阴…...
Spring事务未生效场景
一.抛出事务不支持的异常 原理: Spring事务默认支持RuntimeException异常,抛出的异常为RuntimeException异常及其子类异常事务均可生效,而我们日常常见的异常基本都继承自RuntimeException,所以无需指定异常类型事务也能生效。但…...

servlet注解开发
文章目录servlet注解开发内容回顾响应对象 HttpServletResponse重定向与请求转发ServletConfig简介案例ServletContext简介案例Servlet 注解开发简介注解使用案例WebServlet 注解详细参数综合的增删改查案例登录注册功能servlet注解开发 内容回顾 响应对象 HttpServletRespon…...
mysql一联合主键
联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了&…...

openpnp - 判断吸嘴是否指定了正确的旋转轴
文章目录openpnp - 判断吸嘴座是否指定了正确的旋转轴概述笔记吸嘴单独矫正的时候Calibrate precise camera ↔ nozzle N1 offsets.ENDopenpnp - 判断吸嘴座是否指定了正确的旋转轴 概述 如果没有指定吸嘴座的正确旋转轴, 会因为对应吸嘴该旋转时不旋转, 而是另外一个空闲的吸…...

【办公类-19-03】办公中的思考——Python批量统一文件名的序号(保教主任整理打印文件)
背景需求:为迎接督导检查,保教主任从各条线收集文本资料。并在每个文件名称前手动编号。但是她嘀咕道:”为什么两套资料放在一个文件里就不是按照数字序号排序?,有的是1X-,有的是40X,看起来很乱…...

MySQL约束
约束约束总结约束 1、概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2、目的:保证数据库中数据的正确、有效性和完整性。 3、分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表…...

x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
文章目录[toc]关于 docker 版本查看是否开启 experimental 功能开启 experimental 功能查看当前环境平台拉取一个 arm 平台的容器运行一个 arm 平台的容器整一个 qemu-user-static注册可支持的架构解释器尝试启动 arm64 镜像尝试启动 ppc64le 镜像后台运行 arm64 容器build 一个…...
找工作经验分享
好的简历的特点:简洁:不要使用花里胡俏的简历模板,一般就是一行行写下来那种就行主次分明:一定要有重点,让面试了解你强项是什么首先当然是突出技术,不要花大批篇幅在个人信息、兴趣爱好等,重点…...

C语言学习之路--操作符篇,从知识到实战
目录一、前言二、操作符分类三、算术操作符四、移位操作符1、左移操作符2、右移操作符五、位操作符拓展1、不能创建临时变量(第三个变量),实现两个数的交换。2、编写代码实现:求一个整数存储在内存中的二进制中1的个数。六、赋值操…...
【华为OD机试2023】端口合并 C++ Java Python
【华为OD机试2023】端口合并 C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收输入、…...
C++常用头文件整理
#include <iostream> 输入输出流,调用该函数使用cin,cout#include <iomanip> mainp是mainpular(操纵器)的缩写,可以调用一些函数,如fixed()<<setprecision()等#include <cmath> 调用数学函数#include &l…...
Linux内核4.14版本——drm框架分析(2)——connector分析
目录 1. drm_connector结构体 1.1 struct list_head head 1.2 struct drm_mode_object base 1.3 base.properties 1.4 uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER] 1.5 struct drm_encoder *encoder 1.6 struct list_head probed_modes 1.7 struct list_head mod…...
dev GridControl 按条件纵向合并单元格
dev GridControl 按条件纵向合并单元格 gridView5.OptionsView.AllowCellMerge true; gridView5.CellMerge gridView5_CellMerge; //自定义合并单元格监听事件void gridView5_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e){int rowHandle1…...

aws eks 集群初始化过程中pause容器的启动逻辑
eks集群默认策略在磁盘使用量达到threshold时会清除镜像,其中pause镜像也可能会被清除 https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-worker-nodes-image-cache/ pause容器能够为pod创建初始的名称空间,pod的内的容器共享其中的网络空…...

Numpy专栏目录(长期更新)
文章目录数组基础文件与字符串多项式分布Numpy绝对可以说是支撑Python地位的最重要的包了,几乎所有能叫出名的Python计算库,都不可避免地调用了Numpy,Numpy官网也列出了一些,大致如下图这样,堪称科学计算领域的瑞士军刀…...

English Learning - L2 第1次小组纠音 [ɑː] [ɔː] [uː] 2023.2.25 周六
English Learning - L2 第1次小组纠音 [ɑː] [ɔː] [uː] 2023.2.25 周六共性问题分析大后元音 [ɑː]大后元音 [ɔː]后元音 [uː]我的发音问题后元音 [uː]大后元音 [ɑː] 和 [ɔː]纠音过程第一次第二次第三次共性问题分析 大后元音 [ɑː] 嘴唇过于松散,没…...

博客系统程序(页面设计)
咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…...
【死锁的排查工具有哪些?】
死锁是指两个或多个进程(线程)相互等待对方持有的资源,导致无法继续执行的情况。在并发编程中,死锁是一个常见的问题,需要使用专门的工具来进行排查和解决。 以下是常用的死锁排查工具: jstack:…...

JUC包:CyclicBarrier源码+实例讲解
1 缘起 上篇文章讲到了CountDownLatch:https://blog.csdn.net/Xin_101/article/details/129116170 作为同系的佼佼者,不得不提CyclicBarrier, 设计理念相似,都是多线程等待,但是,应用的技术以及功能不同&a…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...