当前位置: 首页 > 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)是数据库中的预先计算结果的存储。它们是由一个或多个基础表的聚合数据组成的,这…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...