STM32F0 74HC595驱动程序

本文介绍了一种使用STM32微控制器对74HC595移位寄存器进行初始化的方法。通过定义GPIO端口和引脚,设置工作频率,并配置输出模式来实现对74HC595的有效控制。此外,还提供了输出CLK信号、锁存信号、数据信号及写入8位数据的具体函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 。74HC595 初始化

#define GPIO_SEG_595CS_PIN GPIO_Pin_9 //
#define GPIO_SEG_595CS_PORT GPIOA //
#define GPIO_SEG_595CLK_PIN GPIO_Pin_10 //
#define GPIO_SEG_595CLK_PORT GPIOA //
#define GPIO_SEG_595DATA_PIN GPIO_Pin_1 //Pin14 ,data
#define GPIO_SEG_595DATA_PORT GPIOB //

static void __Init595Gpio(void) 
{
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_StructInit(&GPIO_InitStructure);
	
		RCC_AHBPeriphClockCmd(SEG_595CS_RCC, ENABLE);
		RCC_AHBPeriphClockCmd(SEG_595CLK_RCC, ENABLE);
		RCC_AHBPeriphClockCmd(SEG_595DATA_RCC, ENABLE);
		
    // segoutput
		// 74HC595 segment cs
    GPIO_InitStructure.GPIO_Pin = GPIO_SEG_595CS_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
		GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_Init(GPIO_SEG_595CS_PORT, &GPIO_InitStructure);
	
		//74hc595 segment clk
    GPIO_InitStructure.GPIO_Pin = GPIO_SEG_595CLK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
		GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_Init(GPIO_SEG_595CLK_PORT, &GPIO_InitStructure);
		//74hc595 segment data
    GPIO_InitStructure.GPIO_Pin = GPIO_SEG_595DATA_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
		GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;		
    GPIO_Init(GPIO_SEG_595DATA_PORT, &GPIO_InitStructure);
		//digit out	
		//segment
		GPIO_SetBits(GPIO_SEG_595CS_PORT, GPIO_SEG_595CS_PIN );
		GPIO_SetBits(GPIO_SEG_595CLK_PORT, GPIO_SEG_595CLK_PIN );
		GPIO_SetBits(GPIO_SEG_595DATA_PORT, GPIO_SEG_595DATA_PIN );
		// digit 	
}
2。初始化74hc595信号脚
void	Init595(void)
{
	__Init595Gpio();
	__SegOut595CS(1);
//	__DigOut595CS(1);
}
``
3。输出clk信号
static void __SegOut595Clk(uint8_t bEnable) 
{
    GPIO_WriteBit(GPIO_SEG_595CLK_PORT, GPIO_SEG_595CLK_PIN, (BitAction)bEnable );
}
4。输出锁存信号
static void __SegOut595CS(uint8_t bEnable) 
{
    GPIO_WriteBit(GPIO_SEG_595CS_PORT, GPIO_SEG_595CS_PIN, (BitAction)bEnable );
}
5。输出数据信号
static void __SegOut595Data(uint8_t bEnable) 
{
    GPIO_WriteBit(GPIO_SEG_595DATA_PORT, GPIO_SEG_595DATA_PIN, (BitAction)bEnable );
}
6。 数据锁存
void	Output595Load(void)
{
//	__SegOut595CS(1);
	__SegOut595CS(0);
	__SegOut595CS(1);			
}
7。写8bit 数据到74hc595
void	SegWrite595(unsigned char iOutData1)
{
	unsigned char i;
	unsigned char bFlag;
	for(i=0;i<8;i++)
	{
		if(iOutData1&0x80)
		{
			bFlag=1;	
		}
		else
		{
			bFlag=0;
		}
		iOutData1=iOutData1<<1;
		__SegOut595Data(bFlag);
		__nop();
		__nop();
		__nop();
		__nop();		
		__SegOut595Clk(0);
		__nop();
		__nop();
		__nop();
		__nop();		
		__SegOut595Clk(1);	
		__nop();
		__nop();
		__nop();
		__nop();	}	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值