编程我的7段显示器时,我想编写一个代码并将其等于7段显示器上显示的数字。
要获得数字1我使用此:
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
如何将此代码定义为数字1,因此当传感器的信号等于1时,它将在显示屏上显示为1?
答案 0 :(得分:1)
您可以将引脚状态存储在byte array
中,如下所示:
#define NUM_DIGIT_VALUES 11
// Segments:
// ..a..
// f b
// . g .
// e c
// ..d.. dot
static const byte digits[NUM_DIGIT_VALUES] = {
// dot-abcdefg
0b01111110, // = 0
0b00110000, // = 1
0b01101101, // = 2
0b01111001, // = 3
0b00110011, // = 4
0b01011011, // = 5
0b01011111, // = 6
0b01110000, // = 7
0b01111111, // = 8
0b01111011, // = 9
0b01001001 // = overflow
};
然后使用相应的密码创建array
:
byte PinLayout[] = {6,7,8,9,10,11,12,13};
创建一些辅助函数来显示数字:
void SetByte(byte digit_bits) {
// each bit in digit_bits = segment On/Off
byte cur_pos = 1 << 7;
for (byte seg_num = 0; seg_num < 8; ++seg_num) {
digitalWrite(PinLayout[seg_num], digit_bits & cur_pos);
// In your case you may need:
// digitalWrite(PinLayout[seg_num], (digit_bits & cur_pos) ? LOW : HIGH);
cur_pos >>= 1;
}
}
// set value from 0-9 -- > 10 shows 'overflow value'
void SetValue(byte value) {
if(value >= NUM_DIGIT_VALUES)
value = NUM_DIGIT_VALUES - 1;
SetByte(digits[value]);
}
用作:
SetValue(8);
注意强>:
在更大的MCU上,我们通常会将完整的digit byte
直接写入8位PORT
,遗憾的是,这不是Arduino(Uno)的选项。