基于STM32实现0-9数码管显示的代码以及仿真
时间: 2024-03-10 16:47:19 浏览: 35
以下是基于STM32F103C8T6微控制器实现0-9数码管显示的代码及仿真:
```c
#include "stm32f10x.h"
#define SEG_A GPIO_Pin_0
#define SEG_B GPIO_Pin_1
#define SEG_C GPIO_Pin_2
#define SEG_D GPIO_Pin_3
#define SEG_E GPIO_Pin_4
#define SEG_F GPIO_Pin_5
#define SEG_G GPIO_Pin_6
#define SEG_DP GPIO_Pin_7
void GPIO_Configuration(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_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void delay_ms(uint32_t ms)
{
SysTick_Config(SystemCoreClock / 1000);
for (volatile uint32_t i = 0; i < ms; i++);
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
void display(uint8_t num)
{
switch(num) {
case 0:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F);
GPIO_SetBits(GPIOA, SEG_G);
break;
case 1:
GPIO_ResetBits(GPIOA, SEG_B | SEG_C);
GPIO_SetBits(GPIOA, SEG_A | SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 2:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_D | SEG_E | SEG_G);
GPIO_SetBits(GPIOA, SEG_C | SEG_F);
break;
case 3:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_G);
GPIO_SetBits(GPIOA, SEG_E | SEG_F);
break;
case 4:
GPIO_ResetBits(GPIOA, SEG_B | SEG_C | SEG_F | SEG_G);
GPIO_SetBits(GPIOA, SEG_A | SEG_D | SEG_E);
break;
case 5:
GPIO_ResetBits(GPIOA, SEG_A | SEG_C | SEG_D | SEG_F | SEG_G);
GPIO_SetBits(GPIOA, SEG_B | SEG_E);
break;
case 6:
GPIO_ResetBits(GPIOA, SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);
GPIO_SetBits(GPIOA, SEG_A | SEG_B);
break;
case 7:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C);
GPIO_SetBits(GPIOA, SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 8:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);
break;
case 9:
GPIO_ResetBits(GPIOA, SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G);
GPIO_SetBits(GPIOA, SEG_E);
break;
}
}
int main(void)
{
uint8_t i = 0;
GPIO_Configuration();
while(1) {
display(i);
delay_ms(1000);
i++;
if (i > 9) {
i = 0;
}
}
}
```
在Keil编译器中进行仿真,可以通过下列步骤进行仿真:
1. 打开Keil编译器,创建一个新工程,选择STM32F103C8T6微控制器。
2. 在新建项目中创建一个新的源文件,将上述代码复制到源文件中。
3. 点击“Rebuild”编译代码。
4. 将STM32F103C8T6微控制器通过JTAG或SWD连接到计算机上。
5. 点击“Debug”进行仿真。
6. 在仿真窗口中可以看到数码管依次显示0-9数字。