- 论坛徽章:
- 0
|
52单片机数码管动态扫瞄问题
题目要求 T0定时器控制L0灯以0.2s闪烁,T1定时器控制数码管实现数码管前两位59s循环计时。问题是灯的那部分没问题,而数码管显示就有问题了,十位的数码管闪烁一下,而个位没问题,一直亮着,计时没问题就是十位数码管为什么会闪烁呢???它也应该一直亮的
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint num1=0,num2=0,i=0;
sbit L0=P1^0;
sbit WE=P2^1;
sbit DU=P2^0;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{TMOD=0x11;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{if(num1==4)
{L0=~L0;num1=0;}
if(num2==20)
{num2=0;
P0=0xff;
WE=1;
P0=0xfe;
WE=0;
DU=1;
P0=table[i/10];
DU=0;
delayms(5);
P0=0xff;
WE=1;
P0=0xfd;
WE=0;
DU=1;
P0=table[i%10];
DU=0;
delayms(5);
i++;
if(i==60)
i=0;
}
}
}
void T0_timer()interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num1++;
}
void T1_timer()interrupt 3
{TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
num2++;
}
按郭天祥的代码来显示就没问题,不知道为什么
|
|