51单片机嵌入式开发:STC89C52操作8八段式数码管原理

news2024/10/6 18:33:25

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

STC89C52操作8八段式数码管原理

  • 1 8位数码管介绍
    • 1.1 8位数码管概述
    • 1.2 8位数码管原理
    • 1.3 应用场景
  • 2 原理图图解
    • 2.1 74HC573原理
    • 2.2 74HC138原理
    • 2.3 数码管原理
  • 3 数码管程序
    • 3.1 点亮一个数码管
    • 3.2 扫描显示数码管
    • 3.3 显示一组数据
    • 3.4 Protues仿真
  • 4 总结


1 8位数码管介绍

1.1 8位数码管概述

8位数码管是一种显示器件,用于显示数字、字母和一些特殊符号。它由8个数码管组成,每个数码管可以显示0到9之间的数字。通过控制每个数码管的亮灭状态,可以组合显示不同的数字或字符。

1.2 8位数码管原理

数码管通常由共阳极或共阴极的LED(发光二极管)组成。在共阳极数码管中,每个数码管的阳极连接在一起,而在共阴极数码管中,每个数码管的阴极连接在一起。通过控制每个数码管的阳极或阴极,可以选择性地点亮其中一个数码管。
以共阳极的8位数码管为例,每个数码管通常由7个LED段(a,b,c,d,e,f,g)和一个小数点(dp)组成。这些段可以按照特定的图案和编码来点亮,以显示数字、字母或符号。

1.3 应用场景

常见的8位数码管编码方式是使用BCD(二进制编码十进制)码或者ASCII码。BCD码是一种二进制表示法,其中每个十进制数字用4位二进制码表示。ASCII码是一种字符编码标准,将每个字符映射到一个唯一的数值。
使用8位数码管,可以显示0到9的数字以及一些字母和符号。每个数码管可以独立显示一个字符,因此可以同时显示8个字符。通过控制每个数码管的亮灭状态和编码,可以实现多种显示效果。

2 原理图图解

根据开发板原理图,找到数码管原理图。

在这里插入图片描述

数码管原理图主要由三部分组成,74HC573、74HC138、数码管,下面分别对三个元器件进行分析。

2.1 74HC573原理

高性能硅门 CMOS 器件 SL74HC573 跟 LS/AL573 的管脚一样。器件的输入是和标准 CMOS 输出兼容 的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。 当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同 步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
×输出能直接接到 CMOS,NMOS 和 TTL 接口上
×操作电压范围:2.0V~6.0V
×低输入电流:1.0uA
×CMOS 器件的高噪声抵抗特性

74HC573逻辑图如下

在这里插入图片描述

根据逻辑图,可以得出功能表,当输出使能为L,锁存功能为H时,输出端口Q状态与输入信号的D状态完全一致,我们选择的也是这种模式,在开发板上,使用跳线帽将“锁存”引脚和VCC5V引脚短接。
在这里插入图片描述

2.2 74HC138原理

特点
• 解复用能力
• 多输入使能,便于扩展
• 存储芯片选择解码的理想选择
• 低电平有效输出互斥输出
• 输出能力:标准
• ICC 类别:微星
概述
74HC/HCT138 是高速硅栅 CMOS 器件,与低功耗肖特基 TTL (LSTTL) 引脚兼容。它们的指定符合 JEDEC 标准第 7A 号。74HC/HCT138解码器接受三个二进制加权地址输入(A0、A1、A2),启用后提供8个互斥的低电平有效输出(Y0至Y7)。“138”具有三个使能输入:两个有效低电平(E1和E2)和一个高电平有效(E3)。除非 E1 和 E2 为低电平且 E3 为高电平,否则每个输出都将为高电平。这种多重使能功能允许将“138”轻松并行扩展到 1-of-32(5 行至 32 行)解码器,只需四个“138”IC 和一个逆变器。“138”可用作八路输出解复用器,方法是使用一个有效的低电平使能输入作为数据输入…

74HC/HCT138期间原理图如下
在这里插入图片描述

在这里插入图片描述

