17组+图文教程+Arduino中内置的ShiftIn函数与74HC165芯片的配合使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17组+图文教程+Arduino中内置的ShiftIn函数与74HC165芯片的配合使用相关的知识,希望对你有一定的参考价值。

参考技术A 一、ShiftIn()函数

      将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。

        注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。

  shiftIn(dataPin,clockPin,bitOrder)

  dataPin:输出每一位数据的引脚(int)

  clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)

  bitOrder:输出位的顺序,最高位优先或最低位优先

二、74HC165概述

      74HC165是一款高速CMOS器件,74HC165遵循JEDEC标准no.7A。74HC165引脚兼容低功耗肖特基TTL(LSTTL)系列。

      74HC165是8位并行读取或串行输入移位寄存器,可在末级得到互斥的串行输出(Q7和Q7),当并行读取(PL)输入为低时,从D0到D7口输入的并行数据将被异步地读取进寄存器内。而当PL为高时,数据将从DS输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位(Q0→Q1→Q2,等等)。利用这种特性,只要把Q7输出绑定到下一级的DS输入,即可实现并转串扩展。

      74HC165的时钟输入是一个“门控或”结构,允许其中一个输入端作为低有效时钟使能(CE)输入。CP和CE的引脚分配是独立的并且在必要时,为了布线的方便可以互换。只有在CP为高时,才允许CE由低转高。在PL上升沿来临之前,不论是CP还是CE,都应当置高,以防止数据在PL的活动状态发生位移。

      SH/LD为低,并口数据存入8个位寄存器中。8个位寄存器分别为Q0、Q1、Q2、Q3、Q4、Q5、Q6、Q7。此时Q7里已经有值,可以直接读取了所以,逻辑可以是这样:

      读取Q7的数据,然后IN_CLK_LOW;IN_CLK_HIGH;制造一次上升沿,执行移位操作,使Q6的值移位到Q7中。SH/LD为高,允许移位。一个时钟脉冲,QH向外输出一位数据,同时,从SER采集一位数据补充8位寄存器。

        如上级联情况,右边74HC165的SER悬空,采集数据为0。

        左边74HC165,一个脉冲,QH输出一位数据,同时,从SER采集一位数据补充低位。相当于如下:

开始前:

H1-G1-F1-E1-D1-C1-B1-A1H2-G2-F2-E2-D2-C2-B2-A2

开始传输:

1、1G-1F-1E-1D-1C-1B-1A-2H2G-2F-2E-2D-2C-2B-2A-0

2、1F-1E-1D-1C-1B-1A-2H-2G2F-2E-2D-2C-2B-2A-0-0

3、1E-1D-1C-1B-1A-2H-2G-2F2E-2D-2C-2B-2A-0-0-0

        ……

14、B2-A2-0-0-0-0-0-00-0-0-0-0-0-0-0

15、A2-0-0-0-0-0-0-00-0-0-0-0-0-0-0

16、0-0-0-0-0-0-0-00-0-0-0-0-0-0-0

这样,就把2个级联的74HC165的并口数据,全部以串口形式传输给了MCU。

三、实验

//定义你的PIN在哪儿

intlatchPin=8;

intdataPin=9;

intclockPin=7;

// 定义变量来保存数据 //移位寄存器//从一个非零数字开始可以帮助//故障排除byteswitchVar1=72;//01001000

void setup()

//启动串行Serial.begin(9600);

//定义引脚模式pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,INPUT);



void loop()

//将其设置为1以收集并行数据digitalWrite(latchPin,1);

//将其设置为1以收集并行数据,等待

  delayMicroseconds(20);//设置为0以串行传输数据 digitalWrite(latchPin,0);

//移位寄存器为串行模式

  //将每个移位寄存器收集到一个字节

  //附在芯片上的寄存器最先出现。

switchVar1=shiftIn(dataPin,clockPin);

//打印结果

//(7, 6, 5等)将被丢弃 //具有高输入的第一个引脚

Serial.println(switchVar1,BIN);

Serial.println("-------------------");//因此,所有这些引脚都可以跟上 delay(500);



byteshiftIn(intmyDataPin,intmyClockPin)

inti;

inttemp=0;

intpinState;

bytemyDataIn=0;

pinMode(myClockPin,OUTPUT);pinMode(myDataPin,INPUT);  for(i=7;i>=0;i--)



digitalWrite(myClockPin,0);

delayMicroseconds(0.2);

temp=

digitalRead(myDataPin);

if(temp)

pinState=1;

//把比特设置为0

myDataIn=myDataIn|(1<<i);



else

//关掉--只需要调试

pinState=0;



//调试打印语句

//串行打印(PopStand);

//串行打印(“”);

digitalWrite(myClockPin,1);



//调试打印语句空格

  returnmyDataIn;

史上最通俗易懂的Python入门教程,漫画图文生动有趣,一看就会

全网最简单易懂!495页Python漫画教程,高清PDF版开发下载。

今天给那些在学习Python路上有挫折的朋友分享一份《看漫画学Python》,不同的是本书采用漫画的形式,用简单易懂的语言和图片详细解读了Python的每一个知识点。

【文末免费自取PDF】

文档目录

数字类型的数据

函数

常用的内置模块


访问数据库


朋友们如果需要这份完整版的Python学习资料,微信扫描下方CSDN官方认证二维码【免费获取】。

以上是关于17组+图文教程+Arduino中内置的ShiftIn函数与74HC165芯片的配合使用的主要内容,如果未能解决你的问题,请参考以下文章

ANSYS17.0详细安装图文教程

SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

Linux虚拟机下mysql 5.7安装配置方法图文教程

mysql 8.0.17 安装配置方法图文教程

Python安装详细图文教程

Eclipse 图文安装教程