keil uVision4界面:
#include<reg51.h>
#define uchar unsigned char
void delay(int x) //延时函数
{
int i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
uchar seg1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8流水灯显示数据组
unsigned int a;
for(;;)
{
EA=1; //总中断允许
EX0=1; //允许外部中断0中断
EX1=1; //允许外部中断1中断
IT0=1; //选择外部中断0为跳沿触发方式
IT1=1; //选择外部中断1为跳沿触发方式
IP=0; //两个外部中断均为低优先级
for(a=0;a<9;a++)
{
delay(800);
P0=seg1[a]; //将已经定义的流水灯显示数据送到P0口
}
}
}
void int0_isr(void) interrupt 0 using 1 //外部中断0的中断服务函数
{
uchar seg2[]={0xc0,0xf9,0xa4,0xb0,0x99, //01234
0x92,0x82,0xf8,0x80,0x90}; //56789
unsigned int b;
for(b=0;b<10;b++) //依次显示0到9
{
delay(500);
P1=seg2[b]; //将已经定义的数码管显示数据送到P1口
}
}
void int1_isr(void) interrupt 2 using 2 //外部中断1的中断服务函数
{
uchar c; //闪烁显示5次
for(c=0;c<5;c++)
{
P0=0xff; //全灭
delay(500);
P0=0; //全亮
delay(500);
}
}
proteus仿真界面:
![](https://img-blog.csdnimg.cn/img_convert/8a915c1f43c41b69882d2229b5c5ded1.png)