打印

数码管亮度不一致

[复制链接]
25136|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现在是这样的,选了芯片6个IO口连上了6个数码管的共阳极,直连,没有任何电阻。然后我只点亮一个,共阳极电压为1.3.点亮3个,电压为0.9,点亮6个,电压为0.4.测量的都是平均电压,示波器测的共阳极电压为3V左右,大部分时间为低电平,只有开启那一会是高电平。简单来说波形是正常的。const char num[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};//数码管数字0-9,未点亮小数点,需点亮每个小数点则&0xdf

void Timer2Int(void) interrupt 5  //定时时间为2.5ms左右,数码管未发生闪烁。
{
        static char i=0;       
        TF2 = 0;   //溢出清零
//        flush_flag=1;       
        i++;
        switch(i){
                case 1:brighdig(1,1,(current/100));break;
                case 2:brighdig(1,2,(current/10)%10);break;
                case 3:brighdig(1,3,(current%10));break;
                case 4:brighdig(0,1,(n/100));break;
                case 5:brighdig(0,2,(n/10)%10);break;
                case 6:brighdig(0,3,(n%10));break;
        }
        if(i>=6) i=0;                          
}

void brighdig(unsigned char flag,unsigned char number,unsigned int cur)
{       
        DIG21=0;        //数码管共阳极
        DIG22=0;
        DIG23=0;
        DIG11=0;
        DIG12=0;
        DIG13=0;
        if(flag){
                switch(number){
                        case 1:        DIG21=1;
                                        display_num(num[cur]&0xdf);        //点亮小数点
                                        break;
                        case 2:        DIG22=1;
                                        display_num(num[cur]);
                                        break;
                        case 3:        DIG23=1;
                                        display_num(num[cur]);
                                        break;         
                }
        }
        else{
                 switch(number){
                        case 1:        DIG11=1;
                                        display_num(num[cur]&0xdf);
                                        break;         
                        case 2:        DIG12=1;
                                        display_num(num[cur]);       
                                        break;
                        case 3:        DIG13=1;
                                        display_num(num[cur]);
                                        break;
                }
        }       
}

void display_num(unsigned char num)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                CLK=0;                  
                if(num&0X01)
                {
                        DAS=1;
                }
                else {
                        DAS=0;
                }               
                CLK=1;                          
                num=num>>1;
        }

}


关闭了其它中断,只有定时器中断在工作。供电电压为3V,显示就如图。只有0是暗的,其它数字很正常。扫描时间也改过,还是一样。然后3.3V供电的话亮度是比3V供电好点,现在就是想3V供电有没有扫描办法解决这个问题。

