qq_29534787
qq_29534787
采纳率0%
2021-02-25 18:24

怎么让三个数字不重叠显示?

这是下面程序(三数字个叠在一起了)

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int

typedef unsigned char u8;
typedef unsigned int u16;

u8 code smgduan[] = {0x08,0x0C,0x08,0x08,
                     0x08,0x08,0x08,0x7F,
                     0x38,0x24,0x22,0x10,
                     0x08,0x04,0x3E,0x00,
                     0x38,0x24,0x10,0x08,
                     0x10,0x24,0x38,0x00};

void delay(u16 a)
{
    while(a--);
}

u8 i;

void DigDisplay()
{
    for(i = 0;i < 8;i++)
    {
        switch(i)
        {
            case(0):
                P0 = 0xFE;break;
            case(1):
                P0 = 0xFD;break;
            case(2):
                P0 = 0xFB;break;
            case(3):
                P0 = 0xF7;break;
            case(4):
                P0 = 0xEF;break;
            case(5):
                P0 = 0xDF;break;
            case(6):
                P0 = 0xBF;break;
            case(7):
                P0 = 0x7F;break;
            }
            P2 = smgduan[i];
            delay(100);
        }
}

void DigDisplay2()
{
    u8 b;
    for(b = 0;b < 8;b++)
    {
        switch(b)
        {
            case(0):
                P0 = 0xFE;break;
            case(1):
                P0 = 0xFD;break;
            case(2):
                P0 = 0xFB;break;
            case(3):
                P0 = 0xF7;break;
            case(4):
                P0 = 0xEF;break;
            case(5):
                P0 = 0xDF;break;
            case(6):
                P0 = 0xBF;break;
            case(7):
                P0 = 0x7F;break;
            }
            P2 = smgduan[b + 8];
            delay(100);
        }
}

void DigDisplay3()
{
    u8 c;
    for(c = 0;c < 8;c++)
    {
        switch(c)
        {
            case(0):
                P0 = 0xFE;break;
            case(1):
                P0 = 0xFD;break;
            case(2):
                P0 = 0xFB;break;
            case(3):
                P0 = 0xF7;break;
            case(4):
                P0 = 0xEF;break;
            case(5):
                P0 = 0xDF;break;
            case(6):
                P0 = 0xBF;break;
            case(7):
                P0 = 0x7F;break;
            }
            P2 = smgduan[c + 16];
            delay(100);
        }
}
void main()
{
    while(1)
    {                
        DigDisplay();
        DigDisplay2();
        DigDisplay3();    
    }    
}
 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • peng450 peng450 2月前

    试试清屏后再加个延时再打印下一个

    点赞 评论 复制链接分享
  • xianfajushi 智者知已应修善业 2月前

    显示延时之后清屏一下

    P2 = smgduan[i];
                delay(100);

    p2=p0=255;或者p2=p0=0;

    这样试看

    另外数组是否正确

    可参https://blog.csdn.net/xianfajushi/article/details/106965367

    点赞 评论 复制链接分享