求大神支招啊,我这个程序进不去中断时怎么回事啊
时间:10-02
整理:3721RD
点击:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]=
{
~0x3F,~0x06,~0x5B,~0x4F,
~0x66,~0x6D,~0x7D,~0x07,
~0x7F,~0x6F
};
uchar DUAN_table[3];
uchar t;
uint num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
if(t==20)
{
t=0;
num=num++;
}
DUAN_table[0]=~table[num/100];
DUAN_table[1]=~table[num%100/10];
DUAN_table[2]=~table[num%100%10];
P2=0x01;
P0=DUAN_table[0];
delay(2);
P2=0x02;
P0=DUAN_table[1];
delay(2);
P2=0x04;
P0=DUAN_table[2];
delay(2);
}
void init()
{
num=0;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void main()
{
init();
while(1)
{
display();
}
}
void time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
处理三个delay(2)的时候很有可能t=20,这样将无法执行num++,把它放到中断中就可以了,每次中断都比较t的值。
#define uint unsigned int
#define uchar unsigned char
uchar code table[]=
{
~0x3F,~0x06,~0x5B,~0x4F,
~0x66,~0x6D,~0x7D,~0x07,
~0x7F,~0x6F
};
uchar DUAN_table[3];
uchar t;
uint num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
if(t==20)
{
t=0;
num=num++;
}
DUAN_table[0]=~table[num/100];
DUAN_table[1]=~table[num%100/10];
DUAN_table[2]=~table[num%100%10];
P2=0x01;
P0=DUAN_table[0];
delay(2);
P2=0x02;
P0=DUAN_table[1];
delay(2);
P2=0x04;
P0=DUAN_table[2];
delay(2);
}
void init()
{
num=0;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void main()
{
init();
while(1)
{
display();
}
}
void time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
- void time() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- t++;
- if(t==20)
- {
- t=0;
- num=num++;
- }
- }
- 删除void display()中的有关代码
处理三个delay(2)的时候很有可能t=20,这样将无法执行num++,把它放到中断中就可以了,每次中断都比较t的值。
问题已解决,谢谢大神指点!