写一个使用stm32的四位数码管显示程序的c文件和h文件
由于没有具体的四位数码管型号和连接方式,以下代码仅供参考。
h文件:
#ifndef __DISPLAY_H
#define __DISPLAY_H
#include "stm32f10x.h"
#define DIGIT_1 GPIO_Pin_0
#define DIGIT_2 GPIO_Pin_1
#define DIGIT_3 GPIO_Pin_2
#define DIGIT_4 GPIO_Pin_3
#define SEG_A GPIO_Pin_4
#define SEG_B GPIO_Pin_5
#define SEG_C GPIO_Pin_6
#define SEG_D GPIO_Pin_7
#define SEG_E GPIO_Pin_8
#define SEG_F GPIO_Pin_9
#define SEG_G GPIO_Pin_10
#define SEG_DP GPIO_Pin_11
extern uint8_t digit[4];
extern uint8_t seg_num[10];
void display_init(void);
void display_update(void);
#endif
c文件:
#include "display.h"
uint8_t digit[4] = {0, 0, 0, 0}; // 数码管的位数
uint8_t seg_num[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数字对应的段码
void display_init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 数码管共阴极,设置为低电平
GPIO_InitStructure.GPIO_Pin = SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_DP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_DP);
// 数码管的位选,设置为高电平
GPIO_InitStructure.GPIO_Pin = DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4);
}
void display_update(void) {
static uint8_t digit_index = 0; // 当前显示的位数
// 数码管的位选
GPIO_ResetBits(GPIOA, DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4);
switch (digit_index) {
case 0:
GPIO_SetBits(GPIOA, DIGIT_1);
break;
case 1:
GPIO_SetBits(GPIOA, DIGIT_2);
break;
case 2:
GPIO_SetBits(GPIOA, DIGIT_3);
break;
case 3:
GPIO_SetBits(GPIOA, DIGIT_4);
break;
default:
break;
}
// 数码管的段选
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G | SEG_DP);
GPIO_SetBits(GPIOA, seg_num[digit[digit_index]]);
if (digit_index >= 3) {
digit_index = 0;
} else {
digit_index++;
}
}
使用方法:
- 在主函数中调用
display_init()进行初始化。 - 在定时器中断中调用
display_update()进行数码管显示更新
原文地址: https://www.cveoy.top/t/topic/che2 著作权归作者所有。请勿转载和采集!