高级会员

- 积分
- 503
- 金钱
- 503
- 注册时间
- 2017-7-24
- 在线时间
- 117 小时
|
5金钱
本人尝试着自己写直接驱动数码管代码,但是发现了一个很无语的问题,就是四个数第一个总是不亮,且带有轻微鬼影,网上查到的许多方法实验后没用。比如显示2981,981正常显示,但是2就特别暗且带鬼影。求大神指点!!
附上代码:
SMG.c 代码
#include "SMG.h"
#include "stm32f10x.h"
#include "delay.h"
void SMG_Init(void)
{
//为方便大家看,此处代码省略,其作用是定义IO口 PB4-PB15,其中PB4-PB7是位选,PB8-PB15是段选
}
void DisPlayNum(int n)
{
if (n < 9999)
{ int i;
int s;
s = n;
i=0;
for (i=0;i<4;i++)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7| //Reset所有IO口
GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|
GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 );
switch (i) //位选
{
case 0:
GPIO_SetBits(GPIOB,GPIO_Pin_7);
break;
case 1:
GPIO_SetBits(GPIOB,GPIO_Pin_6);
break;
case 2:
GPIO_SetBits(GPIOB,GPIO_Pin_5);
break;
case 3:
GPIO_SetBits(GPIOB,GPIO_Pin_4);
break;
}
switch (s % 10) //段选
{
case 0:
GPIO_SetBits(GPIOB,GPIO_Pin_14|GPIO_Pin_15); // 0
break;
case 1:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // 1
break;
case 2:
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_13|GPIO_Pin_15); // 2
break;
case 3:
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15); // 3
break;
case 4:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15); // 4
break;
case 5:
GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_15); // 5
break;
case 6:
GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_15); // 6
break;
case 7:
GPIO_SetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // 7
break;
case 8:
GPIO_SetBits(GPIOB,GPIO_Pin_15); // 8
break;
case 9:
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_15); // 9
break;
}
s = s / 10;
delay_ms(5);
if (s==0)
break;
}
}
}
main.c代码:
此处省略include部分和Init部分
int main(void)
{
while(1)
{
DisPlayNum(2981);
delay_ms(5);
}
}
|
-
最佳答案
查看完整内容[请看2#楼]
好好看看PB4他的功能 PB4 I/O FT NJTRST 你不知道调试端口是不能直接作为IO口的么?
|