OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3038|回复: 16

f1单片机IO口驱动共阳的四位数码管无法控制位选,并且无法正常显示(求助)

[复制链接]

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
发表于 2020-5-9 09:51:37 | 显示全部楼层 |阅读模式
//
void SMG_Init()
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   //数码管端口位  端口A
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);   //数码管端口段  端口B
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);   //数码管端口段  端口C
        //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);  
         //数码管段的引脚   PC4 PC5
        GPIO_InitStructure.GPIO_Pin=GPIO_PinSource4|GPIO_PinSource5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        //GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);
       
        //数码管段的引脚    PB0 PB1 PB10 PB11 PB12 B13
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        //GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);
        //GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);
    //GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);    //数码管的段
       
        //数码管位的引脚    PA4 PA5 PA6 PA7   PB13为数码管小数点的引脚
        GPIO_InitStructure.GPIO_Pin=GPIO_PinSource4|GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        //GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
        //GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  //位选拉低
        //GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);                 
}

//
void DisPlayNum(u32 n)
{       
       
        u32 s,i=0;
        s=n;
        if(s<9999)
        {

             for(i=0;i<4;i++)
            {

                  GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);
                  GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);    //数码管的段
                  GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);          //数码管的位
             switch(i)
                        {
                               
                           case 0:   
                                        
                                         GPIO_SetBits(GPIOA,GPIO_Pin_4);
                                        
                                          
                           break;
                           case 1:   
                                       
                                         GPIO_SetBits(GPIOA,GPIO_Pin_5);
                                        
                           break;
                           case 2:   
                                        
                                         GPIO_SetBits(GPIOA,GPIO_Pin_6);
                                    
                           break;
                           case 3:   
                                        
                                         GPIO_SetBits(GPIOA,GPIO_Pin_7);
                                    
                           break;
                        }
                     switch(s%10)
                        {
                               
                                case 0:
                                        GPIO_SetBits(GPIOB,GPIO_Pin_12);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_13);
                                break;
                              case 1:
                                        GPIO_SetBits(GPIOC,GPIO_Pin_4);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_13);
                             break;
                              case 3:
                                        GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_13);                               
                                        break;
                                case 4:
                                        GPIO_SetBits(GPIOC,GPIO_Pin_4);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_10);
                                       GPIO_SetBits(GPIOB,GPIO_Pin_13);
                                        break;
                                case 5:
                                        GPIO_SetBits(GPIOC,GPIO_Pin_5);
                                       GPIO_SetBits(GPIOB,GPIO_Pin_10);
                                       GPIO_SetBits(GPIOB,GPIO_Pin_13);                                                                
                                        break;
                                case 6:
                                        GPIO_SetBits(GPIOC,GPIO_Pin_5);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_13);
                                        break;
                                case 7:
                                       GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
                                       GPIO_SetBits(GPIOB,GPIO_Pin_13);
                                        break;
                                case 8:
                                   GPIO_SetBits(GPIOB,GPIO_Pin_13);                       
                                   break;
                                case 9:
                                        GPIO_SetBits(GPIOB,GPIO_Pin_10);
                                        GPIO_SetBits(GPIOB,GPIO_Pin_13);                               
                                        break;
                                //default:   break;
                        }
                         s/=10;
                        delay_ms(3000);
                        if(s==0)
                        break;
                          //delay_ms(3000);
        }
         
                       
        }
                       
               
}

//这是电路图 位选对应的A4-A7

现在数码管出现的状况是无论位选是高低电平都亮,并且无法选中某一位!(共阳)

9.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-1-5
在线时间
1 小时
发表于 2020-5-9 09:51:37 | 显示全部楼层
帮顶,相信大家会帮您解答的
回复 支持 反对

使用道具 举报

0

主题

42

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-6-25
在线时间
0 小时
发表于 2020-5-9 09:51:50 | 显示全部楼层
帮顶,原子哥,来溜一下。。。
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-9 10:20:04 | 显示全部楼层
这个中不是要动态扫描吗
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-9 11:32:26 | 显示全部楼层
三叶草 发表于 2020-5-9 10:20
这个中不是要动态扫描吗

