void updateLCDDisplay() { int i; //Display LCD display for(i=0; i<12; i++) { if (i>5) { unsigned short mask = 0; mask |= ((displayBuff[(i-6)*4+2]&0xF0)>>4); mask |= ((displayBuff[(i-6)*4+3]&0xF0)); mask |= ((displayBuff[(i-6)*4+4]&0xF0)<<4); mask |= ((displayBuff[(i-6)*4+5]&0xF0)<<8); displaySegment(gtkArea, 7+(i-6)*17, 3, 1, mask); } else {
int main(void) { uint8_t i; // general loop counter uint8_t j; // general loop counter uint8_t bmapidx; // index to bitmap uint8_t segment; // bitmap segment to be displayed in buffer // Set 4051 CBA input address pins as output DDRD |= ((1 << A) | (1 << B) | (1 << C)); // Set PORTC pins for anode rows as output DDRC |= ((1 << AR0) | (1 << AR1) | (1 << AR2) | (1 << AR3)| (1 << AR4)); // Set PB0 as output DDRB |= (1 << PB0); PORTB &= ~(1 << PB0); // clear the anode rows PORTC &= ~((1 << AR0) | (1 << AR1) | (1 << AR2)| (1 << AR3)| (1 << AR4)); while (1) { bmapidx = 0; while (bmapidx < 4) { segment = bitmap[bmapidx]; // clear 4051 CBA input address pins PORTD &= ~((1 << A) | (1 << B) | (1 << C)); // set 4051 CBA input address pins PORTD |= (bmapidx+1 << 2); // shift 2 to skip PD0 and PD1 if (segment > 30) { for (j = 0; j < 3; j++) { PORTB ^= (1 << PB0); _delay_ms(500); PORTB ^= (1 << PB0); _delay_ms(500); } } displaySegment(segment); bmapidx++; } } return 0; }