1、stm32控制4位共阳数码管输出计数用stm32控制4位数码管,需要用到GPIO口 PA0~PA11共12个引脚。首先我们来看看数码管的原理图。 因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出,其他设定为低位即可。 //设定下GPIO口 void GPIO_Num_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); } 这里有个要注意的,根据原理图可以看出数码管一次只能输出一位数组,所以如果是多位的必须使用扫描的方式输出,缩短切换的间隔,就可以达到不闪烁的效果。 //输出封装 void DisPlayNum(int n) { if (n 《 9999) { int i; int s; s = n; i=0; for (i=0;i《4;i++) { GPIO_ResetBits(GPIOA,GPIO_Pin_All); switch (i) { case 0: GPIO_SetBits(GPIOA,GPIO_Pin_5); break; case 1: GPIO_SetBits(GPIOA,GPIO_Pin_7); break; case 2: GPIO_SetBits(GPIOA,GPIO_Pin_8); break; case 3: GPIO_SetBits(GPIOA,GPIO_Pin_11); break; } switch (s % 10) { case 0: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_4); break; case 1: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_9|GPIO_Pin_10); break; case 2: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_9); break; case 3: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_9); break; case 4: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10); break; case 5: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_6); break; case 6: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_6); break; case 7: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_9); break; case 8: GPIO_SetBits(GPIOA,GPIO_Pin_2); break; case 9: GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0); break;} s = s / 10; delay_ms(1); if (s==0) break;}}} |
|
来自: goodwangLib > 《数码管》