学习STM32有几天了,眼看时间要到了没空做出更加完美的镜子里的屏幕遂采取了最笨的办法,具体如下:
用到GPIO口 PB1~PB11共12个引脚因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出,其他设定为低位即可。
初始化GPIO B
void SHUMAG_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); }
根据镜像数码管自己写的共阳极代码,太费事,先用PS作了张图,然后一个一个写的,太累了。
void DisPlayNum(int n) { if (n < 9999) { int i; int s; s = n; i=0; for (i=0;i<2;i++) { GPIO_ResetBits(GPIOB,GPIO_Pin_All); switch (i) { case 0: GPIO_SetBits(GPIOB,GPIO_Pin_9); break; case 1: GPIO_SetBits(GPIOB,GPIO_Pin_8); break; case 2: GPIO_SetBits(GPIOB,GPIO_Pin_10); break; case 3: GPIO_SetBits(GPIOB,GPIO_Pin_11); break; } switch (s % 10) { case 0: GPIO_SetBits(GPIOB,GPIO_Pin_7); break; case 1: GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); break; case 2: GPIO_SetBits(GPIOB,GPIO_Pin_2|GPIO_Pin_5); break; case 3: GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_5); break; case 4: GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_4); break; case 5: GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_3); break; case 6: GPIO_SetBits(GPIOB,GPIO_Pin_3); break; case 7: GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5); break; case 8: GPIO_SetBits(GPIOB,GPIO_Pin_2); break; case 9: GPIO_SetBits(GPIOB,GPIO_Pin_6); break; } s = s / 10; Delay_Ms(1); if (s==0) break; } } } int count; int TimeCheck; int main(void) { SHUMAG_Init(); count =0; TimeCheck = 0; while(1) { DisPlayNum(count); TimeCheck++; Delay_Ms(5); if (TimeCheck > 100) { TimeCheck=0; count++; } } }
有没有大神能教教我的,自学有点困难 啊!!