74HC595是硅結構的CMOS器件, 兼容低電壓TTL電路,遵守JEDEC標准。 74HC595是具有8位移位寄存器和一個存儲器,三態輸出功能。 移位寄存器和存儲器是分別的時鍾。 數據在SHcp(移位寄存器時鍾輸入)的上升沿輸入到移位寄存器中,在STcp(存儲器時鍾輸入)的上升沿輸入到存儲寄存器中去。如果兩個時鍾連在一起,則移位寄存器總是比存儲寄存器早一個脈沖。 移位寄存器有一個串行移位輸入(Ds),和一個串行輸出(Q7’),和一個異步的低電平復位,存儲寄存器有一個並行8位的,具備三態的總線輸出,當使能OE時(為低電平),存儲寄存器的數據輸出到總線。
8位串行輸入/輸出或者並行輸出移位寄存器,具有高阻關斷狀態。三態。
將串行輸入的8位數字,轉變為並行輸出的8位數字,例如控制一個8位數碼管,將不會有閃爍。
特點
8位串行輸入 /8位串行或並行輸出 存儲狀態寄存器,三種狀態
輸出寄存器(三態輸出:就是具有高電平、低電平和高阻抗三種輸出狀態的門電路。)可以直接清除 100MHz的移位頻率
輸出能力
並行輸出,總線驅動; 串行輸出;標准中等規模集成電路
595移位寄存器有一個串行移位輸入(Ds),和一個串行輸出(Q7’),和一個異步的低電平復位,存儲寄存器有一個並行8位的,具備三態的總線輸出,當使能OE時(為低電平),存儲寄存器的數據輸出到總線。
參考數據
Cpd決定動態的能耗,
Pd=Cpd×VCC×f1+∑(CL×VCC^2×f0)
F1=輸入頻率,CL=輸出電容 f0=輸出頻率(MHz) Vcc=電源電壓
引腳說明
符號 引腳 描述
Q0…Q7 8位並行數據輸出,其中Q0為第15腳
GND 第8腳 地
Q7’ 第9腳 串行數據輸出
MR 第10腳 主復位(低電平)
SHCP 第11腳 移位寄存器時鍾輸入
STCP 第12腳 存儲寄存器時鍾輸入
OE 第13腳 輸出有效(低電平)
DS 第14腳 串行數據輸入
VCC 第16腳 電源
注釋
H=高電平狀態
L=低電平狀態
↑=上升沿
↓=下降沿
Z=高阻
NC=無變化
×=無效
當MR為高電平,OE為低電平時,數據在SHCP上升沿進入移位寄存器,在STCP上升沿輸出到並行端口。
74HC595.c
------------------------------------------------------------------------------------------------------------------------------------------------------
#include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "74HC595.h" /* 延時模塊82615468 sp-320-12 * */ static void delay(u32 t) { u32 i; while(t--) for (i = 0; i < 1; i++); } void HC595Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(HC595_CLK_GPIO_CLK | HC595_DATA_GPIO_CLK | HC595_CS_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = HC595_CLK_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(HC595_CLK_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = HC595_DATA_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(HC595_DATA_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = HC595_CS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(HC595_CS_GPIO, &GPIO_InitStructure); HC595_CLK_H(); HC595_DATA_H(); HC595_CS_H(); } void HC595Send(u8 data) { u8 j; for (j = 8; j > 0; j--) { if(data & 0x80) HC595_DATA_H(); else HC595_DATA_L(); HC595_CLK_L(); //上升沿發生移位 delay(1); data <<= 1; HC595_CLK_H(); delay(1); } //HC595Load(); } void HC595Load(void) { HC595_CS_L(); HC595_CS_H(); } /* void LedRowOn(u8 Row7_0, u8 Row15_8, u8 Row16_23,u8 Row31_24) { HC595Send(Row15_8); HC595Send(Row7_0); HC595Send(Row31_24); HC595Send(Row16_23); HC595Load(); } */ void LedRowOut(u32 Data) { HC595Send(Data >> 24); HC595Send(Data >> 16); HC595Send(Data >> 8); HC595Send(Data >> 0); HC595Load(); } //end of file
74HC595.h
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#ifndef __74HC595_H__
#define __74HC595_H__
#define HC595_CLK_PIN GPIO_Pin_6
#define HC595_CLK_GPIO GPIOA
#define HC595_CLK_GPIO_CLK RCC_APB2Periph_GPIOA
#define HC595_CLK_H() GPIOA->BSRR = HC595_CLK_PIN
#define HC595_CLK_L() GPIOA->BRR = HC595_CLK_PIN
#define HC595_CS_PIN GPIO_Pin_7
#define HC595_CS_GPIO GPIOA
#define HC595_CS_GPIO_CLK RCC_APB2Periph_GPIOA
#define HC595_CS_H() GPIOA->BSRR = HC595_CS_PIN
#define HC595_CS_L() GPIOA->BRR = HC595_CS_PIN
#define HC595_DATA_PIN GPIO_Pin_10
#define HC595_DATA_GPIO GPIOE
#define HC595_DATA_GPIO_CLK RCC_APB2Periph_GPIOE
#define HC595_DATA_H() GPIOE->BSRR = HC595_DATA_PIN
#define HC595_DATA_L() GPIOE->BRR = HC595_DATA_PIN
void HC595Send(u8 data);
void HC595Init(void);
void HC595Load(void);
void LedRowOn(u8 Row7_0, u8 Row15_8, u8 Row16_23,u8 Row31_24);
void LedRowOut(u32 Data);
#endif
74HC595 for stm32 源代碼下載