【单片机】【数码管】数码管显示

2023-11-01

 

1. 数码管的显示器及其接口

单片机系统中 常用的显示器有: 发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器。本文主要是关于LED显示器的说明。

LED显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5x8、8x8点阵等)。

LED数码管根据接法可以分为共阴和共阳。

如下图中,左边是共阴接法,右边是共阳接法。共阴表示8个led的阴极接到一起,共阳是8个led的阳极接到一起。

显示数字或字符时需要编码。如果是共阴接法,那么a/b/c/d/e/f/g/dp为高电平时对应的led就会亮,编码0~F分别是:

2. 数码管静态显示原理

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入依次字形码后,显示字形可一直保持,知道送入新字形码为止,这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

如下为proteus仿真静态数码管,共阳极,显示0.


typedef unsigned char u8;

// code保存数据到寄存器中 共阴极码表 
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

#define LCDP1	P1
void show_LCD_static_P1()
{
	LCDP1 = (~segment[0])&0x7f;  // 共阳极显示
	while(1){}
}

 3. 数码管动态显示原理

动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。点亮数码管采用动态扫描显示。松台扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以选择限流电阻时应该略小于静态显示电路中的。

4. 操作实践

如下是普中51-单核-A2板子上的数码管模块原理图,可以看到,右上有8个数码管用来显示字符,这8个数码管一端分别与LED1~LED8连接,另一端与P0口连接,所以通过控制P0口来显示我们需要的字符;LED1~LED8通过74HC138译码器与P2^2、P2^3、P2^4连接,这三个IO口控制是哪一个LED可以显示。

静态数码管显示,第一个数码管显示字符F

sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0

typedef unsigned char u8;

// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

void show_LCD_static()
{
	// LED1显示字符F
	P22 = 1;
	P23 = 1;
	P24 = 1;
	P0 =  segment[15];
	while(1){}
}

显示结果:

动态数码管显示,从第一个数码管开始依次显示0,1,2,3,4,5,6,7

#include "LCD.h"
#include "reg51.h"
#include "delay.h"

sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0

typedef unsigned char u8;

// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

void show_P0_0()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)
		{
			case 0:
				P22 = 1; P23 = 1; P24 = 1; break;
			case 1:
				P22 = 0; P23 = 1; P24 = 1; break;
			case 2:
				P22 = 1; P23 = 0; P24 = 1; break;
			case 3:
				P22 = 0; P23 = 0; P24 = 1; break;
			case 4:
				P22 = 1; P23 = 1; P24 = 0; break;
			case 5:
				P22 = 0; P23 = 1; P24 = 0; break;
			case 6:
				P22 = 1; P23 = 0; P24 = 0; break;
			case 7:
				P22 = 0; P23 = 0; P24 = 0; break;		
		}
		P0 = segment[i];
		delay_ms(500);  // delay.h中的延时函数
		P0 = 0;

	}
}

显示结果:

上图的连接中左边的数码管1对应的是74HC138的15pin,即Y0,也就是74HC138的ABC都是0的时候输出对应的是Y0,正好对应的是代码中P22=P23=P24=0时,显示7.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【单片机】【数码管】数码管显示 的相关文章

  • ibatis的批量增删改

    1 Ibatis的批量添加
  • Multi-Thread Life

    最近一段时间的工作比较有趣 翻译Datasheet 代码调试和讲解 说白了就是写教程 目前已经写好了串口 LCD的驱动讲解 虽然是裸机驱动 无需与OS打交道 但也算得上是驱动开发了吧 so 放弃了开发一个CE驱动的计划 手头的定时器篇马上就
  • python3使用smtplib发送邮件,带xlsx附件

    一 概述 最近在做一个统计报表 需要发送邮件 并带附件的 在之前的文章中 https www cnblogs com xiao987334176 p 10022026 html 已经实现了发送邮件 但是没有实现发送附件功能 二 正式代码 u
  • Android Treble架构学习

    自Android 8 0以来 Google引入了Treble架构 希望对vendor和system分区进行解耦处理 说句不好听的就是aosp soc odm oem 都分开各搞各的 哈哈 期待实现 system进程不加载vendor共享库
  • 【python】详解collections模块中OrderedDict的使用

    很多人认为python中的字典是无序的 因为它是按照hash来存储的 但是python中有个模块collections 英文 收集 集合 里面自带了一个子类OrderedDict 实现了对字典对象中元素的排序 import collecti

