首页 > 其他分享 >STM32秒表设计【课设4/5】

STM32秒表设计【课设4/5】

时间:2024-07-04 17:28:57浏览次数:17  
标签:10 led 课设 Pin ODR STM32 GPIO 秒表 Display

引言

终于轮到我们最后的八段LED了!作为秒表的眼睛,必不可少的就是显示模块。

八段LED初始化

直接就叫做LED_Init()吧

void LED_Init(void)
{
  GPIO_InitTypeDef led;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
	led.GPIO_Mode=GPIO_Mode_IPU;
	led.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;;  
	led.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOE, &led);
}

我先选取的是共阳极LED显像管。

当我们写下时,所有引脚输出高电平,直接显示错误。

根据我之前讲的课,我们使用的led当位选调制为低电平时,led关闭显示。

当led段选调制为高电平时,led不显示字符。

所以就会有对ODR寄存器的操作!全部关掉。

GPIOE->ODR=GPIOE->ODR&0xff00;

将低八位的电压拉低,关闭led的显示。 

将高八位的2电压拉高,关闭led的字符段选。 
 

GPIOE->ODR=0xff00;

构建字符库与显示函数

查阅我们的LED字符库我们就可以构建:

const  uint16_t GLedSeg[]={~0x3f, ~0x06, ~0x5b, ~0x4f, ~0x66, ~0x6d, ~0x7d, ~0x07, ~0x7f, ~0x6f, ~0x40};  

干脆我们把它写进我们的显示函数中Display(); =》【位选第一位+段选】【位选第二位+段选】——【循环至第八位】

void Display(uint16_t wei=0,uint16_t duan=0;)
{
const  uint16_t GLedSeg[]={~0x3f, ~0x06, ~0x5b, ~0x4f, ~0x66, ~0x6d, ~0x7d, ~0x07, ~0x7f, ~0x6f, ~0x40};  

uint16_t wei=0;
uint16_t duan=0;
if(wei>7)
{
wei=0;
}
GPIO->ODR=0xff00;
PEout(wei)=1;
if(duan<=9)
	{	
		valueODR = GPIOE->ODR & 0x00ff;  
		valueODR |= ((uint16_t)(GLedSeg[duan]))<<8;    
		GPIOE->ODR = valueODR;
	}
	else
	{	
		valueODR = GPIOE->ODR & 0x00ff;  
		valueODR |= ((uint16_t)(GLedSeg[10]))<<8;   
		GPIOE->ODR = valueODR;
	}
}

选中位再输出段,但如果段不在我们的范围内输出“——”。 

时间显示函数 

我们刚刚完成了可以显示数字的函数,现在我们使用它来显示我们的时间。

void  DispTime(TimeTypeDef  *ptime)
 { 
	 Display(6, ptime->sec01);
	 delay(10000);
	 Display(5, 10);    //'-'
	 delay(10000);
	 Display(4, ptime->sec%10);   
	 delay(10000);
	 Display(3, ptime->sec/10);   
	 delay(10000);
	 Display(2, 10);    //'-'
	 delay(10000);
	 Display(1, ptime->min%10);   
	 delay(10000);
	 Display(0, ptime->min/10);   
	 delay(10000);
 }

这里就讲一下我们的计算过程:

第六位显示秒的精度

第5位显示“——”

第四位显示分钟的个位:假设sec=51

51%10=1(取余数)

第三位显示分的十位:

52%10=5(取十位)

下面同理。

再说一下我们这里的指针,可以直接查询我们定时器定的值。例如:

GPIOE->ODR 

最后一节课我们直接优化一下全部代码!!!然后就漂漂亮亮地完成了我们的课程设计。

我也会上传相关代码提供给大家参考!

 

 

 

标签:10,led,课设,Pin,ODR,STM32,GPIO,秒表,Display
From: https://blog.csdn.net/2301_76726104/article/details/140182834

