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

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

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

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

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

3.2 扫描显示数码管

c 复制代码
// 显示段码值01234567,可对应原理图查看显示不同图形对应的引脚高点电平配置状态
unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
c 复制代码
/********************************************************
函数名称: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); 			
}
c 复制代码
#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

主程序中

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

3.3 显示一组数据

c 复制代码
/********************************************************
函数名称: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. 通信设备:数码管常用于通信设备的显示屏,如电话、对讲机、路由器等。它们可以显示来电号码、信号强度、网络状态等信息。

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

相关推荐
闲晨13 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
scan15 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
DARLING Zero two♡5 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Qingniu016 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
QAQ小菜鸟6 小时前
一、初识C语言(1)
c语言
何曾参静谧6 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
互联网打工人no16 小时前
每日一题——第一百二十一题
c语言
深圳市青牛科技实业有限公司7 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
朱一头zcy8 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋8 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法