新手求探讨数码管显示问题

2019-07-16 04:53发布

找了一段数码管显示0-9999的程序。我的电路是p3高4位控制位选,p0控制段。个人觉得里面有些是多余的。求探讨。看注释。

#include<reg52.h>
#define  uchar unsigned  char
#define  uint  unsigned  int
void x_ms_delay(uint ms);
uchar        led_discode[11]={0xc0,0xf9,0xa4,0xb0,0x99,
                       0x92,0x82,0xf8,0x80,0x90,0xff};

void led_display(uint dis_data);
void main(void)
{
    uchar i;
    uint number;
    P0=0Xff;
        P3=0X00;                     //关闭所有数码管(个人觉得这两句是没必要的,完全不影响显示)
        for(number=0;number<10000;number++)
        {
           for(i=0;i<30;i++)  
           led_display(number);
        }
}

void led_display(uint dis_data)   (下面有4个p3=0x00;为什么要加?不要这4个。显示效果是会更好的。网上有关于余辉的说法,但是个人觉得,只需点亮所需的,然后一直扫描就可以达到显示的效果。何须点亮,关闭,再扫描?)
{

    uchar qian_bit,bai_bit,shi_bit,ge_bit;
        qian_bit=dis_data/1000;
    P0=led_discode[qian_bit];                //显示千位
        P3=0Xe0;
        x_ms_delay(1);
        P3=0X00;

        bai_bit=(dis_data%1000)/100;
    P0=led_discode[bai_bit];                 //显示百位
        P3=0Xd0;
    x_ms_delay(1);
    P3=0X00;
       
        shi_bit=(dis_data%100)/10;
    P0=led_discode[shi_bit];                 //显示十位
        P3=0X70;
    x_ms_delay(1);
    P3=0X00;

        ge_bit =(dis_data%10);
    P0=led_discode[ge_bit];                  //显示个位
        P3=0Xb0;
    x_ms_delay(1);
    P3=0X00;
}

//毫秒级延时子程序
void x_ms_delay(uint ms)
{
    uint  us;
    while(ms--)
    {
        for(us=500;us>0;us--);
    }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
josen33860
2019-07-16 09:57
嘿嘿。试过。我觉得不该加P3=0x00;全加上的话,就会导致。每次都把4个数码管打开。那样别的位在变化时,就会全部变。虽然因为扫描的快。眼睛只能看见每个管都在闪。但是把P3=0x00;去掉。就不会出现了。只是不明白写这程序的人。这句语句的含义。不过还是按照我自己的理解来写的好。

一周热门 更多>