U~T6{}XAEQ%MDZH34X2(F8J.png (309.51 KB )

LED与芯片,74HC164连接

LED与芯片,74HC164连接

QQ图片20200914154854.jpg (37.21 KB )

0很暗,其它数字很亮

0很暗,其它数字很亮

QQ图片20200914154846.jpg (116.81 KB )

所有的0都暗

所有的0都暗

使用特权

评论回复

相关帖子

沙发
skw168| | 2020-9-15 10:36 | 只看该作者
本帖最后由 skw168 于 2020-9-15 10:38 编辑

每次只点亮数码管的一段,6*8=48段一个循环,还有必须要接限流电阻

使用特权

评论回复
板凳
潜力变实力| | 2020-9-15 11:06 | 只看该作者
试一下把显示部分直接放到while里面呢?不要放在定时器里面

使用特权

评论回复
地板
爱情海玩偶|  楼主 | 2020-9-15 11:23 | 只看该作者
潜力变实力 发表于 2020-9-15 11:06
试一下把显示部分直接放到while里面呢?不要放在定时器里面

试过,原来就是在while(1)里面

使用特权

评论回复
5
爱情海玩偶|  楼主 | 2020-9-15 11:24 | 只看该作者
skw168 发表于 2020-9-15 10:36
每次只点亮数码管的一段,6*8=48段一个循环,还有必须要接限流电阻

我觉得不一定是这个问题,但是我后期可以试试,因为只有数字0显示异常

使用特权

评论回复
6
潜力变实力| | 2020-9-15 11:35 | 只看该作者
爱情海玩偶 发表于 2020-9-15 11:23
试过,原来就是在while(1)里面

试一下显示一下8是否正常,然后带小数点

使用特权

评论回复
7
爱情海玩偶|  楼主 | 2020-9-15 11:40 | 只看该作者
潜力变实力 发表于 2020-9-15 11:35
试一下显示一下8是否正常,然后带小数点

正常的

使用特权

评论回复
8
爱情海玩偶|  楼主 | 2020-9-15 11:43 | 只看该作者
潜力变实力 发表于 2020-9-15 11:35
试一下显示一下8是否正常,然后带小数点

这个就是在while(1)里面显示的

QQ图片20200915114252.jpg (166.51 KB )

QQ图片20200915114252.jpg

使用特权

评论回复
9
潜力变实力| | 2020-9-15 13:21 | 只看该作者
爱情海玩偶 发表于 2020-9-15 11:43
这个就是在while(1)里面显示的

确认一下是不是0的编码不对,8都可以正常显示了,就可以排除电路的驱动能力不够的问题。

使用特权

评论回复
10
爱情海玩偶|  楼主 | 2020-9-15 13:49 | 只看该作者
潜力变实力 发表于 2020-9-15 13:21
确认一下是不是0的编码不对,8都可以正常显示了,就可以排除电路的驱动能力不够的问题。 ...

3.3V电压的话0显示亮度很正常,比3V的亮许多,我现在就是想解决3V供电数字0为啥暗好多,基本上都快看不清了

使用特权

评论回复
11
ayb_ice| | 2020-9-15 16:24 | 只看该作者
这种程序框架都不对,显示应该设置缓冲区,中断只管从缓冲区取数据显示,做简单的动作,主程序要显示什么就往缓冲区里填

使用特权

评论回复
12
ayb_ice| | 2020-9-15 16:26 | 只看该作者
爱情海玩偶 发表于 2020-9-15 11:24
我觉得不一定是这个问题,但是我后期可以试试,因为只有数字0显示异常

这不是浪费时间吗

使用特权

评论回复
13
DSP之神| | 2020-9-15 17:20 | 只看该作者
检查一下电路

使用特权

评论回复
14
爱情海玩偶|  楼主 | 2020-9-15 17:27 | 只看该作者
ayb_ice 发表于 2020-9-15 16:24
这种程序框架都不对,显示应该设置缓冲区,中断只管从缓冲区取数据显示,做简单的动作,主程序要显示什么就 ...

不太懂,我是通过ad采样来更新数值,采样是60ms更新一次数值。我更新的数值是一个全局变量。

使用特权

评论回复
15
爱情海玩偶|  楼主 | 2020-9-15 17:28 | 只看该作者

电路很简单,就是如图所示,电压啥的都测过,没发现区别

使用特权

评论回复
16
cjseng| | 2020-9-15 20:51 | 只看该作者
芯片驱动能力有限,显示不同数字,亮度不一致,受芯片IO总电流限制,笔画越多,亮度越暗。
还是串电阻吧,能有效改善。

使用特权

评论回复
17
ayb_ice| | 2020-9-16 08:28 | 只看该作者
爱情海玩偶 发表于 2020-9-15 17:27
不太懂,我是通过ad采样来更新数值,采样是60ms更新一次数值。我更新的数值是一个全局变量。 ...

就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变量(缓冲区)取数据,直接显示,要显示的内容不是他管的事,那是其它任务的事

使用特权

评论回复
18
爱情海玩偶|  楼主 | 2020-9-16 08:50 | 只看该作者
cjseng 发表于 2020-9-15 20:51
芯片驱动能力有限,显示不同数字,亮度不一致,受芯片IO总电流限制,笔画越多,亮度越暗。
还是串电阻吧, ...

但是数字8不影响的

使用特权

评论回复
19
爱情海玩偶|  楼主 | 2020-9-16 09:14 | 只看该作者
ayb_ice 发表于 2020-9-16 08:28
就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变 ...

我上次看的别人的代码就是有个缓存数组,里面存的值就是要刷新的值,然后更新的话就是去数组里取值

使用特权

评论回复
20
icecut| | 2020-9-17 20:23 | 只看该作者
ayb_ice 发表于 2020-9-16 08:28
就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变 ...

你说的, 我视频讲过, 我确信他们不会写.....

亮度有问题,很简单,要么驱动电路电压不稳. 要么点亮的时长不固定. 上示波器测量一下不就ok了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

461

帖子

1

粉丝