我就是用的动态扫描,然而数码管位选高低电平都选中了,导致无法位选某一位,还有上电的时候不亮,需要手动触摸到位选接的电阻的位置才亮,找不出啥原因
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-9 11:33:38 | 显示全部楼层
testacount 发表于 2020-5-9 09:51
帮顶,相信大家会帮您解答的

哈哈,好的
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-9 13:14:28 | 显示全部楼层
mynameisqgj 发表于 2020-5-9 11:32
我就是用的动态扫描,然而数码管位选高低电平都选中了,导致无法位选某一位,还有上电的时候不亮,需要手 ...

电路是不是有问题
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-9 13:26:03 | 显示全部楼层
三叶草 发表于 2020-5-9 13:14
电路是不是有问题

我现在也在找电路的问题,我软件实在找不出问题,硬件那边:说他们没问题。。。
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-9 16:01:52 | 显示全部楼层
没有接地的原因吧我觉得这个可能是由于处于中间电平导致的
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-9 16:31:17 | 显示全部楼层
三叶草 发表于 2020-5-9 16:01
没有接地的原因吧我觉得这个可能是由于处于中间电平导致的

你好,请问一下你所指的接地指的哪儿?
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-11 18:07:50 | 显示全部楼层
三叶草 发表于 2020-5-9 16:01
没有接地的原因吧我觉得这个可能是由于处于中间电平导致的

请教一下,你那天说的那个没接地指的哪儿,我实在找不出问题在哪儿!能指导一下嘛?
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-2-21
在线时间
18 小时
发表于 2020-5-12 12:15:08 | 显示全部楼层
动态扫描的话,要做一个字形码,然后付值给每1段,轮流扫描每1位。参照51的例程,网上一大把。
回复 支持 反对

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2020-5-12 12:23:03 | 显示全部楼层
本帖最后由 brucewoo 于 2020-5-12 12:24 编辑

把图中的电阻全部拿掉短接试试。
或者说,你先排除电路问题,逐个数码管LED的引脚测试,看看能不能亮

回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-12 14:14:30 | 显示全部楼层
brucewoo 发表于 2020-5-12 12:23
把图中的电阻全部拿掉短接试试。
或者说,你先排除电路问题,逐个数码管LED的引脚测试,看看能不能亮

触碰到位选接的电阻的时候灯能亮,但是不触碰图中位选所接的电阻的时候就不亮,我测了各段的电压,发现AB段的电压不正常
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-12 14:15:31 | 显示全部楼层
XIAOGANG2007 发表于 2020-5-12 12:15
动态扫描的话,要做一个字形码,然后付值给每1段,轮流扫描每1位。参照51的例程,网上一大把。

就是按照网上的思路来的,但是不能正常显示
回复 支持 反对

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2020-5-12 14:19:14 | 显示全部楼层
本帖最后由 brucewoo 于 2020-5-12 14:22 编辑
mynameisqgj 发表于 2020-5-12 14:14
触碰到位选接的电阻的时候灯能亮,但是不触碰图中位选所接的电阻的时候就不亮,我测了各段的电压,发现AB ...

可能是三极管基极电流不够,像我刚才说的,电阻全部拿掉,短接试试,这个电压不会烧数码管的,放心试,就算坏了也是一块钱的事情。
还有,试试连三极管都不要,共阳端直接用IO输出高电平驱动, 我用STM8S003就是这样驱动数码管的,三极管、电阻全部没有,直接连IO,亮度没问题。
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-5-12 14:32:52 | 显示全部楼层
brucewoo 发表于 2020-5-12 14:19
可能是三极管基极电流不够,像我刚才说的,电阻全部拿掉,短接试试,这个电压不会烧数码管的,放心试,就 ...

基极的电流0.45mA左右,能否达到驱动LED的条件呢?你说的方法,我没法去改变板子,这板子不是实验板。但是可以不要电阻去测一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 17:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表