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

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效果更好。不知道为啥

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
huangdewen
1楼-- · 2019-07-15 20:46
共阳极的数码管是0x00点亮,0xff关闭。共阴极的相反。检查一下仿真图中数码管是共阴还是共阳。
愚蠢的萝卜
2楼-- · 2019-07-15 22:46
huangdewen 发表于 2014-7-28 10:52
共阳极的数码管是0x00点亮,0xff关闭。共阴极的相反。检查一下仿真图中数码管是共阴还是共阳。 ...

忘了说了,是共阴极
愚蠢的萝卜
3楼-- · 2019-07-16 00:55
 精彩回答 2  元偷偷看……
huangdewen
4楼-- · 2019-07-16 02:15
愚蠢的萝卜 发表于 2014-7-28 23:08
我觉得段选之前应该先全部熄灭才好吧,也就是0x00,但仿真出来0xff效果更好 也就是段选之前全亮了。想不 ...

实际使用时就是先全熄灭,然后再段选,这样就不会有残影。仿真跟实物不一样,自己实际试验一下吧。仿真的时候时间过得很慢,不会产生视觉残留,所以看不出效果。
愚蠢的萝卜
5楼-- · 2019-07-16 06:35
huangdewen 发表于 2014-7-29 15:48
实际使用时就是先全熄灭,然后再段选,这样就不会有残影。仿真跟实物不一样,自己实际试验一下吧。仿真的 ...

好的,谢谢指点
嵌入式linux工程
6楼-- · 2019-07-16 10:10
看你数码管是共阳的还是共阴的

一周热门 更多>