74HC595芯片单颗与级联的万能代码|2021-09-03

文章目录


前言

74HC595芯片单颗与级联的万能代码


代码

代码如下:

//引脚配置
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);

  /*Configure GPIO pins : PA4 PA5 PA6 */
  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

//引脚定义
#define HC595_DAT_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)	 //串行数据输入
#define HC595_DAT_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) 

#define HC595_ST_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)	//输出锁存器时钟
#define HC595_ST_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET) 

#define HC595_SH_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)	//数据输入时钟
#define HC595_SH_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET) 


uint8_t HC595_SJ[] = {    //定义传输用到的数据,几个芯片就写几组数据
	0X00,				  //芯片一数据
	0X00,				  //芯片二数据
	0X00,				  //芯片三数据
	0X00,				  //芯片四数据
	0X00,				  //芯片五数据
};

void HC595(uint8_t send1)	//HC595传送一个芯片数据,参数1\要传输的数据
{
	uint8_t i;				//定义i变量计算次数
	for (i = 0; i < 8; i++) //小于8就自加
	{
		HC595_SH_OFF;		//拉低数据输入时钟线
		if ((send1 & 0X80)) //数据与0X80取最高位
		{
			HC595_DAT_ON;	//如果数据与0X80为高,就将串行数据输入端拉高
		}
		else				//反之
		{
			HC595_DAT_OFF;	//就将串行数据输入端拉低
		}
		send1 <<= 1;		//数据向左移一位,为下一次传输做准备
		HC595_SH_ON;		拉高数据输入时钟线
	}
}

void HC595_JL(uint8_t *dat, uint8_t len)//595传送多个芯片数据,参数1\准备传输的数据  参数2\有几个芯片
{
	uint8_t i;							//定义i变量计算次数

	for (i = 0; i < len; i++)			//小于len(芯片数)就自加
	{
		HC595(~dat[i]);
		/*
		HC595传送一个芯片数据,数据前面的~是取反,将数据取反,
		例:(例子为例子,可能说反,请以各位实际现象为准)
		数据为dat[]={0X00};   //一组数据
		HC595(dat[i]) 则1为高电平0为低电平,此时输出   0 0 0 0 0 0 0 0    8位低电平
		HC595(~dat[i]) 则0为高电平1为低电平,此时输出  1 1 1 1 1 1 1 1    8位高电平
		*/
	}
	HC595_ST_OFF;						//拉低输出存储器锁存时钟线
	HAL_Delay(1);						//稍微延时
	HC595_ST_ON;						//拉高输出存储器锁存时钟线,进行数据输出显示
}


//最后在主函数调用 HC595_JL(uint8_t *dat, uint8_t len)  此函数即可
//例:  HC595_JL(HC595_SJ, 5);

总结

我怕自己忘记,先发个帖,如有需要请随意使用.
附件:74HC595中文数据手册

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值