Beispiel #1
0
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);
}
Beispiel #2
0
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
Beispiel #4
0
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;
}
Beispiel #5
0
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;
    }
}
Beispiel #9
0
// Set slot functions
bool Line::setSlotSegments(const Basic::Number* const x)
{
    bool ok = false;
    if (x != nullptr) ok = setSegments(x->getBoolean());
    return ok;
}
Beispiel #10
0
void TM1637::clear(void)
{
  uint8_t data[] = { 0,0,0,0 };
  setSegments(data);

}