微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求教关于数码管消除残影的问题

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

时间:10-02 整理:3721RD 点击:
下面是一个数码管动态显示的程序

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

共阳极的数码管是0x00点亮,0xff关闭。共阴极的相反。检查一下仿真图中数码管是共阴还是共阳。

忘了说了,是共阴极的

我觉得段选之前应该先全部熄灭才好吧,也就是0x00,但仿真出来0xff效果更好 也就是段选之前全亮了。想不通

实际使用时就是先全熄灭,然后再段选,这样就不会有残影。仿真跟实物不一样,自己实际试验一下吧。仿真的时候时间过得很慢,不会产生视觉残留,所以看不出效果。

好的,谢谢指点

看你数码管是共阳的还是共阴的

仿真毕竟是仿真,做个实物试试吧

感谢小编!感谢小编!感谢小编!感谢小编!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top