AT89S51单片机的P1口接有1个7段LED数码管,初始显示0。外部中断输入引脚INTO接有一

2024年11月19日 21:41
有2个网友回答
网友(1):

P3.2的按键作为外部中断了,实现计数功能,所以,那个延时子程序没有用了。

关键问题是,凡是中断程序中所用的变量,要定义为全局变量。修改的程序如下。

#include

#define uint unsigned int

#define uchar unsigned char

uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//你0的段码错误了

uchar i=0; //凡是中断程序用到的变量,一律定义为全局变量,而且不用定义成 unsigned int 型的变量。

/*

void delay()//延时子程序没有用,注释掉

{

uchar i,j;

for(i=0;i<255;i--)

for(j=0;j<255;j--);

}

*/

void main(void)

{

//uint i;//删掉

while(1)

{

EA=1;

EX0=1;

IT0=1;

P1=seg[i];

}

}

void int0() interrupt 0 using 1

{ //uint i;//删掉

i++;

if(i==10)

i=0;

}

仿真结果如下

网友(2):

把变量i作为全局变量