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

news/2024/9/17 13:41:25/
我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换
数码管是通过控制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;//消除数字}

利用这个函数,我们可以快速设置数码管上的数字

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


http://www.ppmy.cn/news/30011.html

相关文章

Linux用户空间与内核空间通信(Netlink通信机制)

一&#xff0c;什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信&#xff0c;但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式&#xff0c;一般不用Netlink。除非需要…

Cadence Allegro 导出Bill of Material Report (Condensed)详解

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,Bill of Material Report (Condensed)作用3,Bill of Material Report (Condensed)示例4,Bill of Material Report (Condensed)导出方法4.1,方法14.2,方法2,

第十三届蓝桥杯

这里写目录标题一、刷题统计&#xff08;ceil函数返回的是等值于某最小整数的浮点值&#xff0c;不强制转换回int就wa&#xff0c;没错就连和int整数相加都wa二、修剪灌木&#xff08;主要应看清楚会调转方向三、统计子矩阵&#xff08;前缀和滑动窗口⭐&#xff09;四、[积木画…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非…

xgboost: 分割查找算法:贪婪算法、分桶算法

1、Basic Exact Greedy Algorithm 树学习的关键问题之一是找到最好的分割&#xff0c;如Eq(7)所示。 贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务&#xff0c;算法必须首先根据特征值对数据进行排序&#xff…

配置本地 python GEE、geemap环境

1.安装anconda 百度搜索anconda清华镜像&#xff0c;从清华镜像中选择最新的anconda安装包&#xff0c;国内镜像网站下载速度较快&#xff0c;如果从国外官网下载速度相当慢&#xff0c;详细安装教程请参考&#xff1a; anconda安装教程https://blog.csdn.net/lwbCUMT/article…

MyBatis高频面试专题

一、介绍下MyBatis中的工作原理 1。介绍MyBatis的基本情况&#xff1a;ORM 2。原理&#xff1a; MyBatis框架的初始化操作处理SQL请求的流程 1.系统启动的时候会加载解析全局配置文件和对应映射文件。加载解析的相关信息存储在 Configuration 对象 Testpublic void test1(…

JavaScript(JS)

一、三种引入方式&#xff1a; 1、内部js 通过script标签嵌入到html里面 <script>alert(hello);</script> 2、外部js 写成一个单独的.js文件&#xff0c;让html引入进来 <script src"app.js"></script> 3、行内js 直接写到html内部 &…

SpringMVC文件上传、下载、国际化配置

Java知识点总结&#xff1a;想看的可以从这里进入 目录3.6、文件上传、下载3.6.1、文件上传3.6.2、文件下载3.7、国际化配置3.6、文件上传、下载 3.6.1、文件上传 form 表单想要具有文件上传功能&#xff0c;其必须满足以下 3 个条件。 form 表单的 method 属性必须设置为 p…

最近一年我都干了什么——反思!!

过去一年不管是学习方式还是心态上都和以往有了许多不同的地方&#xff0c;比较昏昏沉沉。最近慢慢找到状态了&#xff0c;就想赶紧记录下来。 学习 在学习新技术的过程中开始飘了&#xff0c;总感觉有了一些开发经验后就觉得什么都不用记&#xff0c;知道思路就行遇到了现场百…

Java高效率复习-SpringMVC[SpringMVC-2]

SpringMVC获取请求参数 SpringMVC获取请求参数的两种方式↓ 通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参&#xff0c;此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 通过request的API——getParameter(String s)方法来获取…

2023王道考研数据结构笔记第四章串

第四章 串 4.1 串的定义 4.1.1 串的相关概念 串&#xff1a;即字符串&#xff08;String&#xff09;是由零个或多个字符组成的有限序列。一般记为S‘a1a2…an’ (n>0) 其中S是串名&#xff0c;单引号&#xff08;注&#xff1a;有的地方用双引号&#xff0c;如Java、C&am…

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

&#x1f31f;所属专栏&#xff1a;献给榕榕&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该专栏系为女友准备的&#xff0c;里面会不定时发一些讨好她的技术作品&#xff0c;感兴趣的小伙伴可以关注一下~&#x1f449;文章简介…

【数据结构初阶】详解“树”

目录 前言 1.树概念及结构 &#xff08;1&#xff09;树的概念 &#xff08;2&#xff09;树的名词介绍 &#xff08;3&#xff09;树的表示 ​编辑 2.二叉树概念及结构 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;特殊的二叉树 &#xff08;3&#xff0…

[深入理解SSD系列综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

版权声明&#xff1a;付费作品&#xff0c;未经许可&#xff0c;不可转载前言SSD &#xff08;Solid State Drive&#xff09;&#xff0c;即固态硬盘&#xff0c;通常是一种以半导体闪存&#xff08;NAND Flash&#xff09;作为介质的存储设备。SSD 以半导体作为介质存储数据&…

UNIX编程--Makefile入门

Makefile 文件命名和规则 文件命名 makefile 或者 Makefile Makefile 规则 一个 Makefile 文件中可以有一个或者多个规则目标 ... &#xff1a; 依赖 ...命令 (shell 命令)...目标&#xff1a;最终要生成的文件&#xff0c;伪目标除外依赖&#xff1a;生成目标所需的文件或是目…

【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务

作者&#xff1a;困了电视剧 专栏&#xff1a;《MySQL数据库》 文章分布&#xff1a;这是一篇关于Java中异常类的文章&#xff0c;在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程&#xff0c;如有疏漏&#xff0c;欢迎大佬指正&#xff01; 目录 索引 用法 底层逻辑…

HCIP第一个实验

实验要求与实验拓扑子网划分分析将骨干链路看成一个整体&#xff0c;路由器后的2个环回地址先看成一个&#xff0c;最后再进行拆分。计算得出&#xff0c;一共需要划分为6个子网段&#xff0c;取三位。再将每一条网段&#xff0c;按照题目要求进行划分最后完成子网划分。子网划…

synchronized和lock的区别

区别&#xff1a; 1.synchronized是关键字,Lock是接口; 2.synchronized是隐式的加锁,lock是显式的加锁; 3.synchronized可以作用于方法上,lock只能作用于方法块; 4.synchronized底层采用的是objectMonitor,lock采用的AQS; 5.synchronized是阻塞式加锁,lock是非阻塞式加锁支…

【0177】Linux中POSIX信号量实现机制

文章目录 1. 信号量概念1.1 信号量类比1.2 重要的观察1.3 信号量分类2. POSIX与System V信号量3. 信号量API4. 代码演示5. 信号量内核实现1. 信号量概念 在计算机科学中,信号量(semaphores )是一种变量或抽象数据类型,用于控制多个进程对公共资源的访问,并避免并发系统(如…