STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器)

这篇具有很好参考价值的文章主要介绍了STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现目标

1、加强数码管学习,实现数码显示变量数据(三位数的显示);

2、3位数码+2个按键+蜂鸣器实现模拟电磁炉功率调节及显示;


一、前期基础说明

关于74HC595的STM32F103的驱动以及数码的显示等请查阅我写的上一篇博客:https://blog.csdn.net/luojuan198780/article/details/136653377

二、原理图设计

STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器),stm32,嵌入式硬件

三、STM32CubeMX 配置

1.管脚配置

STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器),stm32,嵌入式硬件

四、程序设计

1、数码管码表及全局变量

//共阳数码管码表
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

int num = 210;//电磁炉开机功率初始值

2、函数声明(74HC595驱动函数及自定义延时函数)

void HC595_Send_Byte(unsigned  char byte);	
void for_delay_us(uint32_t nus);

3、按键处理、数码显示程序

  while (1)
  {
		if (HAL_GPIO_ReadPin(GPIOB, K1_Pin)==0)		
		{
				while(!HAL_GPIO_ReadPin(GPIOB, K1_Pin));
			
			  HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
			  HAL_Delay(150);
			  HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
			  HAL_Delay(150);	
		     if(num >= 210)
				 {
				      num = 210;
							HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
							HAL_Delay(100);
							HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
							HAL_Delay(100);						 					 
				 }
				 else 
					 num  = num + 20;//  num  += 20
		
		}
		if (HAL_GPIO_ReadPin(GPIOB, K2_Pin)==0)		
		{
				while(!HAL_GPIO_ReadPin(GPIOB, K2_Pin));
			  HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
			  HAL_Delay(150);
			  HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
			  HAL_Delay(150);							
		     if(num <= 10)
				 {					 
				      num = 10;
							HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
							HAL_Delay(100);
							HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
							HAL_Delay(100);						  
				 }
				 else 
					 num  -= 20;//   num  = num - 20;
		}		
		
		HAL_GPIO_WritePin(GPIOA, SEG1_Pin, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, SEG2_Pin, GPIO_PIN_RESET);		
		HAL_GPIO_WritePin(GPIOB, SEG3_Pin, GPIO_PIN_RESET);		
		HC595_Send_Byte(table[num/100]);//百位			
    for_delay_us(5);	// 适当延时	
		HC595_Send_Byte(0xff);	//	消影
		
		HAL_GPIO_WritePin(GPIOA, SEG2_Pin, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, SEG1_Pin, GPIO_PIN_RESET);		
		HAL_GPIO_WritePin(GPIOB, SEG3_Pin, GPIO_PIN_RESET);		
		HC595_Send_Byte(table[num/10%10]);//十位			
    for_delay_us(5);	// 适当延时	
		HC595_Send_Byte(0xff);//	消影	
		
		HAL_GPIO_WritePin(GPIOA, SEG2_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, SEG1_Pin, GPIO_PIN_RESET);		
		HAL_GPIO_WritePin(GPIOB, SEG3_Pin, GPIO_PIN_SET);		
		HC595_Send_Byte(table[num%10]);//个位				
    for_delay_us(5);	// 适当延时	
		HC595_Send_Byte(0xff);//	消影
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

4、74HC595驱动函数及自定义延时函数

/* USER CODE BEGIN 4 */

void HC595_Send_Byte(unsigned  char byte)
{
	unsigned  char i;
	for (i = 0; i < 8; i ++)  //一个字节8位,传输8次,一次一位,循环8次,刚好移完8位
	{
	  /****  步骤1:将数据传到DS引脚    ****/
		if (byte & 0x80)        //先传输高位,通过与运算判断第八是否为1
		  HAL_GPIO_WritePin(GPIOA, DATA_Pin, GPIO_PIN_SET); //如果第八位是1,则与 595 DS连接的引脚输出高电平
		else                    //否则输出低电平
		  HAL_GPIO_WritePin(GPIOA, DATA_Pin, GPIO_PIN_RESET);		
			
		/*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/
      HAL_GPIO_WritePin(GPIOA, SHCP_Pin, GPIO_PIN_RESET);	 // SHCP拉低	          
      for_delay_us(5);	// 适当延时	
		
      HAL_GPIO_WritePin(GPIOA, SHCP_Pin, GPIO_PIN_SET);		// SHCP拉高, SHCP产生上升沿	
      for_delay_us(5);				
		  byte <<= 1;		// 左移一位,将低位往高位移,通过	if (byte & 0x80)判断低位是否为1
	}
	
	/**  步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器  **/ 
   HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);	// 将STCP拉低
   for_delay_us(5);		
   HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);// 再将STCP拉高,STCP即可产生一个上升沿	
   for_delay_us(5);	
}

