我对Arduino比较陌生,所以不要介意小错误! 我编写了以下代码,将4位7段显示器与我的Arduino Uno复用。现在,我犯了一个错误,因此在调用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;
}
}
}
}
答案 0 :(得分: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);
}