74HC595 for STM32 源代碼【worldsing筆記】


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=電源電壓

 

引腳說明

image

符號 引腳 描述

Q0…Q7 8位並行數據輸出,其中Q0為第15腳

GND 第8腳 地

Q7’ 第9腳 串行數據輸出

MR 第10腳 主復位(低電平)

SHCP 第11腳 移位寄存器時鍾輸入

STCP 第12腳 存儲寄存器時鍾輸入

OE 第13腳 輸出有效(低電平)

DS 第14腳 串行數據輸入

VCC 第16腳 電源

 

 

image 

 

注釋

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 源代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM