Arduino:多路复用4位7段显示

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

我对Arduino比较陌生,所以不要介意小错误!我已经编写了以下代码来复用我的Arduino Uno的4位7段显示。现在我犯了错误,所以在调用showDigit()函数时,尽管显示的是正确的数字,但是参数中没有提到的数字。指定的数字(此处为0 =第一个数字)关闭,其余数字表示数字。任何人都有解决问题的方法,当在第一个数字上调用showDigit(1,0)时,使用数字1?

const int numeral[10] = {
   //ABCDEFG /dp
   B11111100, // 0
   B01100000, // 1
   B11011010, // 2
   B11110010, // 3
   B01100110, // 4
   B10110110, // 5
   B00111110, // 6
   B11100000, // 7
   B11111110, // 8
   B11100110, // 9
};
// pins for decimal point and each segment
// DP,G,F,E,D,C,B,A
const int segmentPins[] = { 2,7,4,5,6,3,8,13 };
const int nbrDigits= 4; // the number of digits in the LED display
//dig 0 1 2 3
const int digitPins[nbrDigits] = { 9, 10, 11, 12};
void setup()
{
   for(int i=0; i < 8; i++) {
      pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
   }
   for(int i=0; i < nbrDigits; i++) {
      pinMode(digitPins[i], OUTPUT);
   }
} 

void loop()
{
 showDigit(1,0);
}

void showDigit( int number, int digit)
{  
   digitalWrite( digitPins[digit], HIGH );
   for(int segment = 1; segment < 8; segment++)  {
      boolean isBitSet = bitRead(numeral[number], segment);
      // isBitSet will be true if given bit is 1
      // isBitSet = ! isBitSet; // Code Option*
      // uncomment the above Code Option line for common anode display
      digitalWrite( segmentPins[segment], isBitSet);
   }
   delay(5);
   digitalWrite( digitPins[digit], LOW );
}


void showNumber( int number)
{
   if(number == 0) {
      showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit
   } else {
      // display the value corresponding to each digit
      // leftmost digit is 0, rightmost is one less than the number of places
      for( int digit = nbrDigits-1; digit >= 0; digit--)  {
         if(number > 0)  {
            showDigit( number % 10, digit) ;
            number = number / 10;
         }
      }
   }
} 
arduino multiplexing
1个回答
0
投票

如果一个函数打印出一个完整的4位数字而不是所有这些?我为一个项目做了这个,我使用二进制值10做一个空数字,我在第三个数字上强制一个点。但是你可以看到我采用了多种方法来复用4个数字。

void writeNumber(int number)  
{
int frameRate = 5;
byte pattern;
int cientos = 10;
int decimos =  10;
int singular = 0;
int decimal = 0; 

if (number < 10000) { 

if (number > 999) {
  cientos = abs(number / 1000);
  number = number - (cientos * 1000);
}

if (number > 99)  {
  decimos = abs(number / 100);
  number = number - (decimos * 100);
} else {
  if (cientos != 10) { decimos = 0; }
}


if (number > 9) {
  singular = abs(number / 10);
  number = number - (singular * 10);
} 

if (number > 0) {
  decimal = abs(number);
} 
}


   digitalWrite(digit[0], HIGH);
   digitalWrite(digit[1], HIGH);
   digitalWrite(digit[2], HIGH);
   digitalWrite(digit[3], HIGH);
   pattern = digit_pattern[cientos];
    digitalWrite(digit_clock_pin, LOW);
   shiftOut(data_pin, bit_clock_pin, LSBFIRST, ~pattern);
   digitalWrite(digit_clock_pin, HIGH);
   digitalWrite(digit[3], LOW);
     delay(frameRate);  

   digitalWrite(digit[0], HIGH);
   digitalWrite(digit[1], HIGH);
   digitalWrite(digit[2], HIGH);
   digitalWrite(digit[3], HIGH);


      pattern = digit_pattern[decimos];
       digitalWrite(digit_clock_pin, LOW);
       shiftOut(data_pin, bit_clock_pin, LSBFIRST, ~pattern);
       digitalWrite(digit_clock_pin, HIGH);




     digitalWrite(digit[2], LOW);
         delay(frameRate);

      digitalWrite(digit[0], HIGH);
      digitalWrite(digit[1], HIGH);
      digitalWrite(digit[2], HIGH);
      digitalWrite(digit[3], HIGH);
      pattern = digit_pattern[singular];
      pattern = pattern - B10000000;

      digitalWrite(digit_clock_pin, LOW);
      shiftOut(data_pin, bit_clock_pin, LSBFIRST, ~pattern);
      digitalWrite(digit_clock_pin, HIGH);
      digitalWrite(digit[1], LOW);
    delay(frameRate);

  digitalWrite(digit[0], HIGH);
  digitalWrite(digit[1], HIGH);
  digitalWrite(digit[2], HIGH);
  digitalWrite(digit[3], HIGH);
  pattern = digit_pattern[decimal];
  digitalWrite(digit_clock_pin, LOW);
  shiftOut(data_pin, bit_clock_pin, LSBFIRST, ~pattern);
  digitalWrite(digit_clock_pin, HIGH);
  digitalWrite(digit[0], LOW);
  delay(frameRate);

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