51单片机数码管的使用

IO的使用2–数码管

本文主要涉及51单片机的数码管的使用

文章目录

  • IO的使用2--数码管
    • 一、数码管的定义与类型
    • 1.1 数码管的原理图
    • 二、 举个栗子
      • 2.1 一个数码管的底层函数
      • 2.2 调用上面的底层函数显示具体数字

一、数码管的定义与类型

数码管是一种用于数字显示的电子元件,通常由多个LED(发光二极管)组成。它被广泛用于各种计数、测量和显示应用,如数字时钟、温度计、计数器等。

主要特点和结构如下:

  1. LED组成: 数码管的基本组成单元是LED,通常为七段共阳(Common Cathode)或共阴(Common Anode)的结构。七段代表数码管上的七个LED段,分别对应显示数字0到9的不同线段。

  2. 共阳和共阴: 共阳数码管表示LED的阳极连接在一起,共阴数码管表示LED的阴极连接在一起。在共阳数码管中,通过给定的线段点亮LED,而在共阴数码管中,通过接通的线段关闭LED。

  3. 多位数码管: 为了显示更多的数字或字符,可以将多个数码管连接在一起形成多位数码管,每一位数码管对应显示其中的一个数字或字符。

  4. 控制信号: 为了控制数码管的显示,需要提供适当的控制信号。这些信号通常包括电源、段选信号和位选信号,以确保正确的数字或字符在正确的数码管上显示。

  5. 常见的数码管类型:

    • 共阳七段数码管: 每个数字由7个LED段组成,共阳表示数字的阳极连接在一起。
    • 共阴七段数码管: 同样由7个LED段组成,共阴表示数字的阴极连接在一起。
    • 数码管显示器: 可以同时显示多个字符或数字,通常用于计算器、计数器等设备。

总体而言,数码管是一种简单、实用的数字显示设备,广泛应用于各种电子设备和嵌入式系统。

1.1 数码管的原理图

在这里插入图片描述

在这里插入图片描述

可以从上面原理图可以知道:

上图电路使用的是 2 个四位一体的共阴数码管组成,即 8 位数码管的段选数据 a-dp 全部并联一起引出,每位数码管的位选即公共端引出。数码管的段选 a-dp连接在 74HC245 驱动芯片输出口,由 P0 端口控制。由 P2.2、P2.3、P2.4 管脚控制 74HC138 译码器输入从而控制数码管位选.

二、 举个栗子

1-利用动态扫描方法在三位数码管上显示出稳定的321

思路:显示原理:

  1. 数码管类型: 数码管分为共阴极和共阳极两种类型。在共阴极数码管中,所有的LED的阴极(负极)都连接在一起,而阳极(正极)分别连接到不同的引脚。在共阳极数码管中,所有LED的阳极连接在一起,而阴极分别连接到不同的引脚。

  2. 动态扫描: 为了在有限的引脚上控制多个数码管,采用了动态扫描的方法。在一个很短的时间内,依次点亮每一个数码管,然后迅速切换到下一个数码管,以此类推。由于人眼的视觉暂留效应,看起来就像所有的数码管都在同时显示

  3. 数码管控制: 对于每个数码管,通过在段选信号上输出相应的二进制码,控制数码管的每一段LED的亮灭状态。例如,数字 0 对应的二进制码可以是 00111111,其中每一位对应数码管的一个段,1 表示点亮,0 表示熄灭。

  4. 显示数字: 在动态扫描的过程中,根据要显示的数字,依次输出相应的段选信号,将对应数码管的LED点亮,实现数字的显示。通过迅速切换并依次点亮每个数码管,就能够看到整个数字在数码管上的显示效果。

  5. 控制电平: 在具体的硬件连接中,控制数码管的LED点亮和熄灭需要通过控制相应的引脚输出高电平或低电平来实现。不同的数码管芯片和硬件连接可能存在一些差异,但基本的原理是类似的。

2.1 一个数码管的底层函数

下面的函数通过数码管显示一位数字,通过设置数码管的位选信号(Location参数)以及数码管的段选信号(NixieNumber数组中的对应数字),从而实现数字的显示。
其中:

  1. unsigned char smgNumber[] = {...}:定义了一个数组,用于存储共阳极数码管的七段编码。每个元素对应一个数字的七段编码,共阳极表示为1,点亮。

  2. void smg(unsigned char Location, Number):定义了一个函数smg,接收两个参数,Location表示选择哪一个数码管,Number表示要在该数码管上显示的数字。

  3. switch(Location):根据Location的值,选择要点亮的数码管。根据不同的Location值,设置对应的位选信号,即数码管的引脚。这样在多位数码管的情况下,可以选择具体点亮哪个数码管。

  4. P0 = smgNumber[Number];:将对应数字的七段编码写入P0口,通过具体的硬件连接和控制逻辑,实现数码管的段选。

  5. Delay(1);:通过调用Delay函数,延时一段时间,以使得数码管的LED能够被稳定点亮,确保显示效果。

  6. P0 = 0x00;:将P0口清零,熄灭数码管的LED,准备进行下一轮的显示。

