#include "stm32f10x.h"
#define DIGIT1 GPIO_Pin_0
#define DIGIT2 GPIO_Pin_1
#define SEG_A GPIO_Pin_2
#define SEG_B GPIO_Pin_3
#define SEG_C GPIO_Pin_4
#define SEG_D GPIO_Pin_5
#define SEG_E GPIO_Pin_6
#define SEG_F GPIO_Pin_7
#define SEG_G GPIO_Pin_8
#define SEG_DP GPIO_Pin_9
void delay_ms(uint16_t ms) {
SysTick->LOAD = (uint32_t)ms * SystemCoreClock / 1000 - 1;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
SysTick->CTRL = 0;
}
void display_digit(int digit) {
GPIO_SetBits(GPIOA, DIGIT1 | DIGIT2);
switch (digit) {
case 0:
GPIO_ResetBits(GPIOB, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F);
break;
case 1:
GPIO_SetBits(GPIOB, SEG_B | SEG_C);
GPIO_ResetBits(GPIOB, SEG_A | SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 2:
GPIO_SetBits(GPIOB, SEG_A | SEG_B | SEG_D | SEG_E | SEG_G);
GPIO_ResetBits(GPIOB, SEG_C | SEG_F);
break;
case 3:
GPIO_SetBits(GPIOB, SEG_A | SEG_B | SEG_C | SEG_D | SEG_G);
GPIO_ResetBits(GPIOB, SEG_E | SEG_F);
break;
case 4:
GPIO_SetBits(GPIOB, SEG_B | SEG_C | SEG_F | SEG_G);
GPIO_ResetBits(GPIOB, SEG_A | SEG_D | SEG_E);
break;
case 5:
GPIO_SetBits(GPIOB, SEG_A | SEG_C | SEG_D | SEG_F | SEG_G);
GPIO_ResetBits(GPIOB, SEG_B | SEG_E);
break;
case 6:
GPIO_SetBits(GPIOB, SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);
GPIO_ResetBits(GPIOB, SEG_B);
break;
case 7:
GPIO_SetBits(GPIOB, SEG_A | SEG_B | SEG_C);
GPIO_ResetBits(GPIOB, SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 8:
GPIO_SetBits(GPIOB, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 9:
GPIO_SetBits(GPIOB, SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G);
GPIO_ResetBits(GPIOB, SEG_E);
break;
default:
break;
}
}
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef gpio_init_struct;
gpio_init_struct.GPIO_Pin = DIGIT1 | DIGIT2;
gpio_init_struct.GPIO_Speed = GPIO_Speed_2MHz;
gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &gpio_init_struct);
gpio_init_struct.GPIO_Pin = SEG_A | SEG_B | SEG_C | SEG_D |
SEG_E | SEG_F | SEG_G |SEG_DP;
gpio_init_struct.GPIO_Speed = GPIO_Speed_2MHz;
gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &gpio_init_struct);
while (1) {
for (int i = 0; i < 100; i++) {
int digit1 = i / 10 % 10;
int digit2 = i % 10;
display_digit(digit1);
GPIO_ResetBits(GPIOA, DIGIT1);
delay_ms(5);
display_digit(digit2);
GPIO_ResetBits(GPIOA, DIGIT2);
delay_ms(5);
GPIO_SetBits(GPIOA, DIGIT1 | DIGIT2);
}
}
}
stm32两位数码管显示
最新推荐文章于 2024-07-08 15:23:26 发布