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

news2024/11/20 1:35:12
我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换
数码管是通过控制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 LED8
        case 2:
            P2_4=1;P2_3=1;P2_2=0;break;//??138???Y6 LED7
        case 3:
            P2_4=1;P2_3=0;P2_2=1;break;//??138???Y5 LED6
        case 4:
            P2_4=1;P2_3=0;P2_2=0;break;//??138???Y4 LED5
        case 5:
            P2_4=0;P2_3=1;P2_2=1;break;//??138???Y3 LED4
        case 6:
            P2_4=0;P2_3=1;P2_2=0;break;//??138???Y2 LED3
        case 7:
            P2_4=0;P2_3=0;P2_2=1;break;//??138???Y1 LED2
        case 8:
            P2_4=0;P2_3=0;P2_2=0;break;//??138???Y0 LED1
    }
    P0=numberSize[number];
    Delay(1);//稳定显示数字
    P0=0;//消除数字
    
}

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388081.html

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

相关文章

DataX入门

目录 1. DataX介绍 2. DataX支持的常用数据源类型 3. 设计理念 4. DataX框架设计 4.1. Reader 4.2. Writer 4.3. Framework 5. DataX的运行流程 6. DataX与Sqoop对比 7. 部署 8. 配置详解 9. 案例 同步MySql到HDFS 9.1. 整体结构 9.2. mySqlReader 9.2.1. …

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

C语言函数&#xff1a;字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前&#xff0c;需要先了解strcpy()、strncat()&#xff1a; C语言函数&#xff1a;字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…

包装类详解(装箱,拆箱)

Object 引用可以指向任意类型的对象&#xff0c;但有例外出现了&#xff0c;8 种基本数据类型不是对象&#xff0c;那岂不是刚才的泛型机制要失效了&#xff1f;&#xff08;泛型详解._阿瞒有我良计15的博客-CSDN博客&#xff09; 实际上也确实如此&#xff0c;为了解决这个问题…

数据结构与算法-二叉树-序列化与反序列化

可能性探究:我们可以想到的是只有一棵树按照某个序是唯一确定要给结构的情况才可能被序列化和反序列化&#xff0c;比如我们对于以下的二叉树可以找到它的先序、中序、后序如下&#xff1a; 根据它的先序和后序我们找不到任何其他可能的树&#xff0c;所以可以根据先序和后序去…

NLP预训练模型

Models Corpus RoBERTa: A Robustly Optimized BERT Pretraining Approach 与BERT主要区别在于&#xff1a; large mini-batches 保持总训练tokens数一致&#xff0c;使用更大的学习率、更大的batch size&#xff0c;adam β20.98\beta_20.98β2​0.98&#xff1b;dynamic ma…

aws eks 集群初始化过程中pause容器的启动逻辑

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

库函数qsort 的模拟实现

在之前了解了库函数qsort的使用之后 我们来模拟实现一下上篇有介绍 qsort的底层实现是快速排序 由于害怕没有人了解过快速排序 我就用大家熟知的冒泡排序进行模拟实现 先来展示完整代码 以下代码为升序排序 如果降序将冒泡排序中的大于号改为小于号就可以了#define _CRT_SECURE…

malloc实现原理探究

2021年末面试蔚来汽车&#xff0c;面试官考察了malloc/free的实现机制。当时看过相关的文章&#xff0c;有一点印象&#xff0c;稍微说了一点东西&#xff0c;不过自己感到不满意。今天尝试研究malloc的实现细节&#xff0c;看了几篇博文&#xff0c;发现众说纷纭&#xff0c;且…

MySql启动错误(Mac系统 安装 mysql-8.0.32-macos13-arm64 后每次点击启动 无法启动) --- 已解决

MySql启动的时候: 立即变红! 查看日志如下: 2023-03-04T14:18:01.089671Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. 2023-03-04T14:18:10.304169Z 0 [System] [MY-010116] [Server]…

【EDA工具使用】——VCS和Verdi的联合仿真的简单使用

目录 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真&#xff08;最常用&#xff09;​编辑 4.两步式混合编译仿真​编辑 5.VCS的使用 ​6.verdi的使用 1.产生fsdb文件的两种方法​编辑 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真…

按位与为零的三元组[掩码+异或的作用]

掩码异或的作用前言一、按位与为零的三元组二、统计分组1、map统计分组2、异或掩码总结参考资料前言 当a b 0时&#xff0c;我们能够很清楚的知道b是个什么值&#xff0c;b 0 - a -a&#xff0c;如果当a & b 0时&#xff0c;我们能够很清楚的知道b是什么值吗&#xf…

Python GUI界面编程-初识

图形用户界面(Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…

HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

0 需 求稀疏字段累计求和问题1 问题分析根据图片中数据变换的形式&#xff0c;可以看出是根据字段term补齐数据中缺失的日期&#xff0c;term为连续日期的个数&#xff0c;当为12时&#xff0c;表明由2018-12-21到2019-01-02连续日期个数为12&#xff0c;当补齐日期后&#xff…

sklearn中的逻辑回归

目录 一.名为“回归”的分类器 二.逻辑回归的优点 三.sklearn中的逻辑回归 四.linear_model.LogisticRegression 五.penalty & C(正则化) 六.逻辑回归中的特征工程 1.业务选择 2.PCA和SVD一般不用 3.统计方法可以使用&#xff0c;但不是非常必要 4.高效的嵌入法e…

【vulhub漏洞复现】CVE-2013-4547 Nginx 文件名逻辑漏洞

一、漏洞详情影响版本 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7通过%00截断绕过后缀名的限制&#xff0c;使上传的php内容文件被解析执行。当Nginx得到一个用户请求时&#xff0c;首先对url进行解析&#xff0c;进行正则匹配&#xff0c;如果匹配到以.php后缀结尾的文件名&#x…

2022秋-2023-中科大-数字图像分析-期末考试试卷回忆版

今天晚上刚考完&#xff0c;心累&#xff0c;在这里继续授人以渔(仅供参考&#xff0c;切勿对着复习不看ppt&#xff0c;ppt一定要过两遍)。 注意:往年的经验贴&#xff0c;到此为止&#xff0c;全部作废&#xff0c;一个没考。千万不要只对着复习&#xff0c;SIFT没考&#x…

JavaScript(JS)

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

Python爬虫——使用socket模块进行图片下载

Python爬虫——使用socket模块进行图片下载什么是socket爬虫的工作流程socket爬取图片为什么能用socket能下载图片socket下载图片和request下载图片的区别使用socket下载一张图片使用socket下载多张图片方法1方法2什么是socket Socket 是一种通信机制&#xff0c;用于实现网络…

AQS为什么用双向链表?

首先&#xff0c;在AQS中&#xff0c;等待队列是通过Node类来表示的&#xff0c;每个Node节点包含了等待线程的信息以及等待状态。下面是Node类的部分源码&#xff1a;static final class Node {// 等待状态volatile int waitStatus;// 前驱节点volatile Node prev;// 后继节点…

【AI绘图学习笔记】深度学习相关数学原理总结(持续更新)

如题&#xff0c;这是一篇深度学习相关数学原理总结文&#xff0c;由于深度学习中涉及到较多的概率论知识&#xff08;包括随机过程&#xff0c;信息论&#xff0c;概率与统计啥啥啥的)&#xff0c;而笔者概率知识储备属实不行&#xff0c;因此特意开一章来总结&#xff08;大部…