stm32f103c8t6动态数码管显示0到9
时间: 2024-05-21 12:09:47 浏览: 152
数码管动态显示0到9
STM32F103C8T6是一款常用的单片机,它支持多种外设,包括动态数码管。下面是一个简单的示例,展示如何使用STM32F103C8T6控制动态数码管显示0到9:
1. 准备材料:
- STM32F103C8T6开发板
- 动态数码管模块
- 杜邦线若干
2. 连接电路:
- 将动态数码管的CLK连接到STM32F103C8T6的GPIO引脚上,例如PA0。
- 将动态数码管的DIN连接到STM32F103C8T6的GPIO引脚上,例如PA1。
3. 编写程序:
- 首先需要定义一个包含数字0-9的数组。
- 然后编写函数,将数字转换为对应的数码管段码,并通过SPI总线将数据发送给动态数码管。
- 最后,在主函数中循环调用该函数,以显示0-9的数字。
下面是一个简单的代码示例:
```c
#include "stm32f10x.h"
#include "delay.h"
#define CLK_PIN GPIO_Pin_0
#define DIN_PIN GPIO_Pin_1
#define CLK_PORT GPIOA
#define DIN_PORT GPIOA
const uint16_t digit[10] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
void TM1637_WriteByte(uint8_t data) {
uint8_t i;
for (i = 0; i < 8; i++) {
if (data & 0x01) {
GPIO_SetBits(DIN_PORT, DIN_PIN);
} else {
GPIO_ResetBits(DIN_PORT, DIN_PIN);
}
GPIO_ResetBits(CLK_PORT, CLK_PIN);
delay_us(2);
GPIO_SetBits(CLK_PORT, CLK_PIN);
delay_us(2);
data >>= 1;
}
GPIO_ResetBits(CLK_PORT, CLK_PIN);
delay_us(2);
GPIO_SetBits(CLK_PORT, CLK_PIN);
delay_us(2);
}
void TM1637_Display(uint16_t num) {
uint8_t buf = {0};
uint8_t i;
for (i = 0; i < 4; i++) {
buf[i] = digit[num % 10];
num /= 10;
}
for (i = 0; i < 4; i++) {
TM1637_WriteByte(buf[3 - i]);
}
}
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = CLK_PIN | DIN_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1) {
uint16_t num;
for (num = 0; num < 10; num++) {
TM1637_Display(num);
delay_ms(1000);
}
}
}
```
阅读全文