相关文章

  • 基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现
    基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现本系列文章:基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现一、PWM驱动代码的编写在系列文章的第一篇中已经对主定时器TIM1进行了P......
  • 基于STM32单片机的智能垃圾桶控制系统 语音识别 LD3322 垃圾分类 红外感应 超声波满溢
        随着社会科学技术的飞速发展,人们的生活质量和速度也在不断提高。大多数传统的家用垃圾桶已经过时且缺乏新颖性,并且缺乏人性化设计。使用起来既不方便也不卫生,并且所有的生活垃圾和废物垃圾都被均匀地装载,没有经过仔细的分类。随之而来的是,清洁工的任务量正以几何速......
  • 基于STM32单片机的智能垃圾桶控制系统 语音识别LD3322 垃圾分类 火灾检测 金属检测 成
        随着社会科学技术的飞速发展,人们的生活质量和速度也在不断提高。大多数传统的家用垃圾桶已经过时且缺乏新颖性,并且缺乏人性化设计。使用起来既不方便也不卫生,并且所有的生活垃圾和废物垃圾都被均匀地装载,没有经过仔细的分类。随之而来的是,清洁工的任务量正以几何速......
  • 【单片机毕业设计选题24044】-基于STM32的水处理系统设计与实现
    系统功能:采用STM32最小系统板控制,采集传感器数据显示在OLED上并通过继电器进行相应的操作。系统操作说明:上电后OLED显示“欢迎使用水处理系统请稍后”,两秒后进入第一页面显示。第一页面第一行显示“系统状态信息”,第二行显示温湿度,第三行显示光照和水位,第四行显示系统状......
  • stm32学习笔记---USART串口数据包(代码部分)串口收发HEX数据包/文本数据包
    目录第一个代码:串口收发HEX数据包Serial.cSerial.hMain.c第二个程序:串口收发文本数据包Serial.cSerial.hMain.c声明:本专栏是本人跟着B站江科大的视频的学习过程中记录下来的笔记,我之所以记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以配套......
  • STM32L073RZT 调试SPI问题
    现象描述:spi通信一次后,第二次通信spi的SR寄存器异常0xFF31(MODF,CRCERR,RXNE),通信失败。以下为调用流程及相关代码:NFC_ID();NFC_REG_B_TEST(); //SPI读voidSPI_Read_Data(uint8_t*w_data,uint32_tw_size,uint8_t*r_data,uint32_tr_size){SET_SPI......
  • STM32秒表设计【课设3/5】
    引言今天我们来写秒表的核心——定时器!初始化时钟首先得开时钟吧!然后得配置时钟吧!最后再将配置初始化进去吧!我直接叫它为TIM6_Init();让我们看看TIM6在那个时钟上吧!OK!直接开写:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE)让我们看看里面需要配置啥吧,配置的......
  • Why do STM32 initialization peripherals need to turn on the clock first?
    为什么Stm32初始化外设都需要先打开时钟理由一由于STM32属于低功耗的MCU,为了降低功耗,STM32的MCU在复位后会把绝大多数的外设时钟关闭,所以当用户需要使用到MCU内部的某个外设,就必须先开启定时器。理由二我们知道想要控制硬件,必须控制硬件的寄存器。然而在数字电路中,寄存器的作......
  • STM32-PWM配置流程及作用
    STM32F407ZET6单片机配置PWM(脉冲宽度调制)PWM配置流程STM32F407ZET6单片机配置PWM的流程通常包括以下几个步骤:时钟使能:首先,需要使能定时器和相关IO口的时钟。这通常通过调用RCC(ResetandClockControl)相关的函数来实现,比如RCC_APB1PeriphClockCmd()用于使能APB1总线上的定时......
  • FreeRTOS移植到STM32
    本内容主要是讲解关于如果把FreeRTOS移植到STM32中去的操作。明白各部分的作用以及打通思路,具体操作按照下列进行相应的操作。第一:早一个STM32的裸机程序我们这里用的是STM32F103的芯片为例。 二、去官网上下载FreeRTOSV9.0.0源码在移植之前,我们首先要获取到......