程序功能:使用 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]