发新帖我要提问
12
返回列表
打印

求救:一个数码管的部分笔画相对较暗 原因

[复制链接]
楼主: sunbo19845
手机看帖
扫描二维码
随时随地手机跟帖
21
目前公司提出节约成本,故而提出把数码管的8段码的电阻取消,改为在公共脚串接.但在写程序出现开多段和少段时亮度不同的情况.现在我有想到反过来扫描,即扫段码(通常我们是扫描位码).但想了很久也没有想出应该如何编写程序.不知各位有没有更好的程序方法来解决这种问题.常用接法:

简化后接法:


参考代码:
void display_scan(void)
{
    unsigned char i;
    P1 &= Bin(11111110);
    P1 |= Bin(11111000);
    P2 &= Bin(00000000);
    P3 &= Bin(01100111);
    P3 |= Bin(01100110);  //关闭段码和位码,如共阳数码管(公共脚置低,段码置高)
//======================================//
    for(i = 0;i < 4;i ++)
    {
        r_dis_data = table_seg[r_dis_buff];    //查LED段码表
    }
    switch (r_dig_bit)                                      //在公共端接限流电阻,在数码管位数少时布线时有优势
    {
        case 1:
            p_seg_a = 0;   //扫描a段
            // if(r_dis_data[0] & 0x01) p_dig_1 = 1;  //如果r_dis_data[0]第0位为高,则需要点亮,反之则不点亮
            // if(r_dis_data[1] & 0x01) p_dig_2 = 1;
            // if(r_dis_data[2] & 0x01) p_dig_3 = 1;
            // if(r_dis_data[3] & 0x01) p_dig_4 = 1;
            // if(r_dis_buff[4] & 0x01) p_dig_5 = 1;
            // if(r_dis_buff[5] & 0x01) p_dig_6 = 1;
                        //i=0x01;
                        
            break;
        case 2:
            p_seg_b = 0;
            break;
        case 3:
            p_seg_c = 0;
            break;
        case 4:
             p_seg_d = 0;
            break;
        case 5:     
            p_seg_e = 0;
            break;
        case 6:
            p_seg_f = 0;
            break;
        case 7:
            p_seg_g = 0;
            break;
        case 8:
            p_seg_h = 0;
            break;
        default:
            keyscan_process();      //按键扫描
            break;
    }
        if((r_dig_bit<9)&&(r_dig_bit))
        {
        
                i=0x01<<(r_dig_bit-1);
            if(r_dis_data[0] & i) p_dig_1 = 1;
             if(r_dis_data[1] & i) p_dig_2 = 1;
             if(r_dis_data[2] & i) p_dig_3 = 1;
             if(r_dis_data[3] & i) p_dig_4 = 1;
             if(r_dis_buff[4] & i) p_dig_5 = 1;
             if(r_dis_buff[5] & i) p_dig_6 = 1;               
               
                        
        }
        
        
    r_dig_bit ++;
    if(r_dig_bit >= 9)    //扫描时基
    r_dig_bit = 0;
}

可以看看我发的贴子:
http://www.amobbs.com/thread-5534576-1-1.html
http://www.amobbs.com/thread-5576556-1-1.html

有外部链接,如果不合适,请版主删除。。。。

使用特权

评论回复
22
小小怪下士| | 2015-11-9 23:03 | 只看该作者
消隐即可解决...

使用特权

评论回复
23
zhaoyu2005| | 2015-11-10 08:36 | 只看该作者

消隐有毛用,如果按位扫描,这个电路不管红色还是绿色,都会出现亮度不匀,如果段的一致性比较好,那只有位之间的亮度会不匀,1 和 8对比很明显,如果段的一致性不好,段的亮度差别也会很明显。如果按段扫,段之间的亮度差异会小些,但是四位都有数字和只一位有数字时,亮度差异也会大。所以段限流效果好

使用特权

评论回复
24
lvyunhua| | 2015-11-10 11:27 | 只看该作者
你动态扫描吗,还是静态显示的。

使用特权

评论回复
25
autopccopy| | 2015-11-10 12:48 | 只看该作者
lvyunhua 发表于 2015-11-10 11:27
你动态扫描吗,还是静态显示的。

明显是动态扫描。

就是数码管的各段LED性能不一致导致的,因为该种接法是每个字的各段是纯并联。若果各段LED特性一致,不会造成单个字的各段亮度有差异,只会不同字之间有不同。按13、14楼可解决。:)


(364)

使用特权

评论回复
26
ocon| | 2015-11-10 14:16 | 只看该作者
autopccopy 发表于 2015-11-10 12:48
明显是动态扫描。

就是数码管的各段LED性能不一致导致的,因为该种接法是每个字的各段是纯并联。若果各 ...

从图上看用的是位扫描,LED电流的不足放大了压降的差异。不改电路的前提下有三种办法可改善亮度差异:换用红色LED;减小每个位三极管发射极上串接的电阻;改用段驱动的方式;

使用特权

评论回复
27
加油吧小鱼儿| | 2015-11-10 15:28 | 只看该作者
驱动能力不够吧,你程序是怎么写的?

使用特权

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

本版积分规则