下面是一个数码管动态显示的程序
#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效果更好。不知道为啥
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
实际使用时就是先全熄灭,然后再段选,这样就不会有残影。仿真跟实物不一样,自己实际试验一下吧。仿真的时候时间过得很慢,不会产生视觉残留,所以看不出效果。
一周热门 更多>