#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
}; //控制数码管段码从0——F亮。
void main(void)
{
EA=1; //开总中断开关
EX0=1; //开外部中断0
IT0=0; //设置中断触发方式
while(1)
{
for(num=0;num<16;num++)
{
d2=0; //点亮数码管
P0=table[num];
delay(12450); //延时闪烁。
d2=1; //关闭数码管。
}
}
}
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); //延时。
}
我用的单片机是没有锁存器的,数码管是共阳极的。与外部中断相关的是P3.2口。
我用线把P3.2接地。按理来说,如果不拔掉这个线,中断就没有停止,也就回不了主程序中去。但是没有,单片机还会回到主程序中去执行数码管的闪烁,一顿饭时间,数码管就从6变为C,只是数码管闪烁得慢了很多,但并没有停止。
我不明白这个程序哪里出错了?