嵌入式进阶——数码管

2024-05-26 22:52
文章标签 进阶 嵌入式 数码管

本文主要是介绍嵌入式进阶——数码管,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

    • 数码管结构
    • 移位寄存器
    • 原理图
    • 移位寄存器数据流程
    • 移位寄存器控制流程
    • 移位寄存器串联
    • 实现数码管显示

数码管结构

共阴与共阳
共阳数码管是指将所有发光二极管的阳极接到一起,形成公共阳极(COM)的数码管,共阳数码管在应用的时候,应该将 COM 端口接到正极,当某一段发光二极管的阴极为低电平的时候,相对应的段就点亮,当某一字段的阴极为高电平的时候,相对应段就不亮。
1位数码管
在这里插入图片描述
在这里插入图片描述
2位数码管
在这里插入图片描述
在这里插入图片描述
4位数码管
在这里插入图片描述
在这里插入图片描述

移位寄存器

74HC595 是一款 8 位 CMOS 移位寄存器。8 位并行输出端口为可控的三态输出,一 个串行输入端口,可以实现多级芯片串行控制,组成 8n 位(n 为芯片数量)并行输出 。
优点:通过逻辑操作来控制LED的状态,少量的引脚控制更多的状态。
在这里插入图片描述

原理图

在这里插入图片描述

移位寄存器数据流程

移位寄存器的引脚:

  1. LATCH_CLOCK: 锁存时钟
  2. SHIFT_CLOCK: 移位时钟
  3. A: 数据输入信号管脚
  4. QA~QH: 将二进制数据信号转化为高低电平输出给数码管
  5. SQH: 串行数据输出管脚
    在这里插入图片描述
    上图帮我们认识了几个管脚的作用:
    ● A:数据信号输入
    ● QA~QH: 高低电平输出
    同时再次加深了我们对74HC595功能的理解:将二进制数据转换为高低电平的一个工具。

移位寄存器控制流程

数量流程中,数据变成高低电平过程清楚了。但是数据是给到芯片的,给这个过程是比较讲究的。
也就是我们传统说法,要按照规矩来传递数据。数据传递是要通过协议的。
我们通过 数据输入信号管脚(原理图上标记为A)来输入数据。我们必须清楚的知道,一个引脚给数据,其实就是给高低电平信号,一个高低电平信号只能表示一个bit,而我们又8给输出口,理论上需要给8次高低电平才能满足8个端口的输出要求。但是如何去界定8给高低电平呢,就需要用时间去界定。提供了两个引脚:

  1. LATCH_CLOCK: 锁存时钟引脚
  2. SHIFT_CLOCK: 移位时钟引脚
    在这里插入图片描述
    移位:由低电平变为高电平,表示记录一个位的电平。
    锁存:由低电平变为高电平,表示将记录的数据应用到电路中。

移位寄存器串联

在这里插入图片描述

本案例中是有两个移位寄存器U1和U2的。分别关注两个移位寄存器的A和SQH.
在这里插入图片描述
通过流程我们可以明确以下结论:

  1. 移位寄存器通过A输入数据
  2. 移位寄存器通过SQH输出数据
  3. 两个移位寄存器通过将一个的SQH输出到另外一个的输入A口,两个移位寄存器就串联了
  4. 末端的移位寄存器输出口悬空表示不输出
  5. 数据会传递到末端,也就是数据会先填充的是末端。
    串联后控制流程需要有所改变,改变如下:
    在这里插入图片描述

实现数码管显示

#include "Config.h"
#include "GPIO.h"
#include "Delay.h"#define	NIXIE_DI	P44	// 数据输入
#define	NIXIE_SCK	P42	// 移位寄存器
#define	NIXIE_RCK	P43	// 锁存寄存器void GPIO_config(void) {GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P4, &GPIO_InitStructure);//初始化
}#define GET_BIT_VAL(byte, pos)	(byte & (1 << pos))int main() {char i;u8 a_dat = 0x12;	// 0001 0010	字母位 5.//&1000	0000u8 b_idx = 0x1F;	// 0001 1111	数字位 GPIO_config();// 显示 7.// 0111 1000// 先发字母位 (控制显示的内容)// 8bit,先发出去的会作为高位for(i = 7; i >= 0; i--){ // 0点亮NIXIE_DI = GET_BIT_VAL(a_dat, i);// 寄存器的移位操作NIXIE_SCK = 0;NOP2();NIXIE_SCK = 1;NOP2();}// 再发数字位 (控制显示哪几个)// 1111 1011// 7.7.空7. 7.7.7.7.  -------------------与二级制是反向for(i = 7; i >= 0; i--){ // 只要不是0,就是高电平NIXIE_DI = GET_BIT_VAL(b_idx, i);// 寄存器的移位操作NIXIE_SCK = 0;NOP2();NIXIE_SCK = 1;NOP2();}// 锁存操作NIXIE_RCK = 0;NOP2();NIXIE_RCK = 1;NOP2();while(1) {}
}

这篇关于嵌入式进阶——数码管的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005811

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689