基于STM32F0xx单片机的74HC595驱动程序


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);

猜你喜欢

转载自blog.csdn.net/qq_37449342/article/details/102910300