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

51单片机学习笔记7 串转并操作方法

51单片机学习笔记7 串转并操作方法

  • 一、串转并操作简介
  • 二、74HC595介绍
    • 1. **功能**:
    • 2. **引脚**:
    • 3. **工作原理**:
    • 4. 开发板原理图
      • (1)8*8 LED点阵:
      • (2)74HC595 串转并:
  • 三、代码示例
    • 1. LED 滚动显示程序
      • (1)led_matrix_utils.c
      • (2)main.c
    • 2. 显示一个点
    • 3. 显示字符程序
      • (1) led_matrix_utils.c
      • (2)main.c

在这里插入图片描述

一、串转并操作简介

由于单片机的I/O资源有限,在进行一些外围设备通讯时,如LED点阵、数码管操作,需要大量的I/O资源,为了减少单片机的资源占用,可以使用串转并的操作,通过引入专用芯片,用较少的单片机I/O引脚,控制大量的外围I/O引脚设备。

在串转并操作中,串行数据首先经过一个串行转并行转换器,该转换器将串行数据拆分为多个并行数据。
这些并行数据同时传输到并行数据接收器,每个并行数据接收器负责接收并处理其中的一部分数据。
最后,这些处理后的并行数据再通过并行数据输出端口一起输出,形成并行数据流。

二、74HC595介绍

74HC595是一种串行输入/并行输出(SIPO)移位寄存器,常用于扩展微控制器的输出端口:

1. 功能

  • 74HC595具有8位并行输出端口,可以同时控制8个输出设备,如LED、数码管等。
  • 它具有串行输入端口,可以通过串行输入将数据加载到内部寄存器中。
  • 74HC595还具有控制引脚,用于控制数据的加载和输出使能。
  • 74HC595的并行输出为三态输出:高电平、低电平

2. 引脚

在这里插入图片描述

  • DS(串行数据输入):用于接收串行输入数据。
  • SH_CP(时钟输入):用于接收时钟脉冲,控制数据的移位。
  • ST_CP(存储时钟输入):用于接收存储时钟脉冲,控制数据的加载到寄存器中。
  • OE(输出使能):用于控制输出端口的使能状态。
  • Q7’(串行输出):输出从DS端输入的数据,用于级联多个74HC595。
  • Q0-Q7(并行输出):8位并行输出端口。

其中Q7’可以级联下一个74HC595,这样通过3个单片机的IO口,可以控制更多的外设IO。

3. 工作原理

  • 74HC595的工作过程分为两个阶段:移位阶段和存储阶段。
  • 移位阶段:在时钟信号的作用下,串行输入的数据从DS端依次移位到寄存器中。
  • 存储阶段:当存储时钟信号触发时,寄存器中的数据被加载到并行输出端口,并同时输出到外部设备。

4. 开发板原理图

(1)8*8 LED点阵:

在这里插入图片描述

  • 通过P0 端口控制列是否有效,设置P0=0,可以启用全部列。
  • 通过 DPa~DPh控制每一行是否有效,行的数值通过 74HC595传过来。

(2)74HC595 串转并:

在这里插入图片描述
传送一个数据的过程:

  1. OE 置低使能芯片;
  2. SER传一个BIT数据;
  3. 给SR_CLK 一个上升沿,将SER的数据移到QA;
  4. 重复第2步,更多数据移入寄存器,先移入的数据放入A,其它B、C、D…依次向后移动;
  5. 传完8个bit数据,给 R_CLK一个上升沿,将数据推到DPn的并口输出。

三、代码示例

1. LED 滚动显示程序

本代码实验现象是: LED 点阵从最下行向上,每次滚动显示一行。
显示到第一行后,改从最右列向左,每次滚动显示一列。

(1)led_matrix_utils.c

