7段显示,Arduino - 代码

时间:2016-01-11 07:17:14

标签: c++ arduino arduino-uno

编程我的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?

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)的选项。