程序功能:使用 Arduino 控制一位数码管显示数字,从0到9循环往复,每次显示持续一秒,就好像是秒针在走一样。
操作很简单。首先需要明白一位数码管引脚的排列。
可以看到abcdef把数码管饶了一圈(注意f和g要颠倒一下),g为中间的那一横。因此我们就把abcdefg依次接到Arduino的3456789数字引脚上。只接了这几跟线还不行,那么还有一根线是什么呢?就是COM线,即相当于GND线。我们接在 Arduino 的数字引脚12上。这样整个接线就完成了。(从下例程序中可以看到,其实COM线接到10、11、12上都是可行的。)
根据我们的接线方法,要显示从0到9,那么需要分别点亮的引脚排列分别为:
[cc lang=”java”]
3,4,5,6,7,8 //显示0
4,5 //显示1
3,4,9,7,6 //显示2
3,4,5,6,9 //显示3
4,5,8,9 //显示4
3,8,9,5,6 //显示5
3,8,7,6,5,9 //显示6
3,4,5 //显示7
3,4,5,6,7,8,9 //显示8
3,4,5,6,8,9 //显示9
[/cc]
Arduino的代码为:
[cc lang=”java”]
int i=0;
int j=0;
void Reset()
{
for(int k=3;k<13;k++)
{
digitalWrite(k,LOW);//熄灭所有灯
}
}
void setup()
{
for(i=3;i<=13;i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
int number[10][7]= //采用数组,10行7列。行代表是哪个数,列代表哪些引脚被点亮
{
{3,4,5,6,7,8},//0
{4,5},//1
{3,4,9,7,6},//2
{3,4,5,6,9,},//3
{4,5,8,9},//4
{3,8,9,5,6},//5
{3,8,7,6,5,9},//6
{3,4,5},//7
{3,4,5,6,7,8,9},//8
{3,4,5,6,8,9}//9
};
for(i=0;i<10;i++)
{
for(j=0;j<7;j++)
{
digitalWrite(number[i][j],HIGH);
}
delay(1000);
Reset();
}
}
[/cc]
如果加上电位计,则可以做出使用电位计调整显示数字的效果来。程序如下:
[cc lang="java"]
int i=0;
int j=0;
int ChangeVal=A0;//电位计的模拟输入为A0引脚
int val=0;
void Reset()
{
for(int k=3;k<13;k++)
{
digitalWrite(k,LOW);
}
}
void setup()
{
for(i=3;i<=13;i++)
{
pinMode(i,OUTPUT);
}
pinMode(ChangeVal,INPUT);
}
void loop()
{
val=analogRead(ChangeVal);
int number[10][7]=
{
{3,4,5,6,7,8},//0
{4,5},//1
{3,4,9,7,6},//2
{3,4,5,6,9,},//3
{4,5,8,9},//4
{3,8,9,5,6},//5
{3,8,7,6,5,9},//6
{3,4,5},//7
{3,4,5,6,7,8,9},//8
{3,4,5,6,8,9}//9
};
if( val<100 )//0
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[0][j],HIGH);
}
}
else if( val>=100 && val < 200)//1
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[1][j],HIGH);
}
}
else if( val>=200 && val < 300)//2
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[2][j],HIGH);
}
}
else if( val>=300 && val < 400)//3
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[3][j],HIGH);
}
}
else if( val>=400 && val < 500)//4
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[4][j],HIGH);
}
}
else if( val>=500 && val < 600)//5
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[5][j],HIGH);
}
}
else if( val>=600 && val < 700)//6
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[6][j],HIGH);
}
}
else if( val>=700 && val < 800)//7
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[7][j],HIGH);
}
}
else if( val>=800 && val < 900)//8
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[8][j],HIGH);
}
}
else //9
{
for(j=0;j<7;j++)
{
Reset();
digitalWrite(number[9][j],HIGH);
}
}
}
[/cc]