#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit d2=P2; //定義P2口LED。
sbit n1=P1^3; //定義P1^3口的LED燈。
void delay(int);
uint num;
uint table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x98,0x88,0x83,
0xc6,0xa1,0x86,0x8e
}; //控制數(shù)碼管段碼從0——F亮。
void main(void)
{
EA=1; //開總中斷開關
EX0=1; //開外部中斷0
IT0=0; //設置中斷觸發(fā)方式
while(1)
{
for(num=0;num<16;num++)
{
d2=0; //點亮數(shù)碼管
P0=table[num];
delay(12450); //延時閃爍。
d2=1; //關閉數(shù)碼管。
}
}
}
void delay(int z) //延時程序。
{
uint i,j;
for(i=z;i>0;i--)
for(j=2;j>0;j--);
}
void exter0() interrupt 0 //中斷程序。
{
n1=0; //打開P1^3口
delay(1); //延時。
}
我用的單片機是沒有鎖存器的,數(shù)碼管是共陽極的。與外部中斷相關的是P3.2口。
我用線把P3.2接地。按理來說,如果不拔掉這個線,中斷就沒有停止,也就回不了主程序中去。但是沒有,單片機還會回到主程序中去執(zhí)行數(shù)碼管的閃爍,一頓飯時間,數(shù)碼管就從6變?yōu)镃,只是數(shù)碼管閃爍得慢了很多,但并沒有停止。
我不明白這個程序哪里出錯了?