Stm32共阴数码管的动态显示代码
时间: 2023-07-02 07:15:40 浏览: 245
好的,下面是STM32共阴数码管的动态显示代码:
```c
#include "stm32f10x.h"
#define DIGIT0 GPIO_Pin_0
#define DIGIT1 GPIO_Pin_1
#define DIGIT2 GPIO_Pin_2
#define DIGIT3 GPIO_Pin_3
void GPIO_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void) {
int count = 0;
GPIO_Configuration();
while (1) {
if (count > 9999) count = 0;
GPIO_Write(GPIOA, DIGIT0);
GPIO_Write(GPIOB, ~(1 << (count % 10)));
Delay(1);
GPIO_Write(GPIOA, DIGIT1);
GPIO_Write(GPIOB, ~(1 << ((count / 10) % 10)));
Delay(1);
GPIO_Write(GPIOA, DIGIT2);
GPIO_Write(GPIOB, ~(1 << ((count / 100) % 10)));
Delay(1);
GPIO_Write(GPIOA, DIGIT3);
GPIO_Write(GPIOB, ~(1 << ((count / 1000) % 10)));
Delay(1);
count++;
}
}
void GPIO_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = DIGIT0 | DIGIT1 | DIGIT2 | DIGIT3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void Delay(__IO uint32_t nCount) {
for(; nCount != 0; nCount--);
}
```
与静态显示的代码相比,动态显示的代码在输出数字到数码管上时,使用了`~`按位取反运算符,将数字转换成了相应的共阴极数码管的控制码。控制码是一个8位二进制数,代表了数码管的8段LED的状态,其中1表示LED亮,0表示LED灭。通过不断改变控制码,就可以实现动态显示的效果。
需要注意的是,在每次循环中都要进行一定的延时,否则数码管的显示会非常快,无法看清楚。可以通过调节`Delay()`函数中的延时时间来控制数码管的显示速度。
阅读全文