【STM32+HAL+Proteus】系列学习教程---数码管显示定时

这篇具有很好参考价值的文章主要介绍了【STM32+HAL+Proteus】系列学习教程---数码管显示定时。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 实现目标

1、STM32 基于HAL库定时器的使用;

2、加强数码管的学习。

3、具体目标:利用定时器3实现一个60秒的定时,定时时间在数码管上显示,定时时间到,蜂鸣器响一声作为提示功能。


一、STM32 定时器的中断回调函数

        自动生成的代码中,中断回调函数都有一个__weak 关键字,加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。所以我们可以在别的地方定义一个相同名字的函数,而不必也尽量不要修改之前的函数。

二、原理图设计

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

三、STM32CubeMX 配置

1.定时器时钟配置

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

2.定时器3、数码管、蜂鸣器的配置

   如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

3.开启定时器3中断

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

四、程序设计

1.变量定义及函数声明

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

int s ,flag;


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

2.打开定时器3中断

开启定时中断函数:   HAL_TIM_Base_Start_IT(&htimx);   //x  为要开启的定时器号,下面代码为开启定时器2中断,x= 3

HAL_TIM_Base_Start_IT(&htim3);//开启定时器3中断

3.重写中断回调函数

中断回调函数内尽量少放我们处理的代码。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == htim3.Instance) //1S进入1次中断
	{			
			s++;//秒 ++
			if ( s >= 60)//1s 到
			{
				s = 0;			
				flag = 1;
			}	
	}  
}

4.74HC595驱动程序、自写延时函数

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 --);
}

5.while(1)中实现的功能函数

		if (flag == 1)
		{
			flag = 0;
			HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
			HAL_Delay(200);
			HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
			HAL_Delay(200);			
		
		}
	
		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[s/10]);//函数调用			
        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[s%10]);//函数调用			
        for_delay_us(5);	// 适当延时	
		HC595_Send_Byte(0xff);//	消影	

五、实验现象

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件

六、仿真实现

如何让数码管显示stm32芯片内定时器的时间,STM32 应用开发教程(基础),单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-845550.html


总结

到了这里,关于【STM32+HAL+Proteus】系列学习教程---数码管显示定时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32】标准库与HAL库对照学习教程十四--CAN总线

    STM32全部教程 :【STM32】标准库与HAL库对照学习系列教程大全 本篇介绍如何使用STM32的标准库与HAL库对CAN总线的使用,由于我那块普中的STM32F103ZET6开发板送人了,因此我这边用STM32F103C8最小系统板,进行简单的演示一下功能,最主要的还是需要理解CAN总线的原理,在本篇中,

    2024年02月15日
    浏览(45)
  • 学习笔记|小数点控制原理|数码管动态显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第十集:数码管动态显示

    上述图片引用自:51单片机初学2-数码管动态扫描 用一排端口来控制段码,需要显示哪几个就点亮哪几个段,和看电影一样,一个一个的打开,关闭,一个个的画面,组成动画。 具体的控制的流程如图所示,N表示有几个数码管! 其中需要注意每个延时不能太短,我们这边程

    2024年02月07日
    浏览(44)
  • 学习笔记|认识数码管|控制原理|数码管实现0-9的显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第九集:数码管静态显示

    数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。 按发光二极管单元连接方

    2024年02月10日
    浏览(53)
  • STM32HAL库驱动数码管

    本文档创建于2023年3月7日 本文记录了我学习数码管驱动的过程,实际是微机原理课上留的一个作业。 本文作者:RobotFreak 本文参考《NANO_STM32F103开发指南-HAL库版本_V2.0》,正点原子官网可下载。 数码管,也称LED数码管,按发光二极管单元连接方式可分为“共阳极数码管”和“

    2024年02月08日
    浏览(39)
  • 基于STM32单片机的温度报警器(数码管)(Proteus仿真+程序)

            本设计由STM32F103单片机最小系统+DS18B20温度传感器+数码管显示模块+声光报警模块+独立按键组成。 1、主控制器是STM32F103单片机 2、DS18B20温度传感器测量温度 3、数码管显示温度值,精度0.1摄氏度 4、三个按键可设置温度上限、下限报警值,温度超过上限、或者温度低

    2024年02月07日
    浏览(62)
  • STM32野火教程学习笔记

    虽然经历了疫情期间的价格起飞,但是STM32系列的单片机仍然是各个控制领域内主流的微控制器。它是控制人的必修课之一。 我们在学习51单片机的时候,通常是通过编写程序直接对其输入输出(i/o)口进行操作。而STM32单片机更加高级,它有更复杂的底层。因此我们对STM32单

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

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

    2024年02月12日
    浏览(50)
  • STM32学习·HAL库·STM32CubeMX系列学习(安装和使用)

    目录 ​编辑 1.  STM32CubeMX简介 2.  STM32CubeMX安装 2.1  STM32CubeMX软件获取 2.1.1  获取Java软件 2.1.2  STM32CubeMX软件获取 2.2  搭建Java运行环境 2.3  安装STM32CubeMX软件 2.4  下载和关联STM32cube固件包         STM32CubeMX 是 ST 微电子公司推出的一款图形化配置工具,用于快速启动

    2024年02月19日
    浏览(53)
  • STM32使用HAL库驱动TA6932数码管驱动芯片

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

    2024年02月07日
    浏览(45)
  • 基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

           本设计由STM32F103单片机最小系统+DHT11温湿度传感器+数码管显示模块+声光报警模块+独立按键组成。 1、主控制器是STM32F103单片机 2、DHT11传感器测量温度和湿度数据 3、数码管显示温度、湿度,精度1℃、1%RH 4、三个按键可设置温度、湿度上限报警值,温度或者湿度超过

    2024年02月03日
    浏览(76)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包