您的位置 首页 > 数码极客

4位数码管如何实现位选、数码管位选如何实现的

四位数码管的点亮需要明白两个概念,首先就是段的概念,这个和一位数码管的点亮的道理一样,也是有八个部分,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]);

}

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“4位数码管如何实现位选,数码管位选如何实现的,六位数码管显示如何实现,如何实现数码管的闪烁”边界阅读