根据逻辑原理图可知,我们使用一个译码器,只需要将E1E2为低电平,E3为高电平,然后A0A1A2输入不同的值,即可在相同值序号的Yn引脚输出低电平。

在这里插入图片描述

在这里插入图片描述

2.3 数码管原理

根据数码管内部的连接方式,所以数码管又分为共阳数码管(低电平点亮)与共阴数码管(高电平点亮),共阳数码管内部是将所有LED的正极接在一起组成的公共端接电源+5V,只需要控制对应的LED负极就可以显示数字, 所以共阳级低电平才能点亮,共阴极与共阳级刚好相反,共阴极数码管内部将LED的负极接在一起形成公共端接地 0V,只需要控制对应的LED正极就能够显示数字,所以共阴极数码管高电平点亮。共阳极数码管与共阴极数码管内部结构如下图所示。
我们开发板上选用的数码管是共阴极数码管,具体理论原理图,如下所示,只需在不同的控制端给定高电平,即可点亮8段式数码管对应的位置,达到显示效果。

在这里插入图片描述

3 数码管程序

3.1 点亮一个数码管

/********************************************************
函数名称:sys_ledtube_on1
函数功能:点亮一个数码管全为亮起来
入口参数:
出口参数:
修    改:
内    容:
********************************************************/
void sys_ledtube_on1(void)
{
	//根据原理图,将P0口全部输出高电平,P2选择0号数码管
	P0=0xFF;//取显示数据,段码
	P2=0;  	//取位码
}

3.2 扫描显示数码管

// 显示段码值01234567,可对应原理图查看显示不同图形对应的引脚高点电平配置状态
unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************
函数名称:sys_ledtube_on2
函数功能:显示一组数据
入口参数:
出口参数:
修    改:
内    容:
********************************************************/
static unsigned char ledtube_cnt = 0;
void sys_ledtube_on2(void)
{
	ledtube_cnt++;
	if(ledtube_cnt>7)
	{
		ledtube_cnt = 0;
	}
	P0 = 0x00;				//防止切换数码管瞬间有虚影出现
	P2 = 0x00;
	P0 = EL[ledtube_cnt];	//取显示数据,段码
	P2 = ledtube_cnt;  		//取位码
	
	//根据人眼适应虚影缓冲时间为50ms左右
	//我们调整delay在500以下可以看到明显的看起来是一串数据一起显示
	delay(50000); 			
}
#ifndef __C51_LEDTUBE_H__
#define __C51_LEDTUBE_H__


extern unsigned char const EL[];

extern void sys_ledtube_on1(void);
extern void sys_ledtube_on2(void);




#endif

主程序中

void main (void)
{
	//8个指示灯的操作
	sys_led();
	sys_led_test();
	sys_led_test1();
	
	sys_ledtube_on1();
	
	//主循环中添加其他需要一直工作的程序
	while (1)
	{
		sys_ledtube_on2();
	}
}

3.3 显示一组数据

/********************************************************
函数名称:sys_ledtube_on2
函数功能:显示一组数据
入口参数:
出口参数:
修    改:
内    容:
********************************************************/
static unsigned char ledtube_cnt = 0;
void sys_ledtube_on2(void)
{
	ledtube_cnt++;
	if(ledtube_cnt>7)
	{
		ledtube_cnt = 0;
	}
	P0 = 0x00;				//防止切换数码管瞬间有虚影出现
	P2 = 0x00;
	P0 = EL[ledtube_cnt];	//取显示数据,段码
	P2 = ledtube_cnt;  		//取位码
	
	//根据人眼适应虚影缓冲时间为50ms左右
	//我们调整delay在500以下可以看到明显的看起来是一串数据一起显示
	delay(100); 			
}

3.4 Protues仿真

Protues仿真图如下所示,注意P0口作为输出控制引脚需要有上拉电阻,不然无法输出高电平。

在这里插入图片描述

4 总结

