0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

移位寄存器如何获得更多空闲I/O引脚来连接更多传感器

科技观察员 来源:circuitdigest 作者:Abhimanyu Pandit 2022-11-11 17:25 次阅读

嵌入式设计中,微控制器中存在没有足够的I/O引脚的可能性。这可能是由于任何原因造成的,可能是您的应用程序需要多个 LED,或者您想使用多个 7 段显示器,但您的微控制器中没有所需的 I/O 引脚。这里有一个完美的组件,移位寄存器。移位寄存器接受串行数据并提供并行输出。它只需要3 个引脚即可与您的微控制器连接,您将从中获得超过 8 个输出引脚。其中一个流行的移位寄存器是74HC595。它具有8位存储寄存器和8位移位寄存器。

您将向移位寄存器提供串行数据,该数据将被锁存于存储寄存器上,然后存储寄存器将控制 8 个输出。如果您想要更多输出,只需添加另一个移位寄存器。通过级联两个移位寄存器,您将获得额外的 8 个输出,总共 16 位输出。

移位寄存器 74HC595:

这是根据数据表的74HC595的引脚图-

poYBAGNuFSGASRhDAAB-KmQj8tw266.png

HC595 有 16 针;如果我们看到数据表,我们将了解引脚功能-

pYYBAGNuFSKAZvCmAAAgZke23c4151.png

QA至QH,从引脚号1到7和15用作移位寄存器的8位输出,其中引脚14用于接收串行数据。还有关于如何使用其他引脚和利用移位寄存器的其他功能的真值表。

poYBAGNuFSSAZJoTAABgUTLVreU031.png

当我们编写用于连接74HC595的代码时,我们将应用此真值表来获取所需的输出。

所需组件:

PIC16F877A

2个33pF陶瓷盘式电容器

20兆赫晶体

4.7k 电阻

8颗发光二极管

1k 电阻器 -1 个(如果需要每个 LED 上的单独电阻器,则需要 8 个 1k 电阻器)

74HC595 集成电路

5V墙上适配器

PIC 编程环境

面包板和电线

电路图:

poYBAGNuFSmABL6AAADABoxqXwY594.png

在电路图中,我们连接了串行数据引脚;时钟和选通(锁存)引脚分别位于微控制器的RB0,RB1和RB2引脚上。在这里,我们使用一个电阻器用于8个LED。根据真值表,我们通过将74HC595的引脚13接地来启用输出。QH引脚保持打开状态,因为我们不会用它级联另一个74HC595。我们通过将移位寄存器的引脚10与VCC连接来禁用清除输入标志。

晶体振荡器连接在微控制器的 OSC 引脚上。PIC16F877A 没有任何内部振荡器。在本项目中,我们将使用移位注册表从 Q0 到 Q7逐个点亮 lead

我们在面包板中构建了电路-

pYYBAGNuFSyAZplfAACqP0X8dNw273.jpg

代码说明:

文末给出了使用移位寄存器控制LED的完整代码。与往常一样,我们需要在PIC微控制器中设置配置位。

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)

#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)

#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

之后,我们声明了延迟所需的晶体频率和74HC595的引脚声明。

#include

/*

Hardware related definition

*/

#define _XTAL_FREQ 20000000 //Crystal Frequency, used in delay

#define DATA_595 PORTBbits.RB0

#define STROBE_595 PORTBbits.RB1

#define CLK_595 PORTBbits.RB2

接下来我们声明了 system_init() 函数来初始化引脚方向。

void system_init(void){

TRISB = 0x00;

}

我们使用两种不同的函数创建了时钟脉冲和锁存脉冲

/*

*This function will enable the Clock.

*/

void clock(void){

CLK_595 = 1;

__delay_us(500);

CLK_595 = 0;

__delay_us(500);

}

/*

*This function will strobe and enable the output trigger.

*/

void strobe(void){

STROBE_595 = 1;

__delay_us(500);

STROBE_595 = 0;

}

在这两个函数之后,我们声明了data_submit(无符号 int data)函数以向74HC595提交串行数据。

void data_submit(unsigned int data){

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

DATA_595 = (data >> i) & 0x01;

clock();

}

strobe(); // Data finally submitted

}

在此函数中,我们接受 8 位数据并使用两个按位运算符左移和AND运算符发送每个位。我们首先逐个移动数据,并使用带有 0x01 的 AND 运算符找出确切的位是 0 还是 1。每个数据都由时钟脉冲存储,最终数据输出使用锁存器或选通脉冲完成。在此过程中,数据输出将首先是MSB(最高有效位)。

在主函数中,我们提交了二进制文件,并逐个将输出引脚调高。

system_init(); // System getting ready

