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

用74HC595芯片就可做一个SPI组件

                                                        图1 在面包板上做实验

        现在稍微复杂一点的组件多数采用某种总线与Arduino板通信,以便让Arduino挂接更多的组件。因此,如果我们要进一步学习Arduino,就必须掌握常见的几种总线。现在组件总线很多,最常见的是I2C(Inter-Integrated Circuit,芯片间总线,缩写也写作IIC),我们前面有好几篇文章介绍过。I2C的优势很多,缺点是速率较低。如果需要高速率交换信息,譬如各种存储芯片、视频等,就得改用SPI(Serial Peripheral Interface,串行外设接口)总线。总线不是高不可攀的东西。用一个74HC595芯片就可以做一个SPI组件,与Arduino板连接。通过用74HC595自制SPI总线,我们就能更深入地了解SPI总线的工作机理。

        74HC595是8位串入并出的位移缓存器,三态输出,可级联。它可以直接连SPI总线,接收来自SPI的串行数据,转换成并行数据。因此,也可用来扩展数字输出口。

        实验只需要一个74HC595芯片和一个8位电平指示器。

        图2是74HC595与Arduino的连接。74HC595的/OE(13)是使能,电平拉低时芯片才工作,因此必须接Gnd。/MR(10)是主复位,为低电平时,存储数据被清空,因此必须接Vcc。DS(14)是串行数据输入,接Arduino的D11数字口。STCP(12)是存储寄存器时钟输入,接Arduino的D8。SHCP(11)是移位寄存器的时钟输入,接Arduino的D12。

                                                图2 74HC595与Arduino的连接

        下面是代码。你要在Arduino项目里使用SPI总线,必须先接入SPI库。SPI库是内置的,逐级点选菜单栏“Sketch|装入库|SPI”,即可连接上SPI库。Q0~Q7是平行输出,分别接8位电平指示器的D0~D7。Q7S是串行输出,供级联用的。如果你想用SPI总线扩展16个数字输出口,你就用两个74HC595,这个Q7S接下一个74HC595的DS端。如果是单个74HC595,这个Q7S就空置。

#include

#define LatchPin 8  //STCP

#define ClockPin 12 //SHCP

#define DataPin 11  //DS

//LED状态显示的变量

char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void setup() {

    pinMode(LatchPin, OUTPUT);

    pinMode(ClockPin, OUTPUT);

    pinMode(DataPin, OUTPUT);

}

void loop() {

    for(int i = 0; i < 8; i++)

    {

        digitalWrite(LatchPin, LOW);

        shiftOut(DataPin, ClockPin, MSBFIRST, table[i]);

        digitalWrite(LatchPin, HIGH);

        delay(500);

    }

}

        本来需要8个LED、8个限流电阻做8位指示,后来买到了8位指示组件,只有一元一个,就做了这个实验。74HC595是一元10只,因此,实验成本只有1.40元。可开始LED不亮。测试发现,这个8位指示组件是共阳的,公共端应该接Vcc,而不是接Gnd。这样,输入低电平时,LED才点亮。为此,上面的“char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};”改成了“char table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};”。也就是说,送8位电平指示器的是反码。这个好,顺便对反码也有了感性认识。

http://www.xdnf.cn/news/72109.html

相关文章:

  • 【内容摘要】大模型内容摘要实战 会议摘要 提示词技巧
  • 【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法
  • oracle rac时区问题导致远程查询时间不准
  • 从洗衣房到国学课堂:海信冰箱发起跨越千里的山区助学行动
  • 2024年TETCI SCI2区:增强差分进化麻雀搜索算法DSSADE,深度解析+性能实测
  • AI日报 - 2024年04月22日
  • 【Vue】修饰符
  • 进行ecovadis认证有哪些优势?百胜咨询:专业ecovadis认证辅导机构
  • 安全挑战再升级,2025都有哪些备份与恢复挑战?
  • 开箱即用:一款带世界时钟简约好用在线时间戳转换工具源码
  • 【Linux】:UDP协议
  • C++中的未定义详解
  • 在C++业务类和QML之间创建一个数据桥梁
  • 机器视觉lcd屏增光片贴合应用
  • 什么是Manus,国内用户如何订阅Manus
  • FR806HA小板烧录固件
  • Vue.js进阶实践:串行请求管理与优雅中断方案
  • 内核是如何接收网络包的
  • CountAnything 如何驱动木材行业自动库存管理转型
  • 示波器探头状态诊断与维护技术指南
  • 牛行为-目标检测数据集(包括VOC格式、YOLO格式)
  • aws服务(一)S3介绍使用代码集成
  • 薪技术|0到1学会性能测试第19课-参数化技术之导入数据
  • 【第16届蓝桥杯软件赛】CB组第一次省赛
  • 高防服务器适合哪些行业使用
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 地图可视化新范式:山海鲸如何让地理数据活起来
  • 火语言RPA--Ftp上传目录
  • 大模型基础
  • rk3588上完成halcon的形状模型配准以及和opencv的图像转换