数码管是一种常见的数字显示设备,广泛应用于各种领域。以下是一些数码管应用市场的例子:

  1. 时钟和计时器:数码管常被用于制造电子时钟、计时器和倒计时器。这些设备可以在办公室、学校、体育场馆、交通信号灯等地方使用。

  2. 家电和电子产品:数码管被广泛应用于家用电器和电子产品中,如微波炉、洗衣机、冰箱、电视机、音响等。数码管可以显示时间、温度、程序设置等信息。

  3. 工业自动化:在工业控制系统中,数码管常用于显示各种参数和状态信息,如温度、压力、流量、速度等。这些信息对于监控和控制工业过程非常重要。

  4. 汽车和交通系统:数码管被广泛应用于汽车仪表盘、导航系统、车载音响等设备中。它们可以显示车速、油量、里程、导航指示等信息。此外,数码管还用于交通信号灯和路牌显示。

  5. 电子游戏和娱乐设备:数码管被用于电子游戏、街机机台、赌场游戏设备等娱乐设备中。它们可以显示得分、计时、游戏状态等信息。

  6. 医疗设备:数码管在医疗设备中也有广泛应用,如医疗监护仪、血糖仪、体温计等。它们可以显示患者的生命体征、测量结果等重要数据。

  7. 通信设备:数码管常用于通信设备的显示屏,如电话、对讲机、路由器等。它们可以显示来电号码、信号强度、网络状态等信息。

这些只是数码管应用市场的一些例子,实际上,数码管在各个领域都有广泛的应用。随着科技的发展,数字显示技术也在不断进步,液晶显示屏等新型显示技术逐渐取代了一部分数码管的应用,但数码管仍然在某些特定场景中保持着重要地位。

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

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

相关文章

QT_GUI

1、QT安装 一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工具。QT有商业版额免费开源版,一般使用免费开源版即可,下面安装的是QT5,因为出来较早,使用较多&…

【前端CSS3】CSS引入方式总结(黑马程序员)

文章目录 一、前言🚀🚀🚀二、CSS引入方式:☀️☀️☀️2.1 内部样式表2.2 行内样式表 三、总结🚀🚀🚀 一、前言🚀🚀🚀 ☀️ 回报不在行动之后,回报…

ETL数据集成丨使用ETLCloud实现MySQL与Greenplum数据同步

