Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "TwoDigitsDisplay.h"
- TwoDigitsDisplay::TwoDigitsDisplay(
- uint8_t pin_address_0,
- uint8_t pin_address_1,
- uint8_t pin_address_2,
- uint8_t pin_write_0,
- uint8_t pin_write_1,
- uint8_t pin_data
- ) : pin_address_0(pin_address_0),
- pin_address_1(pin_address_1),
- pin_address_2(pin_address_2),
- pin_write_0(pin_write_0),
- pin_write_1(pin_write_1),
- pin_data(pin_data)
- {
- pinMode(pin_address_0, OUTPUT);
- pinMode(pin_address_1, OUTPUT);
- pinMode(pin_address_2, OUTPUT);
- pinMode(pin_write_0, OUTPUT);
- pinMode(pin_write_1, OUTPUT);
- pinMode(pin_data, OUTPUT);
- }
- uint8_t TwoDigitsDisplay::bcdToSevenSegmentBits(uint8_t bcd) // Input from 0 to 9, output binary 7 segment data (bits 0 to 6)
- {
- switch (bcd) {
- case 0: return B00111111;
- case 1: return B00001100;
- case 2: return B01011011;
- case 3: return B01011110;
- case 4: return B01101100;
- case 5: return B01110110;
- case 6: return B01110111;
- case 7: return B00011100;
- case 8: return B01111111;
- case 9: return B01111110;
- default: return 0;
- }
- }
- void TwoDigitsDisplay::setBit(uint8_t digit, uint8_t address, bool bit)
- {
- digitalWrite(pin_address_0, (address & B00000001) ? HIGH : LOW);
- digitalWrite(pin_address_1, (address & B00000010) ? HIGH : LOW);
- digitalWrite(pin_address_2, (address & B00000100) ? HIGH : LOW);
- digitalWrite(pin_data, bit ? LOW : HIGH);
- switch (digit) {
- case 0:
- delayMicroseconds(5);
- digitalWrite(pin_write_0, LOW); // Write disable off
- delayMicroseconds(5);
- digitalWrite(pin_write_0, HIGH); // Write disable on
- delayMicroseconds(5);
- break;
- case 1:
- delayMicroseconds(5);
- digitalWrite(pin_write_1, LOW); // Write disable off
- delayMicroseconds(5);
- digitalWrite(pin_write_1, HIGH); // Write disable on
- delayMicroseconds(5);
- break;
- }
- }
- void TwoDigitsDisplay::setValue(uint8_t value)
- {
- if (value > 99)
- value = 99;
- else if (value < 0)
- value = 0;
- uint8_t dataDigitLeft = bcdToSevenSegmentBits(value / 10);
- uint8_t dataDigitRight = bcdToSevenSegmentBits(value % 10);
- for (uint8_t address = 0; address <= 7; address++) {
- setBit(0, address, (dataDigitRight & (1 << address)) ? true : false);
- setBit(1, address, (dataDigitLeft & (1 << address)) ? true : false);
- }
- }
Add Comment
Please, Sign In to add comment