51单片机数码管显示

news/2024/11/20 15:33:00/

文章目录

  • 前言
  • 一、数码管简介
  • 二、数码管原理图
  • 三、数码管显示原理
  • 四、静态数码管代表编写
  • 五、动态数码管
  • 总结

前言

这篇文章将介绍数码管的显示其中包含了动态数码管和静态数码管两种。

一、数码管简介

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

二、数码管原理图

下图我们可以知道8个数码管通过了一个74HC245芯片和单片机的P01-P07相连接。
74HC138译码器通过P22-P24输出的相对于的电平选择控制哪个具体的数码管。
在这里插入图片描述
74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
这样我们就可以只通过3个引脚就可以选择控制8个数码管了。
下面是74138译码器的真值表,当P22-P24都输出0时就选择了第一个数码管,P22为1时P23-P24输出0时选择第二个数码管,以此类推。看不懂的同学建议去看看数字电路的知识。
在这里插入图片描述

三、数码管显示原理

一个数码管就是由8个LED组成的想要实现对应的数字或者字母那么就去点亮对应的LED灯即可。
比如想要显示数字0那么就熄灭LED g和LED dp,其他的数码管都分别点亮起来这里就能得到想要显示的数字0。
这样的话我们能得到一个二进制数:0011 1111,这个二进制数就代表了熄灭LED g和LED dp,这里LED灯为高电平点亮。这个二进制数转为16进制数就是0x3f。
当要显示0时将0x3f赋值给P0即可。
P0 = 0x3f(显示数字0)
这个0x3f被称为段码,因为数码管就是由8个LED段组成的。
在这里插入图片描述
这里给出其他数字的段码显示:

//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

四、静态数码管代表编写

#include <reg52.h>//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void main()
{	P0=gsmg_code[0];//将数组第1个数据赋值给数码管段选口//显示数字0while(1){}		
}

五、动态数码管

动态数码管的原理就是利用了人眼的识别比较弱识别不到数码管的快速变换而达到的。
代码实现:
我们在while1里面不断的去扫描这8个数码管将对应的数据显示到数码管上面,这样我们的人眼就认为数码管可以做到分别显示不同的数值了。

#include <reg52.h>//共阴极数码管断码
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义数码管位选信号控制脚
//74138的三个输入引脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;/*延时函数
单位:ms
x:延时的数值
*/
void delayms(unsigned int x)
{unsigned char i;while(x--){for(i=0;i<113;i++);}
}/*
数码管显示函数
pos:在第几位显示
dat:要显示的数据
*/
void select_display(unsigned char pos, unsigned char dat)
{switch(pos)//位选(选择在第几个位置显示 原理参照74138的真值表){case 0: LSC=1;LSB=1;LSA=1;break;case 1: LSC=1;LSB=1;LSA=0;break;case 2: LSC=1;LSB=0;LSA=1;break;case 3: LSC=1;LSB=0;LSA=0;break;case 4: LSC=0;LSB=1;LSA=1;break;case 5: LSC=0;LSB=1;LSA=0;break;case 6: LSC=0;LSB=0;LSA=1;break;case 7: LSC=0;LSB=0;LSA=0;break;}P0 = gsmg_code[dat];delayms(1);//等待数据显示稳定P0 = 0x00;//消影
}void main()
{while(1){select_display(0, 0);select_display(1, 1);select_display(2, 2);select_display(3, 3);select_display(4, 4);select_display(5, 5);select_display(6, 6);select_display(7, 7);}
}

总结

其实数码管就是8个LED灯组成的,只要我们会二进制和16进制的转换那么数码管就是不难的。
这里需要提一点的就是动态数码管需要记得消影处理,不进行消影处理将会导致数码管显示重影。


http://www.ppmy.cn/news/18764.html

相关文章

SpringCloud+Ribbon 报错:java.net.unknownhostexception:XXX

SpringCloudRibbon 报错&#xff1a;java.net.unknownhostexception:XXX 问题分析&#xff1a; 网上很多的说法是依赖冲突导致&#xff0c;原因是什么呢&#xff1a;如果你的org.springframework.cloud:spring-cloud-starter-netflix-eureka-client 依赖中包含了ribbon依赖&…

学习记录667@项目管理之项目人力资源管理

什么是项目人力资源管理 项目人力资源管理包括编制人力资源管理计划、组建项目团队、建设项目团队与管理项目团队的各个过程&#xff0c;不但要求充分发挥参与项目的个人的作用&#xff0c;还包括充分发挥所有与项目有关的人员-----项目负责人、客户、为项目做出贡献的个人及其…

Linux下进程以及相关概念理解

目录 一、进程概念 二、描述进程PCB 三、查看进程 3.1 通过系统目录查看 3.2 通过ps命令查看 四、进程状态 运行状态R 睡眠状态S 磁盘休眠状态D 暂停状态T 僵尸状态Z 死亡状态X 五、僵尸进程与孤儿进程 5.1 僵尸进程 5.1.1 僵尸进程的概念 5.1.2 僵尸进程的危害…

PowerShell 执行策略

在使用 SAPIEN 的PowerShell Studio时出现如下错误&#xff1a;无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 ERROR: 所在位置 行:1 字符: 2 ERROR: …

34.Isaac教程--操作示例应用程序

操作示例应用程序 ISAAC教程合集地址文章目录操作示例应用程序与 Jupyter Notebook 的简单联合控制Shuffle Box with Simulator与 Jupyter Notebook 的简单联合控制 此示例使用 Jupyter Notebook 提供交互式联合控制。 这是处理用于操作组件&#xff08;包括 LQR 规划器&#…

文件没学懂没关系,我来教你快速学会文件

1. 什么是文件 文件通常是在磁盘或固态上的一段已经命名的存储区。C把文件看作是一系列连续的字节&#xff0c;每个字节都被单独读取。 在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09; 1.…

【MySQL】第九部分 MySQL信息函数

【MySQL】第九部分 MySQL信息函数 文章目录【MySQL】第九部分 MySQL信息函数9. MySQL信息函数总结9. MySQL信息函数 MySQL中内置了一些可以查询MySQL信息的函数&#xff0c;这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。 函数用法VERSION()返回当前…

LINUX学习之管道和重定向(十)

输入/输出流控制 在Linux系统中, 执行一个shell命令通常会自动打开三个标准文件, 分别是标准输入文件、标准输出文件和标准错误输出文件。进程将从标准输入文件得到输入数据&#xff0c;将正常输出数据输出到标准输出文件&#xff0c;而将错误信息送到标准错误文件 如下表格所…