74HC595.c源文件
#include "74HC595.h"
void LED595Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOC , ENABLE);
//Data Pin
// GPIO_InitStructure.GPIO_Pin = LED595_DATA_PIN;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
// GPIO_Init(LED595_DATA_PIN, &GPIO_InitStructure);
//Clk Pin
GPIO_InitStructure.GPIO_Pin = LED595_CLK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED595_CLK_PORT, &GPIO_InitStructure);
//Latch Pin
GPIO_InitStructure.GPIO_Pin = LED595_LATCH_PIN | LED595_DATA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED595_LATCH_PORT, &GPIO_InitStructure);
}
/**
* @brief 将输入的数据输出到74HC595的引脚.
* @param Input 1 byte data.
* @retval None.
**/
void LED595SendData(unsigned char OutData)
{
unsigned char i; //发送数据时做循环使用临时变量
for(i=0; i<8; i++) //将8位数据按位发送,先发送高字节后发送低字节
{
LED595_CLK_RESET;//时钟线低电平
if( (OutData & 0x80) == 0x80)//判断数据高低位
{
LED595_DATA_SET; //数据线高电平
}
else
{
LED595_DATA_RESET; //数据线低电平
}
OutData = OutData << 1; //数据左移1位
LED595_CLK_SET; //时钟线高电平
}
//上升沿输出数据
LED595_LATCH_RESET;
LED595_LATCH_SET;
}
74HC595.h头文件
//74HC595口线定义宏定义.当驱动74HC595引脚改变时,只需更改底层引脚宏定义即可
#ifndef __74HC595_H
#define __74HC595_H
#include "stm32f0xx.h"
//#include "stm32f0xx_gpio.h"
#define LED595_DATA_PORT GPIOC
#define LED595_DATA_PIN GPIO_Pin_8
#define LED595_CLK_PORT GPIOA
#define LED595_CLK_PIN GPIO_Pin_12
#define LED595_LATCH_PORT GPIOC
#define LED595_LATCH_PIN GPIO_Pin_12
//74HC595口线高低电平宏定义
#define LED595_DATA_SET GPIO_SetBits(LED595_DATA_PORT,LED595_DATA_PIN)
#define LED595_DATA_RESET GPIO_ResetBits(LED595_DATA_PORT,LED595_DATA_PIN)
#define LED595_CLK_SET GPIO_SetBits(LED595_CLK_PORT,LED595_CLK_PIN)
#define LED595_CLK_RESET GPIO_ResetBits(LED595_CLK_PORT,LED595_CLK_PIN)
#define LED595_LATCH_SET GPIO_SetBits(LED595_LATCH_PORT,LED595_LATCH_PIN)
#define LED595_LATCH_RESET GPIO_ResetBits(LED595_LATCH_PORT,LED595_LATCH_PIN)
void LED595Init(void);
void LED595SendData(unsigned char OutData);
#endif
main函数调用
LED595SendData(0x00);
Delay_Ms(1000);
LED595SendData(0xff);
Delay_Ms(1000);