如何使用模拟引脚为变量分配二进制值?

问题描述 投票:0回答:1

我正在使用 arduino uno 和一些 7 段显示器来计数从 0000 到 9999,我正在使用解码器 cd4511 来保存一些端口,但是为了在我的计数器中有数千个,我需要使用模拟引脚就像这样:the leftmost display is connected to the analog pins

//BCD 1
  
int a1 = 4; //Bit 0 Decoder 1
int a2 = 5; //Bit 1 Decoder 1
int a3 = 6; //Bit 2 Decoder 1
int a4 = 7; //Bit 3 Decoder 1

//BCD 2
int b1 = 8; //Bit 0 Decoder 2
int b2 = 9; //Bit 1 Decoder 2
int b3 = 10; //Bit 2 Decoder 2
int b4 = 11; //Bit 3 Decoder 2

//BCD 3
int c1 = 0; //Bit 0 Decoder 3
int c2 = 1; //Bit 1 Decoder 3
int c3 = 2; //Bit 2 Decoder 3
int c4 = 3; //Bit 3 Decoder 3

//BCD 4
int m1 = 14; //Bit 0 Decoder 4
int m2 = 15; //Bit 1 Decoder 4
int m3 = 16; //Bit 2 Decoder 4
int m4 = 17; //Bit 3 Decoder 4

int n=0; //Setting initial value of n to 0
int d1;
int d2;
int d3;
int d4;
int teste;
int teste1;
int teste2;
int teste3;

void setup()
{
pinMode(0,OUTPUT);
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
}

