标题: 单片机数码管暗的原因 [打印本页]

作者: wklhwkl    时间: 2018-5-21 09:15
标题: 单片机数码管暗的原因
用的74HC164D:串行转并行,移位寄存器功能。
以下是代码。这代码在别人上的板子上能正常显示,在我的板子上,4个数码管都很暗,但是烧写好的程序就没问题,我没有写好的程序,以下代码如果只显示1个数码管就亮,两个就有点暗,4个时候就很暗了。延时调小也没有明显的变化。
D1-D4数码管COM1-4,shift_data数据发送端,ck时钟端

为啥会暗,有什么办法调高亮度吗?

sbit shift_data  = P2^3;
sbit ck             = P1^7;
sbit D1            = P3^2;
sbit D2            = P3^3;
sbit D3            = P3^4;
sbit D4            = P2^5;


void delay12us(uint Multiple )
{
   while(Multiple--)                        //每步为3us
   {         
        _nop_();
        _nop_();
    }       
}


void numerical_codes_tube(uchar wait_shift_data,uchar number)            //数码管
{
    uchar shiftsum;
    for(shiftsum=0;shiftsum<8;shiftsum++)
    {
        if(wait_shift_data&0x0)   
            shift_data=1;
        else                           
            shift_data=0;
        ck=0;
        ck=1;
        _nop_();
        wait_shift_data=_cror_(wait_shift_data,1);
    }
    switch(number)
    {
        case 0:D1=1;break;
        case 1:D2=1;break;
        case 2:D3=1;break;
        case 3:D4=1;break;
    }
    DELAY_Ms(4);
    D1=D2=D3=D4=0;
}

void display_four_bit_code(uchar iteam_code,uchar iteam_code1,uchar iteam_code2,uchar iteam_code3)
{
    numerical_codes_tube(iteam_code,0);
    numerical_codes_tube(iteam_code1,1);
    numerical_codes_tube(iteam_code2,2);
    numerical_codes_tube(iteam_code3,3);
}

void main()
{
    while(1)
    {
        display_four_bit_code(0x3c,0x3c,0x3c,0x3c);
    }
}                                                                                                                                                                                                 



作者: zhanghyg    时间: 2018-5-21 10:08
变暗是电流不够
作者: devcang    时间: 2018-5-21 14:32
共阴还是共阳的,公共脚上有限流吧,检查检查
作者: HC6800-ES-V2.0    时间: 2018-5-21 16:00
多个数码管显示,是扫描法,你说的现象,就是每次一个数码管亮的时间不够。在程序快速的执行中,数码管的显示,成了类似PWM波的情况,所以,数码管越多,每个分的占空比越小。
解决办法,是在你的一个数码管显示程序中,加上适当的延时,这个要自己试,延时太长,数码管会闪烁,延时太短,就会变暗。
作者: wklhwkl    时间: 2018-5-21 16:03
zhanghyg 发表于 2018-5-21 10:08
变暗是电流不够

解决了,我也想到是电流不够的。 IO口本来是双向口的,我强设置成推挽输出就搞定了。
作者: 爱爱爱    时间: 2018-5-21 16:32
是不是电阻接大了

作者: towanglong    时间: 2018-5-21 21:36
我之前也遇到过,先检查驱动IO口是否设置正确,硬件连接无误的情况下,是不会出现暗的情况。
作者: simfai    时间: 2018-5-21 23:28
看下是不是管子的电压和输出的电压不匹配?一般LED 1.8v 20mA就已经很亮了

作者: song19960220    时间: 2018-5-23 00:05
电阻太大,或者电压不稳
作者: llzzkkxl    时间: 2018-5-23 09:03
可以试着在单片机端口和数码管之间加8550开关器件以增大输入电流
作者: cch8860    时间: 2018-5-23 12:27
占空比没设对吧
作者: 15463safd    时间: 2018-5-23 13:08
可能是电阻过大,我自己焊单片机和数码管或液晶管脚一般会连一个滑动变阻器
作者: 华为    时间: 2018-5-23 13:22
延时程序是不是太长了
作者: jn1989    时间: 2018-5-23 13:40
注意是数码管电流不够,减小限流电阻或者用个开漏输出的管子驱动下
作者: BJSKYLONG    时间: 2018-5-23 14:02
扫描占比!
作者: HEARD    时间: 2018-5-23 14:30
连接数码管的驱动芯片和单片机口连接,仿真时暗的为什么?
作者: 研制就是好    时间: 2018-5-23 15:25
电流不够
作者: huabxbiab    时间: 2018-5-23 17:03
电流不够,看一下供电电压是不是不够




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1