#include "led_matrix_utils.h"
#include "common_utils.h"// 时钟输入引脚,用于控制数据的移位操作
sbit SR_CLK = P3^6;
// 数据数据推到输出寄存器的引脚
sbit R_CLK = P3^5;
// 串行数据输入
sbit SER = P3^4;u8 gc595_buf[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};// 低电平有效,开启列
#define LED_MATRIX_PORT P0void hc595_show_data(u8 show_data)
{u8 i = 0;for (i = 0; i < 8; i++){SER = show_data >> 7 ;show_data <<= 1;// 移位寄存器时钟上升沿,进行移位操作SR_CLK = 0;delay_10us(1);SR_CLK = 1;delay_10us(1);}// 输出寄存器时钟上升沿,将移位寄存器的数据复制到输出寄存器R_CLK = 0;delay_10us(1);R_CLK = 1;delay_10us(1);
}
void hc595_show_row(void){u8 i=0;LED_MATRIX_PORT = 0;for(i=0;i<8;i++){hc595_show_data(0x00);hc595_show_data(gc595_buf[i]);delay_ms(500);}
}
void hc595_show_column(void){u8 i=0;hc595_show_data(0xFF);for(i=0;i<8;i++){LED_MATRIX_PORT = ~gc595_buf[i];delay_ms(500);}
}

(2)main.c

#include <reg52.h>
#include "led_utils.h"
#include "common_utils.h"
#include "led_matrix_utils.h"/**
* @brief 主函数
*/
main()
{// 关闭所有ledled_all_off();while(1){hc595_show_row();hc595_show_column();}
}

2. 显示一个点

void hc595_show_point(u8 x, u8 y){// 把 LED_MATRIX_PORT 对应的x位置设置为0x = 8-x;y = 8-y;LED_MATRIX_PORT = ~(0x01 << x);hc595_show_data(gc595_buf[x]);delay_ms(1000);
}

3. 显示字符程序

(1) led_matrix_utils.c

#include "led_matrix_utils.h"
#include "common_utils.h"
#include <reg52.h>// 时钟输入引脚,用于控制数据的移位操作
sbit SR_CLK = P3^6;
// 数据数据推到输出寄存器的引脚
sbit R_CLK = P3^5;
// 串行数据输入
sbit SER = P3^4;u8 gled_column[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};// 低电平有效,开启列
#define LED_MATRIX_PORT P0void led_matrix_init(void){LED_MATRIX_PORT = 0x00;
}
void hc595_show_data(u8 show_data)
{u8 i = 0;for (i = 0; i < 8; i++){SER = show_data >> 7 ;show_data <<= 1;// 移位寄存器时钟上升沿,进行移位操作SR_CLK = 0;delay_10us(1);SR_CLK = 1;}// 输出寄存器时钟上升沿,将移位寄存器的数据复制到输出寄存器R_CLK = 0;delay_10us(1);R_CLK = 1;
}
void hc595_show_char(u8* gled_row){u8 i =0;for(i=0;i<8;i++){LED_MATRIX_PORT = gled_column[i];hc595_show_data(gled_row[i]);delay_10us(280);hc595_show_data(0x00);}
}

(2)main.c

#include <reg52.h>
#include "led_utils.h"
#include "common_utils.h"
#include "led_matrix_utils.h"
#include "types.h"
// 数据0
u8 gled_row[8] = {0x00, 0x7c, 0x82, 0x82, 0x82, 0x7c, 0x00, 0x00};
/**
* @brief 主函数
*/
main()
{// 关闭所有ledled_all_off();led_matrix_init();while(1){hc595_show_char(gled_row);}
}

本文开源地址:https://gitee.com/xundh/learn51

相关文章:

51单片机学习笔记7 串转并操作方法

51单片机学习笔记7 串转并操作方法 一、串转并操作简介二、74HC595介绍1. **功能**&#xff1a;2. **引脚**&#xff1a;3. **工作原理**&#xff1a;4. 开发板原理图&#xff08;1&#xff09;8*8 LED点阵&#xff1a;&#xff08;2&#xff09;74HC595 串转并&#xff1a; 三…...

微服务cloud--抱团取暖吗 netflix很多停更了

抱团只会卷&#xff0c;卷卷也挺好的 DDD 高内聚 低耦合 服务间不要有业务交叉 通过接口调用 分解技术实现的复杂性&#xff0c;围绕业务概念构建领域模型&#xff1b;边界划分 业务中台&#xff1a; 数据中台&#xff1a; 技术中台&#xff1a; 核心组件 eureka&#x…...

牛客笔试|美团2024春招第一场【测试方向】

第一题&#xff1a;小美的数组询问 小美拿到了一个由正整数组成的数组&#xff0c;但其中有一些元素是未知的&#xff08;用 0 来表示&#xff09;。 现在小美想知道&#xff0c;如果那些未知的元素在区间 [l, r] 范围内随机取值的话&#xff0c;数组所有元素之和的最小值和最大…...

Docker搭建LNMP环境实战(一):前言

缘起&#xff1a;不久前学习了Docker相关知识&#xff0c;并在Docker环境下学习了LNMP环境的搭建。由于网上的文章大多没有翔实、可行的案例&#xff0c;很多文章都是断章取义&#xff0c;所以&#xff0c;期间踩了太多太多的坑&#xff0c;初学者想要真正顺利地搭建一套环境起…...

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…...

界面控件DevExpress ASP.NET Ribbon组件 - 完美复刻Office 365体验!

无论用户是喜欢传统工具栏菜单外观、样式&#xff0c;还是想在下一个项目中复制Office 365 web UI&#xff0c;DevExpress ASP.NET都提供了所需要的工具&#xff0c;帮助用户打造更好的应用程序界面。 P.S&#xff1a;DevExpress ASP.NET Web Forms Controls拥有针对Web表单&a…...

vue2【详解】mixins —— 抽离公共逻辑

mixins 用于在 Vue 中便捷复用变量、方法、组件引用、生命周期等 使用方法 创建文件myMixin.js export const myMixin {data() {return {webName: 朝阳的博客}},created() {alert(欢迎来到${this.webName})},methods: {hi() {alert(欢迎来到${this.webName})}} }vue文件中引入…...

ArrayList的常用方法

ArrayList是Java中常用的动态数组类&#xff0c;它提供了一系列用于操作和管理数组的方法。下面是一些ArrayList常用方法的介绍&#xff1a; add()方法&#xff1a;向ArrayList中添加元素&#xff0c;可以指定位置添加元素或者在末尾添加元素。 ArrayList<String> list …...

ES-Hadoop:将Elasticsearch与Hadoop无缝集成的开源工具

hadoop 大数据技术之Hive&#xff08;3&#xff09;PyHive pyhdfs ES,Elasticsearch https://zhuanlan.zhihu.com/p/595505475?utm_id0 Hadoop hdfs 、hive、spark https://blog.51cto.com/u_16099278/6901638 ES-Hadoop&#xff1a;将Elasticsearch与Hadoop无缝集成的开源工…...

质量模型、软件测试流程和测试用例

质量模型 衡量一个优秀软件的维度 可以从功能性、性能、兼容性、易用性、安全、可靠性、可维护性、可移植性这几个方面去做软件测试&#xff0c;但咱们在正常测试中一般是选取前五项进行测试 测试流程 1、需求评审&#xff1a;确保各部门对需求的理解一致 2、测试计划编写&a…...

集简云新增“文本语音转换”功能,实现智能语音交互

为丰富人工智能领域的应用集成&#xff0c;为用户提供更便捷和智能化的信息获取和视觉创作方式&#xff0c;本周集简云上线了内置应用—文本语音转换。目前支持OpenAI TTS和TTS HD模型&#xff0c;实现文本语音高效智能转换&#xff0c;也可根据你的产品或品牌创建独特的神经网…...

图像处理领域专业术语

图像处理中的一些常见术语&#xff0c;涵盖了从基础概念到高级处理技术的各个方面。 以下是一些图像处理领域常用的专业术语及其解释&#xff1a; 像素&#xff08;Pixel&#xff09;&#xff1a; 图像的最基本单元&#xff0c;每个像素都有一个或多个与其关联的数值&#xff0…...

Microsoft Edge 中的 Internet Explorer 模式解决ie禁止跳转到edge问题

作为网工&#xff0c;网络中存在很老的设备只能用ie浏览器访问打开&#xff0c;但是win10后打开Internet Explorer 会强制跳转到Edge 浏览器&#xff0c;且有人反馈不会关&#xff0c;为此找到了微软官方的Microsoft Edge 中的 Internet Explorer 模式&#xff0c;可以直接在Mi…...

理清大数据技术与架构

大数据并不是一个系统软件&#xff0c;更不是一个单一的软件&#xff0c;它实际上是一种技术体系、一种数据处理方法&#xff0c;甚至可以说是一个服务平台。在这个技术体系中&#xff0c;涵盖了许多不同的部件&#xff0c;比如Hadoop服务平台。这一服务平台可以根据具体情况自…...

小白DB补全计划Day2-LeetCode:SQL基本操作selectJOIN

链接&#xff1a;1683. 无效的推文 - 力扣&#xff08;LeetCode&#xff09;1378. 使用唯一标识码替换员工ID - 力扣&#xff08;LeetCode&#xff09;1068. 产品销售分析 I - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 1683 # Write your MySQL quer…...

【Node.js从基础到高级运用】十五、单元测试与集成测试

引言 在Node.js开发过程中&#xff0c;测试是确保代码质量和功能正确性的关键步骤。单元测试和集成测试是最常见的测试类型。下面我们将使用Jest框架来进行测试。 单元测试 单元测试是指对软件中的最小可测试单元进行检查和验证。在Node.js中&#xff0c;这通常指的是函数或者…...

哈工大sse C语言 困难

Q565.(10分数, 语言: C)程序中函数 fun()的功能: 将一个由八进制数字字符组成的字符串转换为与其值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。 **输入格式要求&#xff1a;gets 提示信息&#xff1a;"输入一个八进制字符串&#xff08;5位&…...

力扣● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 与496.下一个更大元素 I的不同是要循环地搜索元素的下一个更大的数。那么主要是对于遍历结束后&#xff0c;单调栈里面剩下的那些元素。 如果直接把两个数组拼接在一起&#xff0c;然后使用单调栈求下一个最大值就可以。 代码实现的话&#xff0c;不用直…...

Java中的包装类

Java中的包装类 一、包装类是什么&#xff1f;二、对应关系&#xff1a;三、举例说明&#xff1a;Integer构造器&#xff1a;包装类特有的机制&#xff1a;自动装箱 自动拆箱常用方法 总结 一、包装类是什么&#xff1f; 以前定义变量&#xff0c;经常使用基本数据类型&#x…...

实时数仓的另一种构建方法starRocks的物化视图

一、 StarRocks是什么 StarRocks是一个分布式的、高性能的OLAP(联机分析处理)数据库,物化视图在StarRocks中具有重要作用。 二、 StarRocks物化视图能干啥 物化视图(Materialized Views)是数据库中的预先计算结果的存储。它们是由一个或多个基础表的聚合数据组成的,这…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...