当前位置: 首页 > news >正文

04 51单片机之数码管显示

文章目录

  • 1、前言
  • 2、数码管
  • 3、单个数码管引脚定义
    • 3-1、单个共阴极
    • 3-2、单个共阳极
    • 3-3、单个数码管引脚定义
  • 4、四位一体数码管引脚定义
    • 4-1、四位一体共阴极数码管
    • 4-2、四位一体共阳极数码管
    • 4-3、四位一体数码管引脚定义
  • 5、数码管原理图
  • 6、C51数组(补充知识点)
  • 7、C51子函数(补充知识点)
  • 8、静态数码管显示
    • 8-1、基础版本
    • 8-2、数码管段码表
    • 8-3、静态数码管显示Plus
    • 8-4、实验现象
  • 9、动态数码管显示
    • 9-1、基础版本
    • 9-2、实验现象
    • 9-3、动态数码管显示(消影)
    • 9-4、实验现象
  • 10、数码管驱动方式


1、前言

在前面的文章中介绍了51单片机之独立按键控制LED状态,今天介绍单片机的数码管,下面将介绍数码管的显示其中包含了动态数码管静态数码管两种。


2、数码管

数码管其实就是由多个发光二极管封装在一起组成“8”字型的器件当分别点亮这些发光二极管时就可以组成不同的数字显示出来。
在这里插入图片描述

Figure1. 数码管

3、单个数码管引脚定义

3-1、单个共阴极

所有LED的阴极连接在一起,通过控制阳极的高电平来点亮对应的段
在这里插入图片描述

Figure2. 单个共阴极数码管

3-2、单个共阳极

所有LED的阳极连接在一起,通过控制阴极的低电平来点亮对应的段

在这里插入图片描述

Figure3. 单个共阳极数码管

3-3、单个数码管引脚定义

数码管通常由7个或8个LED组成,分别对应数字0到9和英文字母A到F等字符的显示方式。每个LED可以看作是一个“像素”,通过点亮不同的LED组合,可以展示不同的字符或图形。

在这里插入图片描述

Figure4. 单个数码管引脚定义

4、四位一体数码管引脚定义

4-1、四位一体共阴极数码管

在这里插入图片描述

Figure5. 四位一体共阴极数码管

4-2、四位一体共阳极数码管

在这里插入图片描述

Figure6. 四位一体共阳极数码管

4-3、四位一体数码管引脚定义

在这里插入图片描述

Figure7. 四位一体数码管引脚定义

举例说明:假设四位一体数码管需要显示数字为()()(1)(),则在Figure6. 四位一体共阴极数码管途中,将DIG3设置为低电平(置0),DIG1、DIG2、DIG4为高点平(置1);然后引脚7、4设置为高点平(置1),其余引脚(11、2、1、10、5、3)设置为低电平(置0)


5、数码管原理图

从下图可以知道8个数码管通过了一个74HC245芯片单片机的P00-P07相连接。74HC138译码器通过P22-P24输出的相对于的电平选择控制哪个具体的数码管。由于3-8译码器是输出低电平有效,则原理图中的四位一体数码管是共阴极连接。74HC245芯片主要是用于数据缓冲功能,其中DIR表述传输方向,若是高电平,则是将Ax的数据传输给Bx;否则,则是将Bx的数据传输给Ax。OE表示使能引脚(低电平有效)。

在这里插入图片描述

Figure8. 数码管原理图

Table1. 3-8译码器输出表(低有效)
C(P2_4)B(P2_3)A(P2_2)YLED
000Y0LED0
001Y1LED1
010Y2LED2
011Y3LED3
100Y4LED4
101Y5LED5
110Y6LED6
111Y7LED7

6、C51数组(补充知识点)

数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据。

int x[3]; //定义一组变量(3个)
int x[]={1,2,3}; //定义一组变量并初始化
x[0] //引用数组的第0个变量
x[1] //引用数组的第1个变量
x[2] //引用数组的第2个变量