while(1){

data_submit(0b00000000);

__delay_ms(200);

data_submit(0b10000000);

__delay_ms(200);

data_submit(0b01000000);

__delay_ms(200);

data_submit(0b00100000);

__delay_ms(200);

data_submit(0b00010000);

__delay_ms(200);

data_submit(0b00001000);

__delay_ms(200);

data_submit(0b00000100);

__delay_ms(200);

data_submit(0b00000010);

__delay_ms(200);

data_submit(0b00000001);

__delay_ms(200);

data_submit(0xFF);

__delay_ms(200);

}

return;

}

这就是移位寄存器可用于在任何微控制器中获得更多空闲I/O引脚以连接更多传感器的方式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7714

    浏览量

    152648
  • 传感器
    +关注

    关注

    2557

    文章

    51729

    浏览量

    758817
  • 移位寄存器
    +关注

    关注

    3

    文章

    278

    浏览量

    22435
  • i/o
    i/o
    +关注

    关注

    0

    文章

    33

    浏览量

    4630
收藏 人收藏

    评论

    相关推荐

    集成移位寄存器

    实验七 集成移位寄存器一、 实验目的1、 掌握集成双向移位寄存器74LS95的逻辑功能2、 熟悉集成双向移位寄存器74LS95的管脚排列二、 实验器材实验箱、
    发表于 03-20 17:54 19次下载

    线性移位寄存器

    线性移位寄存器移位寄存器可以构成序列信号发生,其电路结构如下图所示。组合电路从移位寄存器取得信息,产生反馈信号加
    发表于 01-12 14:14 2013次阅读
    线性<b class='flag-5'>移位寄存器</b>

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    发表于 03-08 14:50 1.8w次阅读

    移位寄存器的工作原理是什么?

    移位寄存器的工作原理是什么? 把若干个触发串接起来,就可以构成一个移位寄存器。由4个边沿D 触发构成的4位移位寄存器逻辑电路如图8.8
    发表于 03-08 14:56 4.5w次阅读

    移位寄存器及其应用实验

    一、实验目的 1、了解集成移位寄存器的控制功能。 2、掌握集成移位寄存器的应用。 二、实验原理 移位寄存器的功能是当时钟控制脉冲有效时,寄存器中存储的数码同时顺序向高位(
    发表于 07-16 22:59 22次下载

    寄存器移位寄存器

    寄存器移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

    移位寄存器实验报告_移位寄存器原理

    本文以移位寄存器为中心,主要介绍了移位寄存器的特点、移位寄存器原理。以及详细的说明了移位寄存器实验报告。
    发表于 12-22 14:29 2.9w次阅读
    <b class='flag-5'>移位寄存器</b>实验报告_<b class='flag-5'>移位寄存器</b>原理

    移位寄存器的特点_移位寄存器工作原理

    目前移位寄存器在电路中已经得到普遍使用。本文以移位寄存器为中心。主要介绍了移位寄存器分类、移位寄存器的特点,以及详细的说明了移位寄存器的工作
    发表于 12-22 15:20 5w次阅读
    <b class='flag-5'>移位寄存器</b>的特点_<b class='flag-5'>移位寄存器</b>工作原理

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。本文主要介绍了
    发表于 12-22 15:49 2w次阅读

    移位寄存器的原理

    移位寄存器按照不同的分类方法可以分为不同的类型。 如果按照移位寄存器移位方向来进行分类, 可以分为左移移位寄存器移位寄存器和双向
    发表于 07-15 09:38 7.5w次阅读
    <b class='flag-5'>移位寄存器</b>的原理

    移位寄存器的种类与作用

    移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个
    发表于 07-15 09:52 1.7w次阅读
    <b class='flag-5'>移位寄存器</b>的种类与作用

    移位寄存器的设计与实现

    移位寄存器的功能和电路形式较多,按移位方向分有左移、右移、和双向移位寄存器;按接收数据方式分为串行输入和并行输入;按输出方向分为串行输出和并行输出。
    的头像 发表于 09-06 11:35 4855次阅读

    在LED设计中使用Nexperia移位寄存器以减小尺寸和BOM

    Nexperia逻辑产品组合中的移位寄存器有助于减小使用LED的设计的尺寸和BOM。通过提供I/O扩展,移位寄存器支持使用引脚较少的较便宜的
    的头像 发表于 02-10 10:08 1071次阅读
    在LED设计中使用Nexperia<b class='flag-5'>移位寄存器</b>以减小尺寸和BOM

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一种用于在数字电路中实现数据移位操作的基本电路元件。它由多个触发以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行
    的头像 发表于 01-18 10:52 9694次阅读

    移位寄存器右移是怎么移位

    移位寄存器是一种在数字电路和计算机科学中广泛使用的存储设备,它可以用来存储和传输数据。在移位寄存器中,数据可以通过移位操作实现数据的传输和处理。
    的头像 发表于 07-12 10:14 1969次阅读