学习Arduino:一位数码管的使用(七段数码管)

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

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注