主事件:
数码管0-1-2-3-4每秒变化显示
中断事件:
LED闪5次
疑问1:
当S0合上,即接地时,再接通电源,数码管0-4变化显示正常,比如现在显示是1,我打开S0,LED会亮(有一点频闪的感觉)不是正常的按程序闪5次,然后一直维持这个现象。如果再合上S0,显示从2开始,这就是所谓的接着做主事件。
问题:进入中断时,不是正常的闪5次,按理是5次闪完了数码管接着显示,为什么退不出中断?
疑问2:S0断开再接通电源,LED亮(有一点频闪的感觉)。这就说明程序已在中断了。
问题:中断引脚电平都没变化,怎么进入中断的?
以下是原理图和程序,希望指点:
int pbint = 0; // 定义中断引脚为0,也就是D2引脚
int led1 = A0; // 定义输出指示灯引脚
void setup() {
pinMode(led1,OUTPUT); //激活13号引脚,我们需要用它供电
pinMode(A1,OUTPUT);
for(int n=6;n<=13;n++)
{
pinMode(n,OUTPUT);
}
attachInterrupt(pbint, intt0, CHANGE);
}
void loop()
{
digitalWrite(A1,1); //这个就是HIGH 和LOW 的另一种写法 0代表LOW 1代表HIGH
/*==========显示0=============*/
int n0[8]={0,0,0,0,0,0,1,1}; //定义数组 通过0,1定义各数码管的明灭,
int z=0;
for(int x=6;x<=13;x++) //采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led
{
digitalWrite(x,n0[z]); //点亮led语句 X为引脚数 n0[z]为数组z为0-8的变量,来依次读取数组中的值
z++;
if (z>=9) //防止变量z累加超过了8
z=0;
}
delay(1000);
/*==========显示1=============*/
int n1[8]={1,0,0,1,1,1,1,1};
z=0;
for(int x=6;x<=13;x++)
{
digitalWrite(x,n1[z]);
z++;
if (z>=9)
z=0;
}
delay(1000);
/*==========显示2=============*/
int n2[8]={0,0,1,0,0,1,0,1};
z=0;
for(int x=6;x<=13;x++)
{
digitalWrite(x,n2[z]);
z++;
if (z>=9)
z=0;
}
delay(1000);
/*==========显示3=============*/
int n3[8]={0,0,0,0,1,1,0,1};
z=0;
for(int x=6;x<=13;x++)
{
digitalWrite(x,n3[z]);
z++;
if (z>=9)
z=0;
}
delay(1000);
/*==========显示4=============*/
int n4[8]={1,0,0,1,1,0,0,1};
z=0;
for(int x=6;x<=13;x++)
{
digitalWrite(x,n4[z]);
z++;
if (z>=9)
z=0;
}
delay(1000);
}
void intt0()
{ for(int x=0;x<=5;x++)
{
digitalWrite(led1,1);
delay(1000);
digitalWrite(led1,0);
delay(1000);
}
} |