【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为STM32F103系列

74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。

现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下:

 

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)_第1张图片

只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下:

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)_第2张图片

要求完成功能:实现数码管显示456,如何实现?

首先需要熟悉74LS595芯片的工作原理:

到这里就可以完成代码了:

代码完成分为标准库和HAL库

接线表设计:

模块数码管 STM32的IO口 设置的功能
SER PA1

GPIO_Mode_Out_PP

(推挽输出)

RCLK PA2

GPIO_Mode_Out_PP

(推挽输出)

SCK PA3

GPIO_Mode_Out_PP

(推挽输出)

1.标准库实现

/****************************************
函数名称:void STM3210B_SEG_Init(void)
函数参数:无参
函数返回值:无
函数功能:IO的基本配置初始化
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/

void STM3210B_SEG_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
		
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

}


/****************************************
函数名称:void SEG_DisplayValue(u8 value1, u8 value2, u8 value3)
函数参数:
		u8 value1:取值范围为0-16 如输入0-9则显示0-9  如输入10-15,显示就是a-f,如输入16则表示数码管灭(不亮)
		u8 value2:取值范围为0-16 如输入0-9则显示0-9  如输入10-15,显示就是a-f,如输入16则表示数码管灭(不亮)
		u8 value3:取值范围为0-16 如输入0-9则显示0-9  如输入10-15,显示就是a-f,如输入16则表示数码管灭(不亮)
函数返回值:无
函数功能:数码管显示
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
void SEG_DisplayValue(u8 value1, u8 value2, u8 value3)
{
	u8 i = 0;	//
	u8 code_tmp = 0;

	code_tmp = Seg[value3];
	for(i=0;i<8;i++){

		if(code_tmp & 0x80){
			SER_H;
		}else{
			SER_L;
		}
		SCK_H;
		code_tmp = code_tmp << 1;   
		SCK_L;
	}
	
	code_tmp = Seg[value2];
	for(i=0;i<8;i++){

		if(code_tmp & 0x80){
			SER_H;
		}else{
			SER_L;
		}
		SCK_H;
		code_tmp = code_tmp << 1;   
		SCK_L;
	}	
	
	code_tmp = Seg[value1];
	for(i=0;i<8;i++){

		if(code_tmp & 0x80){
			SER_H;
		}else{
			SER_L;
		}
		SCK_H;
		code_tmp = code_tmp << 1;   
		SCK_L;
	}		
	RCLK_H;
	RCLK_L;
}

 

2.HAL库实现

 

                                                                         【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)_第3张图片

 

实现效果:

                                                       【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)_第4张图片

 

需要的可以留言,我发给你,互相学习共同进步!!!!

代码实现链接:STM32实现595驱动三个数码管源码(标准库和HAL库实现)-电信文档类资源-CSDN下载

你可能感兴趣的:(单片机c语言,STM32,74LS595,74HC595,数码管,串行转并行)