随机推荐

  • 亲密关系-【关键对话】-有哪些决定关系的重要议题?

    爱的感觉不来自任何顿悟或哲思 来自日常生活中一场又一场深度沟通 案例 老婆很喜欢一个脱口秀演员 但我非常讨厌 问题怎么解决 重点不在于如何解决这个问题 重点在于 这为什么是个问题 当我们不沟通家庭时间分配问题 某一次加班带来的时间挤占就会成
  • it信息技术草稿

    信息技术介绍 信息技术行业组成 相关职位 深度学习中的泛化之谜如下 为什么使用梯度下降 GD 训练的过度参数化神经网络在真实数据集上泛化得很好 即使它们能够拟合大小相当的随机数据集 此外 在所有适合训练数据的解决方案中 GD 如何找到一个泛
  • STM32F103时钟配置流程

    一般情况下单片机的时钟配置是单片机程序中的第一步 也是很重要的一步 这时候我们需要考虑以下几个问题 1 系统时钟的时钟源用哪个 2 系统时钟频率要多少 3 每个模块的时钟频率要多少 4 如果外部时钟出了问题 这个时候时钟是怎么运行的 下面就
  • 特征工程——归一化处理不适用情况

    哪些机器学习算法不需要做归一化 Normalization 处理 概率模型不需要归一化 因为它们不关心变量的值 而是关心变量的分布和变量之间的条件概率 如决策树 随机森林rf 而像AdaBoost svm Ir KNN KMeans之类的最
  • C++ 模板模板参数

    C 模板模板参数 1 模板模板参数 C 模板的使用一共有以下几种情况 函数模板 类模板 模板参数 成员模板 而本篇介绍模板模板参数 模板参数就是模板的参数 我们一般指定为T类型 实际上可以使用任何的名字 例如指定一个Foo的模板参数 tem
  • 元宇宙浪潮震撼来袭,抓住时机,齐心协力

    互联网诞生至今 世界已与网络互联共生 Z世代 1995 2009年间出生的一代人 对互联网的依赖不同于前辈 他们不再局限于视觉 听觉的网络传播互动 也不仅是通过互联网把视觉 听觉 嗅觉 味觉 触觉相结合 而是互联网的原住民 他们的大部分生活
  • 微信小程序上传头像和昵称持久化保存

    微信小程序上传头像和昵称持久化保存 1 持久化步骤 因为通过微信头像昵称填写功能获取到头像是一个临时头像 这个url只能一段时间内在微信访问 并且无法在公网访问这个url 所以非常有必要把这个url转成我么实际可用的头像到数据库中 让头像持
  • 弹性布局一排为三个时,在循环中最后一排异常

    解决
  • 单件模板

    ifndef FILE HELPER H define FILE HELPER H class FileHelper public FileHelper FileHelper static FileHelper getInstance st
  • redis 网络模型全面解密

    导言 在目前的技术选型中 Redis 俨然已经成为了系统高性能缓存方案的事实标准 因此现在 Redis 也成为了后端开发的基本技能树之一 Redis 的底层原理也顺理成章地成为了必须学习的知识 Redis 从本质上来讲是一个网络服务器 而对
  • 【经典】zheng项目搭建

    一 项目简介 17年初就接触了zheng这个项目 感觉挺牛的 看他的架构图就知道了 现在都已经18年了 时间好快 特此记录下zheng的环境搭建 虽然 先看下码云上zheng的简介吧 https gitee com shuzheng zhe
  • C# 获取namespace的方法

    获取当前class的namespace this GetType Namespace
  • QT_PCAN

    利用Qt做PCAN的二次开发 https www qter org portal php mod view aid 5472 Qt Using PeakCAN Plugin https doc qt io qt 5 qtserialbus
  • AVR单片机使用printf的方法

    1 开发环境 开发平台 ICCAVR 7 22 AVR单片机型号 ATMEGA64 仿真平台 protues7 模拟串口软件 Launch Virtual Serial Port Driver Pro 2 程序编写 要想在AVR单片机中使用
  • Python Pool类多进程 apply_async 异步变成了阻塞解决方法

    出错代码 if name main ip arr get ip list pool Pool processes 4 for temp in ip arr res pool apply async check ip temp get if
  • Linux 查看进程和线程CPU和内存占用情况

    文章目录 Linux 查看进程有哪些线程 Linux 查看程序内存占用情况 top和free等命令 Linux 查看进程 线程数量 Linux 查看进程有哪些线程 linux 下查看进程内的线程有哪些 首先通过进程名称 假设为SensorD
  • c 编程 常犯的错误,隐藏性很高,而且很致命

    1 申请内存 1 1 内存大小错误 比如 申请一块存放8个unsigned int 数据的内存空间 错误 malloc 8 正确 malloc 8 sizeof unsigned int 注解 malloc申请内存 是以字节为单位的 所以当
  • 结构体定义和使用

    收获一 结构体的定义和使用 struct stu char name 姓名 int num 学号 char sex 性别 float score 成绩 struct stu stu1 stu2 stu 就像一个 模板 定义出来的变量都具有相
  • 使用openssl的md5库

    在linux机器上 有一个命令可以计算出文件的md5值 那就是md5sum 如果没有的话 就需要安装RPM包 coreutils 现在我们使用openssl的库也可以方便的计算出文件的md5值 主要用到的函数是 int MD5 Init M
  • 【单片机】【数码管】数码管显示

    1 数码管的显示器及其接口 单片机系统中 常用的显示器有 发光二极管LED显示器 液晶LCD显示器 TFT液晶显示器 本文主要是关于LED显示器的说明 LED显示器有两种显示结构 段显示 7段 米字型等 和点阵显示 5x8 8x8点阵等 L