STM32实现HC595控制三位数码管(内含程序,PCB原理图及相关资料)

发布于:2024-12-06 ⋅ 阅读:(235) ⋅ 点赞:(0)

目录

任务要求

一、595的作用

二、电路设计

三、STM32选型

四、cubeMX配置

五、代码实现

六、实现效果(显示12.8)


任务要求

使用两个595实现对三位数码管控制,实现三位值显示。

一、595的作用

74HC595的作用是将串行数据进行并行显示。主要功能是节约单片机的IO口,保证少量的IO口即可完成数码管显示。

二、电路设计

因为三位数码管涉及11个引脚(包含8个段位引脚和3个COM引脚),正常IO驱动的话,就需要11个引脚,这样就会消耗很多IO口。

这时就需要这两个595实现数码管控制。

一个595只有8个数据输出口,因此需要两个595级联实现数码管显示。

电路图设计如下。

图中STCP、SHCP、DS引脚需要接在STM32的引脚,这样就能实现3个IO口控制数码管显示。

STM32引脚 595芯片引脚
PB7 STCP
PB6 SHCP
PB5 DS

然后,绘制PCB板

三、STM32选型

其实STM32选型,什么类型的单片机无所谓,因为使用HAL库开发能够实现代码的较好移植。只要配置好Cube MX生成工程就可以。

这里选用的是:STM32G030K8T6(再次说明一下,这里的单片机选型不重要,实现方法相同

四、cubeMX配置

选择相应的引脚,其均设置成输出模式

修改引脚的别名,这里也可以不修改。

五、代码实现

595驱动程序开发

/**********************************/
/** 函数名称:void HC595_Write_Data(unsigned char dis_data) **/
/** 输入参数:unsigned char dis_data 需要输入的数据  */
/** 函数功能:将数据写进74HC595中*/
/** ****************************** **/
void HC595_Write_Data(unsigned char dis_data)
{
	unsigned char i;
	unsigned char temp;
	temp = dis_data;
	for(i=0;i<8;i++)    //    循环将一个字节的八位依次写入到寄存器
	{
		HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET);// 	SRCLK低电平
		if(temp & 0X80)
		{
			HAL_GPIO_WritePin(DATA_GPIO_Port,DATA_Pin,GPIO_PIN_SET);
		}
		else
		{
			HAL_GPIO_WritePin(DATA_GPIO_Port,DATA_Pin,GPIO_PIN_RESET);
		}
		temp = temp<<1;
		HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET);	// 	SRCLK低电平
		HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_SET);		// 	SRCLK高电平
	}
}
 
/****************************************/
/**函数名称:void Disp_out(void)*/
/**函数参数:无参*/
/**函数功能:将写入到寄存器的数据输出到端口显示*/
/****************************************/
void Disp_out(void)
{
	HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_SET);
}

数码管显示函数

void DispData(void)
{
	HC595_Write_Data(table[gBai]);
	HC595_Write_Data(0X0006);		//	0000 0000 0000 0000
	Disp_out(); 
	
	/// 增加小数点
	HC595_Write_Data(table[gShi]|0X80);			//	加小数点 增加|0X80
	HC595_Write_Data(0X0005);	
	Disp_out(); 

	HC595_Write_Data(table[gGe]);
	HC595_Write_Data(0X0003);	
	Disp_out(); 
	
	//	保证数码管亮度一致
	HC595_Write_Data(table[0]);
	HC595_Write_Data(0X0007);	
	Disp_out(); 
}

到这就实现了数码管显示。

主函数代码

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		DispData();
		
  }
  /* USER CODE END 3 */
}

六、实现效果(显示12.8)

代码链接:

STM32实现HC595控制三位数码管资源-CSDN文库

吾芯电子


网站公告


今日签到

点亮在社区的每一天
去签到