void TM1637Display::showNumberDec(int num, bool leading_zero, uint8_t length, uint8_t pos) { uint8_t digits[4]; const static int divisors[] = { 1, 10, 100, 1000 }; bool leading = true; for(int8_t k = 0; k < 4; k++) { int divisor = divisors[4 - 1 - k]; int d = num / divisor; if (d == 0) { if (leading_zero || !leading || (k == 3)) digits[k] = encodeDigit(d); else digits[k] = 0; } else { digits[k] = encodeDigit(d); num -= d * divisor; leading = false; } } setSegments(digits + (4 - length), length, pos); }
void DigitalTube::updateDisplay(){ digitalWrite(displayPins[0], HIGH); digitalWrite(displayPins[1], LOW); digitalWrite(displayPins[2], LOW); setSegments(getTime(0)); delay(5); digitalWrite(displayPins[0], LOW); digitalWrite(displayPins[1], HIGH); digitalWrite(displayPins[2], LOW); setSegments(getTime(1)); delay(5); digitalWrite(displayPins[0], LOW); digitalWrite(displayPins[1], LOW); digitalWrite(displayPins[2], HIGH); setSegments(getTime(2)); delay(5); }
void Hexal_Segment_Display::setHexal (unsigned int value) { int hexal_segments = SSD_SEG_G; if (value & 0x01) hexal_segments |= SSD_SEG_E; if (value & 0x02) hexal_segments |= SSD_SEG_C; if (value & 0x04) hexal_segments |= SSD_SEG_B; if (value & 0x08) hexal_segments |= SSD_SEG_F; setSegments (hexal_segments); // paintEvent(NULL); } // setHexal
Key ClefKeyContext::getKeyFromContext(TrackId track, timeT time) { if (m_changed) setSegments(m_scene); KeyMaps::iterator i = m_keyMaps.find(track); if (i == m_keyMaps.end()) { std::cerr << "TrackId " << track << " not found in ClefKeyContext." << std::endl << "Probably this is a bug." << std::endl; return Key::UndefinedKey; } KeyMap::iterator j = (*i).second->lower_bound(time); if (j == (*i).second->begin()) return Key::UndefinedKey; --j; return j->second; }
void TM1637Display::showText(char* text) { uint8_t segmentArr[4]; int arrSize = 4; int segmentIndex = -1; for(int i=0; i < arrSize; i++) segmentArr[i] = 0; for(int i=0; i< strlen(text) && segmentIndex < arrSize; i++) { char c = text[i]; if(isSpecialSegmentCharacter(c)){ if(segmentIndex>=0) segmentArr[segmentIndex] |= 0b10000000; } else{ segmentIndex++; segmentArr[segmentIndex] = charToSegment(c); } } setSegments(segmentArr); }
/* * @fn showNumberDec * @brief Print Decimal number on the 4-Digit Display * @param[in] num number to print * @param[in] leading_zero * @param[in] length * @param[in] pos position of the digit */ void showNumberDec(uint16_t num, bool leading_zero, uint8_t length, uint8_t pos){ uint8_t digits[4], i; const uint16_t divisors[] = {1, 10, 100, 1000}; bool leading = true; for(i = 0; i < 4; i++){ uint8_t divisor = divisors[3 - i]; uint8_t d = num / divisor; if( d == 0){ if( leading_zero || !leading || (i == 3)) digits[i] = encodeDigit(d); else digits[i] = 0; } else{ digits[i] = encodeDigit(d); num -= d * divisor; leading = false; } } setSegments(digits + (4 - length), length, pos); }
void Hexal_Segment_Display::setHexalASCII (char value) { if (('0' <= value) && (value <= '9')) { setHexal (value - '0'); } else if (('A' <= value) && (value <= 'F')) { setHexal (value - 'A' + 10); } else if (('a' <= value) && (value <= 'f')) { setHexal (value - 'a' + 10); } else // Else not a hexadecimal character... { switch (value) { case ' ': case '.': setSegments (0); break; case '_': setSegments (SSD_SEG_D); break; case '=': setSegments (SSD_SEG_A | SSD_SEG_D | SSD_SEG_G); break; case ':': setSegments (SSD_SEG_A | SSD_SEG_D); break; case '-': setSegments (SSD_SEG_A | SSD_SEG_C | SSD_SEG_D | SSD_SEG_E | SSD_SEG_G); break; case '+': setSegments (SSD_SEG_A | SSD_SEG_B | SSD_SEG_D | SSD_SEG_F | SSD_SEG_G); break; case '!': setSegments (SSD_SEG_E | SSD_SEG_F); break; case '|': setSegments (SSD_SEG_B | SSD_SEG_C); break; case '#': setSegments (SSD_SEG_B | SSD_SEG_C | SSD_SEG_E | SSD_SEG_F); break; case '@': setSegments (SSD_SEG_A | SSD_SEG_B | SSD_SEG_C | SSD_SEG_D | SSD_SEG_E | SSD_SEG_F | SSD_SEG_G); break; default: // Display nothing for unsupported characters. setSegments (0); } } } // setHexal
/* * @fn showTime * @brief Convert and print data on 4Digit-Display * @param[in] clock data date structure. * @param[in] dp flag of double point for clock */ void showTime(struct ds1307_t clock, bool dp, uint8_t msg){ uint8_t d1, d2, d3, d4, data[4]; uint16_t year, divisor[4] = {1000, 100, 10, 1}; switch (msg){ case 0: d1 = clock.seconds%10; d2 = (clock.seconds - d1)/10; d3 = clock.minutes%10; d4 = (clock.minutes - d3)/10; data[0] = encodeDigit (d4); if (dp) data[1] = 0x80 | encodeDigit (d3); else data[1] = encodeDigit (d3); data[2] = encodeDigit (d2); data[3] = encodeDigit (d1); setSegments(data, 4, 0); break; case 1: d1 = clock.minutes%10; d2 = (clock.minutes - d1)/10; d3 = clock.hours%10; d4 = (clock.hours - d3)/10; data[0] = encodeDigit (d4); if (dp) data[1] = 0x80 | encodeDigit (d3); else data[1] = encodeDigit(d3); data[2] = encodeDigit(d2); data[3] = encodeDigit(d1); setSegments(data, 4, 0); break; case 2: showNumberDec (clock.day, false, 4, 0); break; case 3: showNumberDec (clock.date, false, 4, 0); break; case 4: showNumberDec (clock.month, false, 4, 0); break; case 5: year = clock.year; for(d1 = 0; d1 < 4; d1++){ data[d1] = year/divisor[d1]; if(data[d1]) year -= (data[d1] * divisor[d1]); else data[d1] = 0; showNumberDec (data[d1], true, 1, d1); } break; default: break; } }
// Set slot functions bool Line::setSlotSegments(const Basic::Number* const x) { bool ok = false; if (x != nullptr) ok = setSegments(x->getBoolean()); return ok; }
void TM1637::clear(void) { uint8_t data[] = { 0,0,0,0 }; setSegments(data); }