void loop()
{
 delay(1000); // Delay of 1 Second
 n++;
 if(n==1000)
 {
   n=0;
 }
 d1=n%10; // This will divide n by 10 and the remainder will be stored in d1
 teste=n%100;
 teste1=d1;
 teste2=teste-teste1;
 teste3=teste2/10; 
 d2=teste3; // This will divide n by 10 and the value before decimal will be stored in d2
 d3=n/100;
 d4=d1;
 disp1(d1);
 disp2(d2);
 disp3(d3);
 disp4(d4);
}
void disp3(int num)
{
  if(num == 0)//0000
  {
    digitalWrite(c1, LOW); 
    digitalWrite(c2, LOW);
    digitalWrite(c3, LOW);
    digitalWrite(c4, LOW);
  }
  if(num == 1)//0001
  {
    digitalWrite(c1, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(c3, LOW);
    digitalWrite(c4, LOW);
  }
  if(num == 2)//0010
  {
    digitalWrite(c1, LOW);//0
    digitalWrite(c2, HIGH);//1
    digitalWrite(c3, LOW);//0
    digitalWrite(c4, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(c1, HIGH);//1
    digitalWrite(c2, HIGH);//1
    digitalWrite(c3, LOW);//0
    digitalWrite(c4, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(c1, LOW);//0
    digitalWrite(c2, LOW);//0
    digitalWrite(c3, HIGH);//1
    digitalWrite(c4, LOW);//0
  }
  if(num == 5)//0101
  {
    digitalWrite(c1, HIGH);//1
    digitalWrite(c2, LOW);//0
    digitalWrite(c3, HIGH);//1
    digitalWrite(c4, LOW);//0
  }
  if(num == 6)//0110
  {
    digitalWrite(c1, LOW);//0
    digitalWrite(c2, HIGH);//1
    digitalWrite(c3, HIGH);//1
    digitalWrite(c4, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(c1, HIGH);//1
    digitalWrite(c2, HIGH);//1
    digitalWrite(c3, HIGH);//1
    digitalWrite(c4, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(c1, LOW);//0
    digitalWrite(c2, LOW);//0
    digitalWrite(c3, LOW);//0
    digitalWrite(c4, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(c1, HIGH);//1
    digitalWrite(c2, LOW);//0
    digitalWrite(c3, LOW);//0
    digitalWrite(c4, HIGH);//1
  }
}
void disp1(int num)
{
  if(num == 0)//0000
  {
    digitalWrite(a1, LOW); 
    digitalWrite(a2, LOW);
    digitalWrite(a3, LOW);
    digitalWrite(a4, LOW);
  }
  if(num == 1)//0001
  {
    digitalWrite(a1, HIGH);
    digitalWrite(a2, LOW);
    digitalWrite(a3, LOW);
    digitalWrite(a4, LOW);
  }
  if(num == 2)//0010
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if(num == 5)//0101
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if(num == 6)//0110
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, HIGH);//1
  }
}

void disp2(int num)
{
  if(num == 0)//0000
  {
    digitalWrite(b1, LOW);//
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, LOW);//0
  }
  if(num == 1)//0001
  {
    digitalWrite(b1, HIGH);//1
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, LOW);//0
  }
  if(num == 2)//0010
  {
    digitalWrite(b1, LOW);//0
    digitalWrite(b2, HIGH);//1
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(b1, HIGH);//1
    digitalWrite(b2, HIGH);//1
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(b1, LOW);//0
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, HIGH);//1
    digitalWrite(b4, LOW);//0
  }
  if(num == 5) //0101
  {
    digitalWrite(b1, HIGH);//1
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, HIGH);//1
    digitalWrite(b4, LOW);//0
  }
  if(num == 6) //0110
  {
    digitalWrite(b1, LOW);//0
    digitalWrite(b2, HIGH);//1
    digitalWrite(b3, HIGH);//1
    digitalWrite(b4, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(b1, HIGH);//1
    digitalWrite(b2, HIGH);//1
    digitalWrite(b3, HIGH);//1
    digitalWrite(b4, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(b1, LOW);//0
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(b1, HIGH);//1
    digitalWrite(b2, LOW);//0
    digitalWrite(b3, LOW);//0
    digitalWrite(b4, HIGH);//1
  }
}
void disp4(int num)
{
  if(num == 0)//0000
  {
    digitalWrite(m1, LOW);//0
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, LOW);//0
  }
  if(num == 1)//0001
  {
    digitalWrite(m1, HIGH);//1
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, LOW);//0
  }
  if(num == 2)//0010
  {
    digitalWrite(m1, LOW);//0
    digitalWrite(m2, HIGH);//1
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(m1, HIGH);//1
    digitalWrite(m2, HIGH);//1
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(m1, LOW);//0
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, HIGH);//1
    digitalWrite(m4, LOW);//0
  }
  if(num == 5)//0101
  {
    digitalWrite(m1, HIGH);//1
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, HIGH);//1
    digitalWrite(m4, LOW);//0
  }
  if(num == 6)//0110
  {
    digitalWrite(m1, LOW);//0
    digitalWrite(m2, HIGH);//1
    digitalWrite(m3, HIGH);//1
    digitalWrite(m4, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(m1, HIGH);//1
    digitalWrite(m2, HIGH);//1
    digitalWrite(m3, HIGH);//1
    digitalWrite(m4, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(m1, LOW);//0
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(m1, HIGH);//1
    digitalWrite(m2, LOW);//0
    digitalWrite(m3, LOW);//0
    digitalWrite(m4, HIGH);//1
  }
}

我尝试在 BCD4 中做与其他 BCD 相同的操作,并像其他 BCD 一样创建函数 disp4,但它似乎无法识别来自模拟引脚的单个信号,当我开始模拟时最左边的显示屏只显示数字 8,因为所有段都在运行。here's what happens when i start the simulation on tinkercad

arduino adc tinkercad
1个回答
0
投票

与引脚 A0-A4(也)是模拟输入的事实无关:它们高于所有数字 I/O。我宁愿认为你的接线是错误的。有问题的 CD4511 没有连接到 VCC,看这里:

© www.soinside.com 2019 - 2024. All rights reserved.