/*
for循环实现延时us
*/
void for_delay_us(uint32_t nus)
{
	 uint32_t Delay = nus * 168/4;
	 do
	 {
	 }
	 while (Delay --);
}

/* USER CODE END 4 */

五、实验现象

实验效果参考下面网址视频:

shttps://live.csdn.net/v/370142

六、仿真实现

STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器),stm32,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-840990.html


总结

到了这里,关于STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32使用HAL库驱动TA6932数码管驱动芯片

    8段16位,支持共阴共阳LED数码管。 推挽配置即可。 1、使用TA6932_Init进行初始化 2、使用TA6932_Disp(uint8_t *_ucPtr,uint8_t _ucLenth)进行显示,_upPtr指针指向段码,_ucLenth为显示长度,不超过16位。

    2024年02月07日
    浏览(38)
  • 51单片机---编程实现流水灯----键盘控制数码管显示--利用74LS164扩展并行输出口---定时中断方式驱动一个数码管

    目录 基于51单片机,用c语言编程实现流水灯 代码: 使用C语言编写的基于51单片机的键盘控制数码管显示 代码: 基于51单片机,用c语言编程实现利用74LS164扩展并行输出口 代码: 基于51单片机,用c语言编程实现定时中断方式驱动一个数码管  代码:  1- 2- 上述代码中,使用

    2024年02月16日
    浏览(43)
  • STM32-GPIO数码管动态显示

    目录 一、数码管原理 1、LED数码管的结构 2、LED数码管工作原理 3、数码管动态显示 1)动态显示的概念 2)动态显示的接口 二、代码的实现 三、仿真结果展示   本篇文章将继续进一步了解GPIO外设输出模式 知道这一部分的朋友可以直接点击目录部分跳过这段跳过 ,这里介绍

    2023年04月08日
    浏览(34)
  • 嵌入式开发:使用STM32CubeMX 和 Keil uVision5实现两位数码管循环显示实验

    一、STM32CubeMx实现数码管 1、双击打开STM32CubeMX。 2、点击File选项,在File列表下选择New Project选项新建工程。 3、在图中所示位置的方框中输入我们使用的芯片型号来搜索芯片 4、与我们的搜索相关的芯片型号会在这里呈现,我们只需要选择我们需要的即可,这里我们双击第一个

    2024年02月08日
    浏览(45)
  • ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)

            a.数码管显示相同的值 0000 1111 ......9999;         b.数码管显示不同的值 1234; ---spi.h头文件--- ---spi.c函数文件--- ---main.c测试文件--- a.数码管显示相同的值 0000 1111 ......9999; b.数码管显示不同的值 1234;

    2024年02月11日
    浏览(35)
  • 在7段数码管上显示自己的最后三位学号数字Verilog代码Vivado仿真

    名称:在7段数码管上显示自己的最后三位学号数字Verilog代码Vivado仿真(文末获取) 软件:Vivado 语言:Verilog 代码功能: 在7段数码管上显示自己的最后三位学号数字 1.实验任务 要求将自己的最后三位学号数字在数码管上显示2、实验现象与结果 应能看见自己学号稳定的在数

    2024年02月21日
    浏览(38)
  • STM32物联网项目——TM1620驱动数码管显示

    程序功能:       TM1620 这里主要说说关于TM1620指令与数据传输,其他概述等内容详细见TM1620手册: 链接:https://pan.baidu.com/s/1C4I_oy9n9QjSPu8UD-FJRg  提取码:9ec0  --来自百度网盘超级会员V2的分享 TM1620一共有4条指令: (1) 显示模式命令设置:  该指令用来设置选择段和位的个数

    2024年01月16日
    浏览(34)
  • 74LS595 74HC595使用方法以及驱动数码管显示(附:使用代码)

    由于74HC595与74LS595功能是一样的没有区别。LS和HC代表不同工作速度,HC代表CMOS芯片电路中工作速度最高的产品,LS表示普及、通用型产品。其驱动方法也是一样的。 74LS595是串行输入并行输出的器件,可以串联使用,达到引脚拓展的目的。主要引用在数码管的驱动,点阵的驱动

    2024年02月06日
    浏览(162)
  • 51单片机驱动8位数码管(74HC595驱动)滚动显示

    原文链接:https://www.yourcee.com/newsinfo/2929591.html 点击图片购买 主要关注下供电电压是3.0-5.0v(建议5V),请在规定范围内供电。 模块上芯片引出5个引脚,芯片引脚与模块引脚对应关系是:VCC-VCC SCK-SCLK, RCK-RCLK,SER-DIO,GND-GND 可以对比程序学习时序图,便于理解。 1.显示异常可排除

    2024年02月15日
    浏览(47)
  • 基于STM32的时钟设计并在六位数码管上显示附proteus仿真

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包