74hc595 订阅
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。 展开全文
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
信息
状态分类
高电平、低电平和高阻抗
类    别
存储器
原    理
8位串行输入、并行输出
中文名
74HC595
功    能
数据存储
结    构
硅结构的CMOS器件
74HC595特点
8位串行输入 /8位串行或并行输出 存储状态寄存器,三种状态74HC595是具有三态输出功能(即具有高电平、低电平和高阻抗三种输出状态)的门电路。输出寄存器可以直接清除。具有100MHz的移位频率。
收起全文
精华内容
下载资源
问答
  • 74HC595

    2019-09-03 21:07:47
    工具:74HC595 8个灯泡 导线 8个电阻 74HC595是一个8位串行输入、并行输出的位移缓存器 引脚说明编辑 74HC595 符号 引脚 描述 Q0–Q7 第15脚,第1-7脚 8位并行数据输出, GND 第8脚 ...

    工具:74HC595 8个灯泡 导线 8个电阻

    74HC595是一个8位串行输入、并行输出的位移缓存器
    引脚说明编辑

    74HC595
    符号 引脚 描述
    Q0–Q7 第15脚,第1-7脚 8位并行数据输出,
    GND 第8脚 地
    Q7’ 第9脚 串行数据输出/
    MR 第10脚 主复位(低电平有效)接5V
    SH_CP 第11脚 数据输入
    ST_CP 第12脚 输出存储器锁存
    OE 第13脚 输出有效(低电平有效) 接GND
    DS 第14脚 串行数据输入VCC第16脚电源

    接线图在这里插入图片描述
    在这里插入图片描述
    代码:
    int DS=9;//资料接数字引脚9
    int SH_CP=7;//大平台接数字引脚7
    int ST_CP=8;//活塞接数字引脚8
    int data[8]={1,1,0,1,1,0,1,0};//定义输入的数据
    void setup() { // put your setup code here, to run once: pinMode(DS,OUTPUT);
    pinMode(SH_CP,OUTPUT);
    pinMode(ST_CP,OUTPUT);
    }
    int inputdata(int i)
    {
    digitalWrite(SH_CP,LOW);
    digitalWrite(DS,i);
    digitalWrite(SH_CP,HIGH);
    }
    void loop()
    { // put your main code here, to run repeatedly: digitalWrite(ST_CP,LOW);//ST应先LOW 即大平台下拉
    for(int i=0;i<8;i++)
    {
    inputdata(data[i]);
    }
    digitalWrite(ST_CP,HIGH);//大平台往上推
    }

    展开全文
  • 74hc595

    2017-09-16 12:53:00
    STM32驱动74hc595代码 #include "bsp_74HC595.h" #define HC595_DS PCout(13)// #define HC595_OE PAout(0)// #define HC595_ST_CP PBout(9)// #define HC595_SH_CP PBout(8)// stat...

    STM32驱动74hc595代码

    #include "bsp_74HC595.h"
    #define HC595_DS 		PCout(13)// 
    #define HC595_OE 		PAout(0)// 
    #define HC595_ST_CP        PBout(9)// 
    #define HC595_SH_CP             PBout(8)// 
    static void HC595_Delay(u32 t)
    {
    	u32 i;
    	while(t--)
    		for (i = 0; i < 1; i++);
    }
    
    
    void HC595_Init(void)
    {
     
     GPIO_InitTypeDef  GPIO_InitStructure; 	
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);	 //
    
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 //
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;		 //IO口速度为10MHz
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    	
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;				 //
     GPIO_Init(GPIOB, &GPIO_InitStructure);
    	
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //
     GPIO_Init(GPIOA, &GPIO_InitStructure);					 //
     HC595_OE		 = 1;
     HC595_DS		 = 1;
     HC595_ST_CP = 1;
     HC595_SH_CP = 1;
     HC595_OE		 = 0;
    }
    void Send595Data(u8 data)
    {
    	u8 i;
    	for (i = 0;i<8;i++)
    	{
    		if ( ((data<<i) & 0x80) == 0x80)
    		{
    			HC595_DS=1;//数据位置位
    		}
    		else
    		{
    			HC595_DS=0;//数据位清零
    		}
    		
    		HC595_SH_CP=0;//需延时至少24NS
    		HC595_Delay(1);
    		HC595_SH_CP=1;
    	}
    	
    	HC595_ST_CP=0;//需延时24NS
    	HC595_Delay(1);
    	HC595_ST_CP=1;
    }
    

      

     

    转载于:https://www.cnblogs.com/prayer521/p/7530940.html

    展开全文
  • 74HC595.pdf74HC595.pdf74HC595.pdf
  • stm32驱动74HC595和74HC165 74hc165采集数据 74HC595驱动继电器工作 此程序配置有多路595和多路165
  • 74HC595】STM32 74HC595驱动程序

    千次阅读 多人点赞 2019-04-18 11:39:21
    以下为.h文件: ...#ifndef __74HC595_H__ #define __74HC595_H__ #include "stm32f10x.h" #define SHCP_GPIO_PORT GPIOA #define SHCP_GPIO_CLK RCC_APB2Periph_GPIOA #define SH...

    以下为.h文件:

    #ifndef __74HC595_H__
    #define __74HC595_H__
    #include "stm32f10x.h"  
    
    
    
     
     
    #define SHCP_GPIO_PORT      GPIOA			              
    #define SHCP_GPIO_CLK 	    RCC_APB2Periph_GPIOA		
    #define SHCP_GPIO_PIN	    GPIO_Pin_1		       
     
    #define STCP_GPIO_PORT      GPIOA		              
    #define STCP_GPIO_CLK 	    RCC_APB2Periph_GPIOA		
    #define STCP_GPIO_PIN	    GPIO_Pin_0		        
     
    #define DS_GPIO_PORT        GPIOB			              
    #define DS_GPIO_CLK 	    RCC_APB2Periph_GPIOB		
    #define DS_GPIO_PIN	    GPIO_Pin_1	
     
    #define HC595_SHCP_Low()      GPIO_ResetBits( SHCP_GPIO_PORT, SHCP_GPIO_PIN )
    #define HC595_SHCP_High()     GPIO_SetBits( SHCP_GPIO_PORT, SHCP_GPIO_PIN )
    #define HC595_STCP_Low()      GPIO_ResetBits( STCP_GPIO_PORT, STCP_GPIO_PIN )
    #define HC595_STCP_High()     GPIO_SetBits( STCP_GPIO_PORT, STCP_GPIO_PIN )
    #define HC595_Data_Low()      GPIO_ResetBits( DS_GPIO_PORT, DS_GPIO_PIN )
    #define HC595_Data_High()     GPIO_SetBits( DS_GPIO_PORT, DS_GPIO_PIN )
     
     
    void HC595_GPIO_Config(void);
    void HC595_Send_Byte(u8 byte);
    void HC595_CS(void);
    void HC595_Send_Multi_Byte(u8 *data, u16 len);
    
    
    #endif
    

    以下为.c文件:

    #include "stm32f10x.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_gpio.h"
    
    #include "74HC595.h"
    void delay(uint16_t t);
     
     
    /********  74HC595 GPIO 配置 *************************/
    void HC595_GPIO_Config(void)
    {		
    		GPIO_InitTypeDef GPIO_InitStructure;
    		RCC_APB2PeriphClockCmd( SHCP_GPIO_CLK | STCP_GPIO_CLK | DS_GPIO_CLK, ENABLE);
    			
    		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
    		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	
    		GPIO_InitStructure.GPIO_Pin = SHCP_GPIO_PIN;
    		GPIO_Init(SHCP_GPIO_PORT, &GPIO_InitStructure);   // 初始化 SHCP 引脚
    	
    		GPIO_InitStructure.GPIO_Pin = STCP_GPIO_PIN;
    		GPIO_Init(STCP_GPIO_PORT, &GPIO_InitStructure);   // 初始化 STCP 引脚
    	
    		GPIO_InitStructure.GPIO_Pin = DS_GPIO_PIN;
    		GPIO_Init(DS_GPIO_PORT, &GPIO_InitStructure);     // 初始化 DS   引脚
     
    		GPIO_ResetBits(SHCP_GPIO_PORT, SHCP_GPIO_PIN);      // 引脚初始状态为高,便于产生上升沿
    		GPIO_ResetBits(STCP_GPIO_PORT, STCP_GPIO_PIN);	 
    		GPIO_ResetBits(DS_GPIO_PORT, DS_GPIO_PIN);
    }
     
     
    /***
     *74HC595 发送一个字节 
     *即往74HC595的DS引脚发送一个字节
    */
    void HC595_Send_Byte(u8 byte)
    {
    	u8 i;
    	for (i = 0; i < 8; i ++)  //一个字节8位,传输8次,一次一位,循环8次,刚好移完8位
    	{
    	  /****  步骤1:将数据传到DS引脚    ****/
    		if (byte & 0x80)        //先传输高位,通过与运算判断第八是否为1
    			HC595_Data_High();    //如果第八位是1,则与 595 DS连接的引脚输出高电平
    		else                    //否则输出低电平
    			HC595_Data_Low();
    		
    		/*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/
    		HC595_SHCP_Low();   // SHCP拉低
    		delay(1);           // 适当延时
    		HC595_SHCP_High();  // SHCP拉高, SHCP产生上升沿
    		delay(1);
    		
    		byte <<= 1;		// 左移一位,将低位往高位移,通过	if (byte & 0x80)判断低位是否为1
    	}
    }
     
    /**
     *74HC595输出锁存 使能 
    **/
    void HC595_CS(void) 
    {
    	/**  步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器  **/
    	HC595_STCP_Low();   // 将STCP拉低
    	delay(1);           // 适当延时
    	HC595_STCP_High();  // 再将STCP拉高,STCP即可产生一个上升沿
    	delay(1);
    }
     
    /**
     *发送多个字节
     *便于级联时数据的发送
     *级联N级,就需要发送N个字节控制HC595
    ***/
    void HC595_Send_Multi_Byte(u8 *data, u16 len)
    {
    	u8 i;
    	for (i = 0; i < len; i ++ ) // len 个字节
    	{
    		HC595_Send_Byte(data[i]);
    	}
    	
    	HC595_CS(); //先把所有字节发送完,再使能输出
    }
     
    void delay(uint16_t t)
    {
    	for (; t != 0; t --);
    
    }
    

    关于HC595_Send_Multi_Byte函数的使用要根据实际的硬件情况来,以下为一个例子,可以参考一下:

     

    程序中的相关数据:

    
    u8 Led_Buf[2] = {0xff, 0xff}; //存储要发送的指令字节,也就是灯的状态	 Led_Buf[0]控制灯6-10;Led_Buf[1]控制灯1-5
    u8 Led_All_Off[2] = {0xff, 0xff}; //LED灯全灭
    u8 Led_All_On[2] = {0x00, 0x00}; //LED灯全亮
    
    
    HC595_Send_Multi_Byte(Led_All_On,2);//10路灯全开
    HC595_Send_Multi_Byte(Led_All_Off,2);//10路灯全关

    实现流水灯效果:

    /******************************************************    
     *流水灯程序
    *******************************************************/
    void LED_ShowOneToOne(void)	
    {
    		u8 pos; // led位置	
    		u8 Led_Show[2] = {0xff, 0xff}; //存储要发送的指令字节,		Led_Show[0]控制灯6-10;		Led_Show[1]控制灯1-5
    			//第X个led亮	:1     2    3      4    5    	
    		u8 Waterfall_Led[20] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef,  //控制第一级74HC595
    					0xff, 0xff, 0xff, 0xff, 0xff,  
    			//第X个led亮	:6     7    8      9    10  	
    					0xff, 0xff, 0xff, 0xff, 0xff,  //控制第二级74HC595
    					0xfe, 0xfd, 0xfb, 0xf7, 0xef };
    		for (pos = 0; pos < 10; pos ++) 				//第pos个灯,实现流水灯效果
    		{					
    			Led_Show[1] = Waterfall_Led[pos];			//存放第一级74HC595数据,因为先进先出,所以第一级放在Led_Pos_Buf[1],而不是Led_Pos_Buf[0]
    			Led_Show[0] = Waterfall_Led[pos+10]; 	//存放第二级74HC595的数据					
    			HC595_Send_Multi_Byte(Led_Show,2);		//将当前数据发送到595	 
    			delay_ms(500);		
    		}	
    }

     

    展开全文
  • 利用74hc154和74hc595构成的16*64点阵,有仿真电路,大家可以试试,很不错的资源 利用74hc154和74hc595构成的16*64点阵,有仿真电路,大家可以试试,很不错的资源
  • 74HC595秒懂

    万次阅读 多人点赞 2018-02-02 21:55:30
    Arduino学习过程中很多童鞋都对74HC595表示晦涩难懂,今天我就来整理一下基本功能,让童鞋们呢能快速上手! 74HC595是一个8位串行输入、并行输出的位移缓存器。 其本质就是串行输入(一个端口 输入)、并行输出(8个...

      Arduino学习过程中很多童鞋都对74HC595表示晦涩难懂,今天我就来整理一下基本功能,让童鞋们呢能快速上手!

      74HC595是一个8位串行输入、并行输出的位移缓存器。
      其本质就是行输(一个端口 输入)、行输(8个端口 输出)。
           
                                   引脚图
      

    74HC595共有16个引脚,按照逆时针顺序排列。(74HC595有凹陷处,可以很快区分引脚。)

    先来一张引脚功能图(百度到的),让大家先了解一下引脚的功能,然后用自己的理解来解释。

    自我理解:

     

    • VCC(16引脚)接Arduino5V,GND(8引脚)接ArduinoGND,没什么可说的。
    • Q0-Q7 是8位并行输出引脚。
    • DS(Data Serial) 是串行数据输入引脚,595数据来源口,一次只能输入一个位,连续输入8次,就积攒为一个字节。(通过此引脚输入数据有专用的函数shiftOut)
    • SH_CP(Shift register ClockPin)移位寄存器时钟引脚  控制移位动作 高电平触发,做一次移位

      一次移位过程过程:SH_CP LOW;

                                     DS x(0/1);

                                     SH_CP HIGH;                                                                                                                       

    • 当DS有数据输入,且Sh_CP为高电平,则触发一次移位过程。 

    •  ST_CP 并行输出控制开关   高电平触发。

    • OE 输出有效(低电平触发)--默认接GND,若接到5V上,Q0-Q7输出都是0。

    • MR 复位开关-低电平有效(默认接到GND)  

    • Q7’串行输出引脚 (若输入位数比8多,则通过此引脚连接下一个74HC595,作为下一个的DS(极连),两个595的SH_CP 和ST_CP 连接,连接方式如下图,程序中两个shiftOut就可以了。)                                                                                                          

     summary      
     因为串行转并行        需要DS和Q0-Q7
    因为移位(串入)      需要SH_CP

         因为并行输出             需要ST_CP         

    假如我们要输出11011101=221,此时就需要用一个函数shiftOut(DS,Sh_CP,MSBFIRST,221)

    int latchPin=5;
    int clockPin=4;
    int dataPin=2;//这里定义了那三个脚
    void setup()
    {
      pinMode(latchPin,OUTPUT);
      pinMode(clockPin,OUTPUT);
      pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
    }
    void loop()
    {
       for(int a=0;a<=256;a++)//这个循环的意思是让a这个变量+1一直加到到256,每次循环都进行下面的活动
      {
           digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
           shiftOut(dataPin,clockPin,MSBFIRST,a);
           /*这个就是用MSBFIRST参数让0-7个针脚以高电平输出(LSBFIRST 低电平)是dataPin的参数,
           clockPin的参数是变量a*/
           digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
           delay(500); //暂停1秒钟让你看到效果
    }
    }

     

    最后,向大家推荐一个讲解74HC595视频,对大家绝对有用哦!!!

    点击打开链接




     
     
    展开全文
  • 74HC595数码管+STM32.rar

    2019-09-24 18:18:27
    74HC595数码管74HC595数码管74HC595数码管74HC595数码管74HC595数码管
  • 74HC595.rar

    2019-10-28 20:13:07
    stm32c8t6引脚少,想做光立方玩,硬件资源不够,就使用74HC595,作引脚扩展挺方便的,74HC595的数据手册,以及stm32的简单驱动代码都在里面,需要的可以下载看看
  • m74hc595.pdf

    2020-12-25 17:07:41
    m74hc595.pdf
  • #机智云( esp8266)与74hc595控制16路继电器说明:使用74hc595编码器增加8266的io口功能,从而只要利用3个io就可以16路的继电器。简单介绍:74HC595:74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态...
  • 74hc595和74hc138的级联程序,用于io口的拓展
  • 本文首先介绍了74ls595和74hc595区别,其次阐述了74ls595的工作原理、引脚图及功能、逻辑功能、电路图,最后介绍了74ls595引脚图及功能、应用电路图,具体的跟随小编一起来了解一下。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 932
精华内容 372
关键字:

74hc595