这样,通过不断调用smg函数,可以在指定的数码管上显示相应的数字。

//unsigned char smgNumber[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //共阳极编码,七位表示数字
//共阴极数码管显示 0~F 的段码数据
unsigned char smgNumber[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void smg(unsigned char Location,Number)     //第一个参数选择数码管,第二个参数表示显示数字
{//这一段swith代码是为了设置位选信号,选择数码管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=smgNumber[Number];Delay(1);//延时一段时间,等待显示稳定P0=0x00;//消音
}

2.2 调用上面的底层函数显示具体数字

要显示具体的数值,只需要在主函数中调用上述底层函数即可

//利用动态扫描显示稳定的321
void main()
{while(1){smg(1,3);smg(2,2);smg(3,1 );}
}

上面代码中还使用到了延迟函数
如下:

void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(j--);}while(i--);xms--;}
}

当然其他延迟函数也是适用的。

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

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

相关文章

Kafka-快速实战

Kafka介绍 ChatGPT对于Apache Kafka的介绍: Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐…

Liunx Centos 防火墙操作

liunx centos 防火墙 查看防火墙状态 systemctl status firewalld查看已经开放的端口 firewall-cmd --list-ports添加端口3306 firewall-cmd --zonepublic --add-port3306/tcp --permanent重启防火墙 firewall-cmd --reload数据库开放账号可以外网登陆 mysql -u root -p …

2023 CCF中国软件大会(CCF ChinaSoft) “区块链可靠性分析”论坛成功召开

2023年12月1日上午,2023年度CCF中国软件大会区块链可靠性分析论坛成功召开。 本次论坛由中山大学郑子彬、澳门科技大学张涛、中科院软件所蔡彦和中山大学陈嘉弛四位老师联合组织举办。本论坛重点关注区块链可靠性,邀请了近年来在区块链可靠性研究方面有先…

C++:this指针

目录 前言 成员函数返回this指向的对象本身时,为什是返回引用类型? 成员函数返回this对象本身时,内部通常会通过拷贝构造函数来创建一个临时对象? 总结 前言 c通过提供特殊的对象指针,this指针 指向被调用的成员函…

医疗设备智慧管理助力医院提质增效,阿基米德amp;健康界实践分享

近日,苏州阿基米德网络科技有限公司与医疗领域头部级媒体健康界,联合举办“数智为擎 提质增效——医学装备智慧管理创新发展论坛”的直播活动。 直播现场,来自上海交通大学医学院附属同仁医院、中华医学会航海医学分会、苏州阿基米德的专家们…

创投课程第四期 | Web3一级市场投资框架的演变及投资人能力框架的构成

协会邀请了来自Zonff Partners的合伙人——Colin,作为VC创投课程第4期的嘉宾,在北京时间12月9日(周六)下午14:00 PM-15:00 PM于蚂蚁链科技产业创新中心进行线下分享,届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《WEB3一级市场投资…

在线学习平台-课程分页、用户管理

用户管理 添加功能增强 新增属性 若依里的用户模块(SysUser)是没有课程这一属性的,要实现我们自己的课程分页查询功能 这个位置传入的实体类SysUser要加上classId,记得加上get、set方法 更改sql语句 ctrl 鼠标左键不断点进去,查看调用位置 加入swagger文档: package com…

华为数通---配置本地端口镜像示例(1:1)

镜像概念 定义 镜像是指将指定源的报文复制一份到目的端口。指定源被称为镜像源,目的端口被称为观察端口,复制的报文被称为镜像报文。 镜像可以在不影响设备对原始报文正常处理的情况下,将其复制一份,并通过观察端口发送给监控…

Day34 贪心03

Day34 贪心03 1005.K次取反后最大化的数组和 先pass

Linux主机自动注册NPS客户端(脚本化)

参考官方对API使用方法的定义:https://ehang-io.github.io/nps/#/ 1、首先必须要在配置文件中开启 auth_key 并配置一个合适的密钥 2、修改脚本中的可变量参数,以适配自己的环境 #!/bin/bash# 脚本名称:npc_create.sh # 编写人:清瞳清 # 编写时间:2023-12-10 # 描述:这…

neuq-acm预备队训练week 8 P4779 【模板】单源最短路径(标准版)

题目背景 题目限制 题目描述 给定一个 n 个点,m 条有向边的带非负权图,请你计算从 s 出发,到每个点的距离。 数据保证你能从 s 出发到任意点。 输入格式 第一行为三个正整数n,m,s。 第二行起 m 行,每行三个非负整数 ui​,vi​…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类,用户只要创建这些类的对象,使用相应的方法,即使不具备有关的网络支持,也可 以编写出高质量的网络…