STM32F103ZET6数码管滚动显示学号后六位
时间: 2025-06-06 13:02:09 浏览: 21
### STM32F103ZET6 数码管滚动显示学号后六位功能
为了实现在STM32F103ZET6单片机上的数码管滚动显示学号后六位的功能,可以按照以下方法设计程序逻辑并编写代码。
#### 1. 系统初始化
在开始之前,需要完成基本的硬件配置和软件环境搭建。这包括设置GPIO端口用于控制数码管的段选和位选信号,以及通过定时器中断来实现动态扫描效果[^1]。
```c
#include "stm32f10x.h"
// 定义全局变量
uint8_t number[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92}; // 假设学号后六位分别为这些数字对应的共阴极数码管编码
uint8_t position = 0; // 当前显示位置索引
```
#### 2. GPIO 配置
对于数码管驱动来说,通常会用到多个GPIO引脚分别连接至数码管的不同段(a~g)及公共阳极或阴极端子。这里假设采用静态分配方式指定各针脚用途:
- PA0 ~ PA7 控制八个段 (a-g 和 dp)
- PB0 ~ PB5 负责六个独立的位选择线
以下是具体的GPIO初始化函数示例:
```c
void GPIO_Configuration(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 设置PA0-PA7为输出模式(段选)
GPIO_InitStructure.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_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
// 设置PB0-PB5为输出模式(位选)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |
GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
```
#### 3. 定时器中断服务程序
利用TIM3作为时间基准源触发每毫秒一次更新操作,在此期间切换当前点亮的那个七段显示器及其所要呈现的数据内容。
```c
void TIM3_IRQHandler(void){
static uint8_t count=0;
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
// 关闭所有位选
GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|
GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
// 输出对应数值给段选
GPIO_Write(GPIOA,number[position]);
// 打开相应的位置选通路
GPIO_SetBits(GPIOB,(1<<position));
// 更新下一个待处理的位置
position++;
if(position>=6){position=0;}
// 计数器清零准备下次循环计时
count=0;
}
}
void Timer_Configuration(void){
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period=ARR_VALUE;//根据实际晶振频率计算得到合适的自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler=PSC_VALUE;//预分频系数同样依据系统时钟设定得出具体数值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3,ENABLE);
}
```
以上即是一个简单的基于STM32微控制器平台之上针对特定需求开发出来的解决方案框架图解说明文档的一部分摘录[^1]。
阅读全文
相关推荐


















