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

Posted xiaocaidayong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32学习(29)STM32实现595驱动三个数码管(标准库和HAL库实现)相关的知识,希望对你有一定的参考价值。

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

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

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

 

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

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

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

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

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

接线表设计:

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

GPIO_Mode_Out_PP

(推挽输出)

RCLKPA2

GPIO_Mode_Out_PP

(推挽输出)

SCKPA3

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实现595驱动三个数码管源码(标准库和HAL库实现)-电信文档类资源-CSDN下载

以上是关于STM32学习(29)STM32实现595驱动三个数码管(标准库和HAL库实现)的主要内容,如果未能解决你的问题,请参考以下文章

STM32学习笔记 二基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发

STM32学习笔记 二基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发

怎么样用stm32单片机做iic从机

STM32学习笔记 一基于STM32F103C8T6最小系统板和STM32CubeMX实现板载LED灯循环闪烁

STM32 HAL USART 驱动程序:这种语法是如何工作的?

STM32H7教程第93章 STM32H7的SPI总线应用之驱动ADS1256(8通道24bit ADC, 增益可编程)