数码管分为共阳极和共阴极,即多个二极管的同一端接到GND/Vss(若一起接到GND,则称为共阴极。若一起接到Vss,则称为共阳极)
把数码管上的每个二极管一次标号对应a,b,c,d,e,f,g,dp。我们知道发光二极管一端正一端负,才能发光,共阳极,当我们把另一端设置成0,发光二极管就会点亮,反之共阴极设置成1,发光二极管点亮。当我们想设置成0,就可以设置成下表:
共阳极
Dp | G | F | E | D | C | B | A |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
即1100 0000,对应段码为:0x60
共阴极
Dp | G | F | E | D | C | B | A |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
即0011 1111,对应段码为: 0x3F
#include "bsp_digital_tube.h"unsigned int num[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0x00};void Digital_Tube_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{int i;SysTick_Configuration();Digital_Tube_Configuration();while(1){for(i = 0; i < 12; i++){GPIOA->ODR = num[i];Delay_us(500000);}}
}
GPIOA->ODR是32位的输出数据寄存器(高16位保留,低16为依次对应某个GPIO口的16个引脚)。所以这里依次对应GPIO_Pin_0==a,GPIO_Pin_1==b...GPIO_Pin_7==Dp