定时器控制数码管哪里出了问题?求帮忙
sbit LE=P1^0;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code dispbit[]={0xf7,0xfb,0xfd,0xfe};
unsigned char m,n,ledout[4];
void delay(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=102;b>0;b--)
for(a=20;a>0;a--);
}
main()
{
int i;
n=0;
TMOD=0x01;
TH0=(65536-50000000)/256;
TL0=(65536-50000000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(n==20)
{
n=0;
m++;
}
ledout[0]=tab[m%10000/1000];
ledout[1]=tab[m%1000/100];
ledout[2]=tab[m%100/10];
ledout[3]=tab[m%10];
for(i=0;i<4;i++)
{
LE=0;
P0=ledout[i];
LE=1;
P2=dispbit[i];
delay();
}
LE=0;
}
}
void T0_time(void) interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
主程序里TH0=TL0=(65536-50000000)? 还有就是interrupt之后是3?这是定时器1的中断啊,而程序里面用的是定时器0? 还有问问题的时候可以把问题说出来,比如是灯不亮,还是乱码什么之类的。
这程序乱码的,谢谢高手
我把程序改了后发现数码管顺序不对
#include<reg52.h>
sbit LE=P1^0;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code dispbit[]={0xf7,0xfb,0xfd,0xfe};
unsigned char m,n,ledout[4];
void delay(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=102;b>0;b--)
for(a=20;a>0;a--);
}
main()
{
int i;
n=0;
TMOD=0x01;
TH0=(65536-50000000)/256;
TL0=(65536-50000000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(n==20)
{
n=0;
m++;
}
ledout[0]=tab[m%10000/1000];
ledout[1]=tab[m%1000/100];
ledout[2]=tab[m%100/10];
ledout[3]=tab[m%10];
for(i=0;i<4;i++)
{
LE=0;
P0=ledout;
LE=1;
P2=dispbit;
delay();
}
LE=0;
}
}
void T0_time(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
}
数码管从右往左第二个到第五个亮,第一个不亮,为什么?
最好不要把数组直接赋值给P0,这样很可能显示的是数组的地址值,而不是你所想得到的值