新人求教关于数码管消除残影的问题

2019-07-15 18:59发布

下面是一个数码管动态显示的程序


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define XY 0xff
#define time 10
sbit duanxuan=P2^1;
sbit weixuan=P2^2;
uchar code segcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint ms);
void main()
{   
   
  while(1)
  {
  weixuan=1;
  P0=0xfe;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[0];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  weixuan=1;
  P0=0xfd;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[1];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  weixuan=1;
  P0=0xfb;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[2];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  weixuan=1;
  P0=0xf7;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[3];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  weixuan=1;
  P0=0xef;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[4];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  weixuan=1;
  P0=0xdf;
  weixuan=0;
  P0=XY;
  duanxuan=1;
  P0=segcode[5];
  duanxuan=0;
  delayms(time);


   P0=0xff;


  }
}
void delayms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
    for(j=110;j>0;j--);
}




我认为XY 应该等于 0x00,因为在段选之前把所有二极管都置于不亮的状态,这样才可以消除残影。  但仿真结果是当time 小的时候(6个数码管看起来同时显示),XY=0xff效果更好。不知道为啥

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。