原创 解决使用循环同时在数码管显示不同数字未亮块微亮问题

2014-10-22 21:05 690 1 1 分类: MCU/ 嵌入式

硬件采用2个锁存器分别控制使能脚与显示脚

有问题的代码如下:

#include <reg52.h>

#define UINT16 unsigned int
#define BYTE   unsigned char

sbit weBit = P1^6;//数码管使能
sbit duBit = P1^7;//数码显示

sbit du0 = P0^0;

BYTE digitArr[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    
BYTE weMask[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void Delayms(UINT16 time)        //@11.0592MHz
{
    BYTE  i, j;
    UINT16 k;

    for (k=0;k<time;k++)
    {
        i = 2;
        j = 199;
        do
        {
            while (--j);
        } while (--i);
    }
}


void main(void)
{
    UINT16 i=0;

    while(1)
    {
        for (i=0;i<8;i++)
        {
            P0=0;
            duBit = 0;
            weBit = 1;
            P0 = weMask;//选中第i个数码管,共8个
            weBit = 0;
            P0=0;
            duBit = 1;
            P0=digitArr;//给这个数码管送数据
            duBit = 0;//这行去掉显示就正常了
            Delayms(2);                            
        }
    }
}

问题在于当打开下一个使能时,数据锁存器的数据仍会送出去,因此在下一个数码管会显示上一个数码管的数据,解决办法就是将for循环最后的duBit=0去掉,此时循环中会去清当前显示内容,即显示全灭,然后再显示一个数码管数据,这样就能保证上个数据不会带到下个数据中,导致微亮问题

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条