我们在进行数据集成时,MySQL和Greenplum是比较常见的两个数据库,我们可以通过ETLCloud数据集成平台,可以快速实现MySQL数据库与数仓数据库(Greenplum)的数据同步。 MySQL数据库: 优点: 轻量级…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 public class GeoFenceUtils {/** geometryFactory */private static final GeometryFactory geometryFactory new GeometryFactory();/*** 判断指定的GPS点是否在电子围栏内** param fencePointsList 包…

上海小程序开发需要进行定制开发吗?

随着互联网技术与移动设备的不断成熟,小程序也已普及到人们日常生活的方方面面。随着企业与互联网联结的愈发深入,小程序的开发可以为企业带来更高效的经营模式,降本增效。那么,上海小程序作为无需安装且开发门槛较低的应用&#…

udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明

最近在测试Syslog udp发送相关功能,测试环境是centos udp头部的数据长度是2个字节,最大传输长度理论上是65535,除去头部这些字节,可以大概的说是64k。 写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo,打…

Three.js机器人与星系动态场景(二):强化三维空间认识

在上篇博客中介绍了如何快速利用react搭建three.js平台,并实现3D模型的可视化。本文将在上一篇的基础上强化坐标系的概念。引入AxesHelper辅助工具,带你快速理解camer、坐标原点、可视区域。 Three.js机器人与星系动态场景:实现3D渲染与交互式…

AMEYA360代理:海凌科60G客流量统计雷达模块 4T4R出入口绊数计数

数字化时代,不管是大型商城还是各种连锁店,客流统计分析都可以帮助企业更加精准地了解顾客需求和消费行为。 海凌科推出一款专用于客流量统计的60G雷达模块,4T4R,可以实时进行固定范围内的人体运动轨迹检测,根据人体的…

使用Python3和Selenium打造百度图片爬虫

开篇 本文的目的在于实现一个用来爬取百度图片的爬虫程序,因该网站不需要登录,所以相对来说较为简单。下面的爬虫程序中我写了比较多的注释,以便于您的理解。 准备 请确保电脑上已经安装了与chrome浏览器版本匹配的chromeDriver,且电脑中已经…

使用 HBuilder X 进行 uniapp 小程序开发遇到的问题合集

文章目录 背景介绍问题集锦1. 在 HBuilderX 点击浏览器运行时,报 uni-app vue3编译器下载失败 安装错误2.在 HBuilderX 点击微信小程序运行时,报 微信开发者工具打开项目失败,请参阅启动日志错误 背景介绍 HBuilder X 版本:HBui…

NoSQL 之 Redis 集群部署

前言: (1)主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用 的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷: 故障…

Elasticsearch备份数据到本地,并导入到新的服务 es 服务中

文章目录 使用elasticsearch-dump工具备份安装node.js(二进制安装)解压设置环境变量安装elasticsearch-dump docker安装使用ES备份文件到本地 使用elasticsearch-dump工具备份 这个工具备份时间比较长 安装node.js(二进制安装) wget https://nodejs.org/dist/v16.18.0/node-…

E1696 无法打开 源 文件 “point.h“

一段时间没碰vs2022突然导入一个项目就出现下面错误 在网上查了很多办法,都没什么有用。 试了试,相对路径可以解决。 但是每次都要用相对路径太麻烦了。 又试了试,发现还是硬件问题,就像摩托长期不开等到突然想开的时候就死活打…

零障碍入门:SSH免密登录与Hadoop生态系统的完美搭档【实训Day02】

一、 SSH免密登录配置 1 生成公钥和秘钥(在hadoop101上) # su star # cd /home/star/.ssh # ssh-keygen -t rsa 2 公钥和私钥 公钥id_rsa.pub 私钥id_rsa 3 将公钥拷贝到目标机器上(在hadoop101上) # ssh-copy-id hadoop101 # ssh-copy-id hadoop102 # ssh-co…

Hi3861 OpenHarmony嵌入式应用入门--TCP Client

本篇使用的是lwip编写tcp客户端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点,并且密码为PARAM_HOTSPOT_PSK。还需要准备一个tcp服务,服务ip为PARAM_SERVER_ADDR宏定义,端口为PARAM_SERVER_PORT宏定义。 修改网络参数 在Hi3861开发板…

[C++][设计模式][访问器]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受1.代码一2.代码二 1.动机 在软件构件过程中,由于需求的变化,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改, 将会给子类带来很繁重的变更负担&#xff0c…

zabbix小白入门:从SNMP配置到图形展示——以IBM服务器为例

作者 乐维社区(forum.lwops.cn)许远 在运维实践中,Zabbix作为一款强大的开源监控工具,被广泛应用于服务器、网络设备和应用程序的监控,成为保障业务连续性和高效运行的关键。然而,对于Zabbix的初学者来说&a…

法国工程师IMT联盟 密码学及其应用 2023年期末考试题

1 在 Unix 下的安全性 (30 分钟) 1.1 问题 1 1.1.1 问题 我们注意constat到通过 SMTP 服务器发送“假”电子邮件(垃圾邮件)相对容易。越来越常见的做法是在 SMTP 连接之上部署dployer TLS 协议protocole(即 SMTPS)。这解决了垃圾…

【IDEA配置一个maven项目(详细操作流程)】

目录 一、安装Maven 1、官网下载maven链接地址:Maven – Download Apache Maven 2、下载完成后,解压到某一路径下。E:\JavaTools\apache-maven-3.9.8为例,实际配置环境变量时以自己安装的路径为准。 二、配置环境变量 1、右键此电脑–&g…

MybatisPlus实现AES加密解密,实现yml配置文件中数据库连接信息如用户名,密码等信息加密解密

1 生成秘钥,使用AES工具生成一个随机秘钥,然后对用户名,密码加密 //数据库用户名和密码加密工具测试类 public class MpDemoApplicationTests {Testvoid contextLoads() {// 数据库用户名和密码String dbUsername"改成你的数据库连接用…