2501_94807106 2025-12-29 15:33 采纳率: 0%
浏览 3
已结题

如何用STM32F103C8嵌入式系统设计数字钟?

img

img


大学生实训,用STM32F103C8嵌入式系统设计数字钟,有哪位可以教教我,不想挂科。我们学习的程序很简单,有简单编程吗?

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-12-29 15:33
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    数字钟设计方案

    你可以使用STM32F103C8的GPIO端口来控制七段显示器显示数字钟的时间。下面是一个简单的设计方案:

    1. 硬件连接
    • 将七段显示器的数字管连接到STM32F103C8的GPIO端口(例如:PB0-PB6)
    • 将时钟信号(TCK)和时钟频率(TCS)连接到STM32F103C8的GPIO端口(例如:PB7-PB8)
    1. 软件设计
    • 使用STM32CubeMX生成STM32F103C8的HAL库代码
    • 在main函数中初始化GPIO端口和时钟信号
    • 使用HAL库函数控制七段显示器显示数字钟的时间
    • 使用定时器(例如:TIM2)来实现时间的更新

    核心代码

    #include "stm32f10x.h"
    
    // 定义七段显示器的数字管
    #define SEG_A PB0
    #define SEG_B PB1
    #define SEG_C PB2
    #define SEG_D PB3
    #define SEG_E PB4
    #define SEG_F PB5
    #define SEG_G PB6
    
    // 定义时钟信号
    #define TCK PB7
    #define TCS PB8
    
    int main(void) {
      // 初始化GPIO端口
      GPIO_InitTypeDef GPIO_InitStruct;
      GPIO_InitStruct.Pin = SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
      // 初始化时钟信号
      GPIO_InitStruct.Pin = TCK | TCS;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
      // 初始化定时器
      TIM_HandleTypeDef htim2;
      htim2.Instance = TIM2;
      htim2.Init.Prescaler = 0;
      htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
      htim2.Init.Period = 65535;
      HAL_TIM_Base_Init(&htim2);
    
      // 循环显示数字钟的时间
      while (1) {
        // 更新时间
        HAL_TIM_Base_Start(&htim2);
        HAL_Delay(1000);
    
        // 显示时间
        HAL_GPIO_WritePin(GPIOB, SEG_A, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_B, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_C, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_D, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_E, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_F, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_G, GPIO_PIN_SET);
    
        // 显示小时
        HAL_GPIO_WritePin(GPIOB, SEG_A, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB, SEG_B, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_C, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_D, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_E, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_F, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_G, GPIO_PIN_SET);
    
        // 显示分钟
        HAL_GPIO_WritePin(GPIOB, SEG_A, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_B, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_C, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_D, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_E, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_F, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, SEG_G, GPIO_PIN_SET);
      }
    
      return 0;
    }
    

    注意: 该代码仅供参考,需要根据具体的硬件连接和需求进行修改。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月6日
  • 修改了问题 12月29日
  • 创建了问题 12月29日