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

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条回答
oyl
1楼-- · 2019-07-16 09:08
你用动态扫描一下,自己试试
josen33860
2楼-- · 2019-07-16 09:57
嘿嘿。试过。我觉得不该加P3=0x00;全加上的话,就会导致。每次都把4个数码管打开。那样别的位在变化时,就会全部变。虽然因为扫描的快。眼睛只能看见每个管都在闪。但是把P3=0x00;去掉。就不会出现了。只是不明白写这程序的人。这句语句的含义。不过还是按照我自己的理解来写的好。
草根白骨精
3楼-- · 2019-07-16 15:31
可能是他搞外部是高驱动有效,这句就是正确的,目的是为了消隐,程序需要结合硬件来分析确定
lovezjf234
4楼-- · 2019-07-16 20:35
 精彩回答 2  元偷偷看……
josen33860
5楼-- · 2019-07-17 00:01
lovezjf234 发表于 2012-8-16 18:53
消隐,写代码一般按照实验效果去最好,很多东西不需要追究的特别清楚,每个人都有自己的理解方法。只要结果 ...

是的。不过我理解了。这四句是要去掉才会消隐地。用程序的硬件电路验证过了。看懂别人,再按自己的思路来实现自己要的。这是我的学习方法。哈哈
xuge7837
6楼-- · 2019-07-17 05:57
跟选用的数码管是共阴还是共阳有关系,楼上的朋友说的消隐是正确的。一般每次更改数码管的显示值的时候,需要先关闭,在写到八个引脚,在开启。效果才会好。

一周热门 更多>