74HC595D介绍与实现(C语言与verilog实现) 您所在的位置:网站首页 74HC595芯片内部-锁存器工作原理 74HC595D介绍与实现(C语言与verilog实现)

74HC595D介绍与实现(C语言与verilog实现)

2024-07-12 05:15| 来源: 网络整理| 查看: 265

1.特性

8位串行输入

8位可串行或并行输出

具有3种状态输出的存储寄存器

具有复位功能的移位寄存器

具有串行输入(DS)和串行输出(Q7S)来级联的功能。

移位寄存器和存储寄存器的时钟可分开控制。

2.引脚说明

引脚名引脚号说明Q0、Q1、Q2、Q3、Q4、Q5、Q6、Q715,1,2,3,4,5,6,7并行数据输出Q7S9串行数据输出MR10主复位引脚,为0时复位移位寄存器SHCP11移位寄存器时钟输入,上升沿时DS上的数据会移入移位寄存器STCP12存储寄存器时钟输入,上升沿时移位寄存器的数据传输到存储寄存器OE13输出使能,为0时,存储器中的数据并行输出到Q0-Q7引脚;为1时,输出为高阻态DS14串行数据输入 3.逻辑与时序操作 3.1 逻辑操作

由上图可看出,8位以为寄存由DS、SHCP、MR这三个引脚控制,8位存储寄存器有STCP引脚控制,而输出由OE引脚控制。Q7S引脚控制级联。数据先经过移位寄存器,再锁存到存储寄存器中,最后在OE引脚为低时数据并行输出。

3.2 时序操作

由3.1的逻辑图和上图结合可看出:

驱动74HC595主要控制SHCP、DS、STCP、MR、OE这5个引脚,可把MR引脚拉高不复位移位寄存器、OE引脚拉低一直输出,这样实际控制的引脚只有3个。

DS引脚上的数据在SHCP处于上升沿时写入到移位寄存器;

DS引脚先送高位再送低位,如写入二进制数据10110111,则最先写入1到Q1上,再写入0,则Q0上的1被挤到Q1,Q0上的数据变为0,以此类推。最后移位寄存器上Q7-Q0的数据为10110111;

MR引脚为低时清空移位寄存器中的数据;

当写入的数据超过8位时,最先写入的数据会经过Q7S引脚输出,如写入数据10110111,此时再写入一位数据0,则Q7上的数据1会被挤到Q7S上,Q6的数据挤到Q7上,以此类推,Q0补上新写入的数据0,此时Q7~Q0的数据为01101110;

当STCP引脚处于上升沿时,移位寄存器上的8位数据将一次性锁存到存储寄存器中;

OE引脚为低电平时,存储寄存器上的数据会输出到并出输出引脚(Q0-Q7)上。为高电平时,并行输出引脚(Q0-Q7)则为高阻态

img

4.级联

使用级联功能时,所有的74HC595D的第10、11、12引脚全部连接到主控芯片的引脚上,U27的第9引脚连接到U26的第14引脚上,形成级联功能;13引脚接地,使得595芯片一直输出。

级联的数据由U27的14引脚输入,当写入的数据超过8位时,最先写入的数据会通过第9引脚输出到U26的14引脚,写入到U26的移位寄存器中。

img

5.C语言实现 5.1 引脚初始化

主控芯片:STM32F103RCT6

使用到的引脚PB4->STCP、PB5->MR、PB6->SHCP、PB7->DS,全部配置成通用推挽输出,需要注意的是由于使用到PB4引脚,PB4默认启用时不是普通引脚,是JTAG的复用功能-NJTRST,因此需要关闭JTAG-DP,启用SW-DP需要增加以下两行代码

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); void HC595_init() { GPIO_InitTypeDef GPIO_InitStructure;   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); ​   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_Init(GPIOB, &GPIO_InitStructure);   GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7);//拉低   GPIO_SetBits(GPIOB,GPIO_Pin_5);//MR一直为高,不复位移位寄存器 } ​ 5.2 发送数据 /* *发送数据,没有级联时,len设为1,有级联时,len为级联数 */ ​ void HC595_send_data(u8 *data,u16 len) { u8 i,j; u8 temp; for(i = 0;i < len;i++) { temp = data[i]; for(j = 0;j < 8;j++) { if(temp & 0x80)//先发送高位 GPIO_SetBits(GPIOB,GPIO_Pin_7); else GPIO_ResetBits(GPIOB,GPIO_Pin_7); GPIO_ResetBits(GPIOB,GPIO_Pin_6); delay(2); GPIO_SetBits(GPIOB,GPIO_Pin_6);//SHCP为上升沿时写入数据 delay(2); temp


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有