

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


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
数字钟设计方案
你可以使用STM32F103C8的GPIO端口来控制七段显示器显示数字钟的时间。下面是一个简单的设计方案:
核心代码
#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;
}
注意: 该代码仅供参考,需要根据具体的硬件连接和需求进行修改。