arduino 4 位 7 段显示器难以阅读
arduino 4 digit 7-segment display hard to read
我想知道是否可以让 4 位 7 段显示器更流畅地显示数字,因为有时它真的很难阅读(比图像显示的更难)。我可以在我的代码中做些什么吗?它是来自中国的廉价显示器,这是为什么?我将移位寄存器 (74hc595n) 与显示器一起使用。感谢您的任何回复:)
我的4位7段显示图片
我用于显示数字的 arduino 代码:
void loop() {
turnOnDigit(1);
displayNumber(firstDigitReceived);
delayMicroseconds(2000);
turnOnDigit(2);
displayNumber(secondDigitReceived);
delayMicroseconds(2000);
turnOnDigit(3);
displayNumber(thirdDigitReceived);
delayMicroseconds(2000);
turnOnDigit(4);
displayNumber(fourthDigitReceived);
delayMicroseconds(2000);
}
int displayNumber(int number) {
switch(number) {
case 0:
updateShiftRegister(126);
break;
case 1:
updateShiftRegister(48);
break;
case 2:
updateShiftRegister(109);
break;
case 3:
updateShiftRegister(121);
break;
case 4:
updateShiftRegister(51);
break;
case 5:
updateShiftRegister(91);
break;
case 6:
updateShiftRegister(95);
break;
case 7:
updateShiftRegister(112);
break;
case 8:
updateShiftRegister(127);
break;
case 9:
updateShiftRegister(123);
break;
}
}
void turnOnDigit(int digit) {
switch(digit){
case 1:
digitalWrite(digit1, LOW);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
digitalWrite(segP, LOW);
break;
case 2:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
digitalWrite(segP, HIGH);
break;
case 3:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
digitalWrite(segP, LOW);
break;
case 4:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
digitalWrite(segP, LOW);
break;
}
}
注意:我试图改变延迟,但随着微秒的减少,它只会变得更糟
您的问题是您正在更改数字,然后在几微秒后更新您的数字。因此,当您将每个数字打开一小段时间时,最后一个数字会显示在那里。您应该在更新移位寄存器时关闭数字,然后打开要显示的数字。
我想知道是否可以让 4 位 7 段显示器更流畅地显示数字,因为有时它真的很难阅读(比图像显示的更难)。我可以在我的代码中做些什么吗?它是来自中国的廉价显示器,这是为什么?我将移位寄存器 (74hc595n) 与显示器一起使用。感谢您的任何回复:)
我的4位7段显示图片
我用于显示数字的 arduino 代码:
void loop() {
turnOnDigit(1);
displayNumber(firstDigitReceived);
delayMicroseconds(2000);
turnOnDigit(2);
displayNumber(secondDigitReceived);
delayMicroseconds(2000);
turnOnDigit(3);
displayNumber(thirdDigitReceived);
delayMicroseconds(2000);
turnOnDigit(4);
displayNumber(fourthDigitReceived);
delayMicroseconds(2000);
}
int displayNumber(int number) {
switch(number) {
case 0:
updateShiftRegister(126);
break;
case 1:
updateShiftRegister(48);
break;
case 2:
updateShiftRegister(109);
break;
case 3:
updateShiftRegister(121);
break;
case 4:
updateShiftRegister(51);
break;
case 5:
updateShiftRegister(91);
break;
case 6:
updateShiftRegister(95);
break;
case 7:
updateShiftRegister(112);
break;
case 8:
updateShiftRegister(127);
break;
case 9:
updateShiftRegister(123);
break;
}
}
void turnOnDigit(int digit) {
switch(digit){
case 1:
digitalWrite(digit1, LOW);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
digitalWrite(segP, LOW);
break;
case 2:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
digitalWrite(segP, HIGH);
break;
case 3:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
digitalWrite(segP, LOW);
break;
case 4:
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
digitalWrite(segP, LOW);
break;
}
}
注意:我试图改变延迟,但随着微秒的减少,它只会变得更糟
您的问题是您正在更改数字,然后在几微秒后更新您的数字。因此,当您将每个数字打开一小段时间时,最后一个数字会显示在那里。您应该在更新移位寄存器时关闭数字,然后打开要显示的数字。