arduino四位数码管编程(编程手记arduino之四位数码管)
arduino四位数码管编程(编程手记arduino之四位数码管)case 2:digitalWrite(wei1 HIGH);digtitalWrite(wei2 LOW);digtitalWrite(wei3 HIGH);digitalWrite(wei4 HIGH);breakcase 1:digitalWrite(wei1 LOW);digtitalWrite(wei2 HIGH);digtitalWrite(wei3 HIGH);digitalWrite(wei4 HIGH);breakfor(i=2;i<9;i ){digitalWrite(i LOW);} 这里用一个循环语句,也可以一个个写。那个段的是低电平,写八个段;这个时候来确定选择位,用到switch(位) case 语句,也就是程序判断使用那个位的数码管,找到这个位的数码管,比如程序要使用第三位数码管,那么第三位的数码管就是低电平,其他几位第一位,二位和四位的数码管为高电平
四位数码管的点亮需要明白两个概念,首先就是段的概念,这个和一位数码管的点亮的道理一样,也是有八个部分,a~h,通过写入高低电平决定点亮那段。第二,就是位的概念,四位数码管有四位,就是四个数码管。这个分别引出四个位的引脚,控制点亮哪一位。比如,点亮第二位的数字1,那么第二位的引脚给低电平,而段的部分b,和 c是高电平,这样其他三位的数码管是不亮,只有在第二位的数码管b段和c段亮,显示数字1.
对于四位数码管的理解可以简单的说:确定那个位置的数字1点亮。即数字1,不再指向一个数码管,是指向四个位置的数码管,为了确保不点亮所有数码管的数字1 ,那么确定是第几位。还可以理解成位是控制每个数码管是一个开关,需要哪个导通就导通哪个。这个原理理解了,对于程序的编写都有很大帮助。
在这个程序引入了一个display(位,显示数)的函数,这个函数的写法,就是运行程序的过程中,确定那个位置的数码管,点亮那个数字。下面就是对于这个函数的一个解读:
函数的第一部分是确定所有的数码管的数字都是低电平的状态。不显示任何内容;
for(i=2;i<9;i ){digitalWrite(i LOW);} 这里用一个循环语句,也可以一个个写。那个段的是低电平,写八个段;
这个时候来确定选择位,用到switch(位) case 语句,也就是程序判断使用那个位的数码管,找到这个位的数码管,比如程序要使用第三位数码管,那么第三位的数码管就是低电平,其他几位第一位,二位和四位的数码管为高电平,第三位数码管的数字导通。这样只要这个数码管亮。运行完之后跳出。
switch(wei){
case 1:digitalWrite(wei1 LOW);digtitalWrite(wei2 HIGH);digtitalWrite(wei3 HIGH);digitalWrite(wei4 HIGH);break
case 2:digitalWrite(wei1 HIGH);digtitalWrite(wei2 LOW);digtitalWrite(wei3 HIGH);digitalWrite(wei4 HIGH);break
case 3:digitalWrite(wei1 HIGH);digtitalWrite(wei2 HIGH);digtitalWrite(wei3 LOW);digitalWrite(wei4 HIGH);break
case 4:digitalWrite(wei1 HIGH);digtitalWrite(wei2 HIGH);digtitalWrite(wei3 HIGH);digitalWrite(wei4 LOW);break
}
确定位然后确定到底让程序显示哪个数,即规定数码管点亮那个段..其中,这些数字的0~9的段已经写好在表格里,这里直接读取数组就可以。大括号的数字是指表格中a段~h段所处的列数;shu指表格中表达的显示的数字。
digitalWrite(a table[shu][7];digitalWrite(b table[shu][6];digitalWrite(c table[shu][5];digitalWrite(d table[shu][4];digitalWrite(e table[shu] [3]; digitalWrite(f table[shu][2];digitalWrite(g table[shu][1];digitalWrite(h table[shu][0];
说明,在程序的开始,定义table数组,确定每个数字显示的段。这个和一位数码管的确定每段的高低电平一样。这里用了0,1表示。如数字1,表示0000110;以此类推。最后一位是a列。
到这里,display(位 显示数字 ) 程序运行阶段,直接调用,即display(1 1) 表示第一位数码显示数字1 。
int a=2;//定义引脚口;
int b=3;
int c=4;
int d=5;
int e=6;
int f=7;
int g=8;
int h=9;
int wei1=10;
int wei2=11;
int wei3=12;
int wei4=A0;
unsigned char biao[10][8]=
{
{0 0 1 1 1 1 1 1} // 显示数字在数码管的高低电平;0表示灭,1,表示点亮;
{0 0 0 0 0 1 1 0} //10行8列。行表示显示的10个数字,列表示8个段;最右为a段,以此类推;
{0 1 0 1 1 0 1 1}
{0 1 0 0 1 1 1 1}
{0 1 1 0 0 1 1 0}
{0 1 1 0 1 1 0 1}
{0 1 1 1 1 1 0 1}
{0 0 0 0 0 1 1 1}
{0 1 1 1 1 1 1 1}
{0 1 1 0 1 1 1 1}
};
void setup()
{
pinMode(a OUTPUT);//定义引脚口为输出口;
pinMode(b OUTPUT);
pinMode(c OUTPUT);
pinMode(d OUTPUT);
pinMode(e OUTPUT);
pinMode(f OUTPUT);
pinMode(g OUTPUT);
pinMode(wei1 OUTPUT);
pinMode(wei2 OUTPUT);
pinMode(wei3 OUTPUT);
pinMode(wei4 OUTPUT);
}
void loop()
{
display(1 5);//程序运行部分;调用display()函数;
delay(500);
display(2 6);
delay(500);
display(3 7);
delay(500);
display(4 8);
delay(500);
}
void display(unsigned char wei unsigned char shu) // display函数的代码;
{
digitalWrite(a LOW);
digitalWrite(b LOW);
digitalWrite(c LOW);
digitalWrite(d LOW);
digitalWrite(e LOW);
digitalWrite(f LOW);
digitalWrite(g LOW);
digitalWrite(h LOW);
switch(wei)//判断使用那个数码管,从分支中选择数值;
{
case 1:
digitalWrite(wei1 LOW);
digitalWrite(wei2 HIGH);
digitalWrite(wei3 HIGH);
digitalWrite(wei4 HIGH);
break;
case 2:
digitalWrite(wei1 HIGH);
digitalWrite(wei2 LOW);
digitalWrite(wei3 HIGH);
digitalWrite(wei4 HIGH);
break;
case 3:
digitalWrite(wei1 HIGH);
digitalWrite(wei2 HIGH);
digitalWrite(wei3 LOW);
digitalWrite(wei4 HIGH);
break;
case 4:
digitalWrite(wei1 HIGH);
digitalWrite(wei2 HIGH);
digitalWrite(wei3 HIGH);
digitalWrite(wei4 LOW);
break;
default:break;
}
digitalWrite(a biao[shu][7]); //八个段中,那一段是低电平,那一段是高电平
digitalWrite(b biao[shu][6]);//前者是显示的数字,后面只在那一列;
digitalWrite(c biao[shu][5]);
digitalWrite(d biao[shu][4]);
digitalWrite(e biao[shu][3]);
digitalWrite(f biao[shu][2]);
digitalWrite(g biao[shu][1]);
digitalWrite(h biao[shu][0]);
}