引用×[3]时,数组会越界。读出的数值不确定,应避免这种操作。


7、C51子函数(补充知识点)

子函数:将完成某一种功能的程序代码单独抽取出来形成一个不模块在主函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的

void Function(unsigned char x, y)
{}
返回值函数名(形参)
{函数体
}

8、静态数码管显示

8-1、基础版本

在这里插入图片描述

Figure9. 数码管显示数字程序One

#include <REGX52.H>void main()
{unsigned int i = 0;/* Select LED6 to light up. set /Y5. */P2_2 = 1;P2_3 = 0;P2_4 = 1;/* Control LED6 show number(6), set a,c,d,e,f,g. */P0 = 0x7D;while(1){}
}

注意:让LED6的数码管显示数字6,则需要点亮a,c,d,e,f,g等六个端口,则如下图所示:
在这里插入图片描述

Figure10. 数码管显示数字设置

8-2、数码管段码表

Table2. 数码管段码表(0~F)
数字abcdefgdp段码
0111111000x3F
1011000000x06
2110110100x5B
3111100100x4F
4011001100x66
5101101100x6D
6101111100x7D
7111000000x07
8111111100x7F
9111101100x6F
A111011100x77
B001111100x7C
C100111000x39
D011110100x5E
E100111100x79
F100011100x71
None000000000x00

8-3、静态数码管显示Plus

在这里插入图片描述

Figure11. 数码管显示数字程序Plus

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{Nixie(2,4);while(1){}}

8-4、实验现象

在这里插入图片描述

Figure12. 数码管显示数字2(LED7)

9、动态数码管显示

9-1、基础版本

在这里插入图片描述

Figure13. 数码管动态显示数字程序

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-2、实验现象

动态数码管显示


9-3、动态数码管显示(消影)

在这里插入图片描述

Figure14. 数码管动态显示数字程序(消影)

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];DelayMs(1);P0 = 0x00;
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-4、实验现象

动态数码管显示(消影)


10、数码管驱动方式

  1. 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间。
  2. 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可。
    在这里插入图片描述
Figure15. 数码管专用驱动芯片

http://www.dtcms.com/a/288658.html

相关文章:

  • Shell脚本-uniq工具
  • 两个路由器通过不同的网段互联
  • 从TPACK到TPACK - AI:人工智能时代教师知识框架的重构与验证
  • EPLAN 电气制图(十): 继电器控制回路绘制(下)放料、放灰
  • 基于单片机的IC卡门禁系统设计
  • 最大子数组和问题-详解Kadane算法
  • 每日一题7.20
  • OSS文件上传(一):简单上传
  • feignClient 调用详细流程
  • Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
  • 判断一个数是否为质数方法
  • VSCode使用Jupyter完整指南配置机器学习环境
  • c#:TCP服务端管理类
  • 正点原子stm32F407学习笔记10——输入捕获实验
  • 2025 年科技革命时刻表:四大关键节点将如何重塑未来?
  • 内网后渗透攻击过程(实验环境)--3、横向攻击
  • SQL 调优第一步:EXPLAIN 关键字全解析
  • 【已解决】GitHub SSH 连接失败解决方案:Permission Denied (publickey) 错误修复指南
  • [Linux]进程 / PID
  • 30天打牢数模基础-决策树讲解
  • Linux入门篇学习——NFS 服务器的搭建和使用和开发板固件烧录
  • Spring Boot 第一天知识汇总
  • 【Java项目安全基石】登录认证实战:Session/Token/JWT用户校验机制深度解析
  • 相似度计算
  • 「Java案例」利用方法求反素数
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 饱和预测 Saturating Forecasts
  • dynamic_cast的实现原理
  • Beamer-LaTeX学习(教程批注版)【6】
  • Elasticsearch 简化指南:GCP Google Compute Engine
  • GPT-4o mini TTS:领先的文本转语音技术