#define F_CPU 16000000UL #include #include #include void init_display(); void init_timer0(); volatile uint8_t lcdptr=0, lcdcmd=0xC0, lcdoff=0; // unsigned char LCDline[32]={" 0 0"}; const char LookUp[16] ={"123*456*789**0**"}; int main(void) { int8_t i, carry,sum; unsigned char kbd; uint8_t kbdcnt=0; //_delay_ms(500); init_display(); init_timer0(); // initialize timer0 sei(); // enable global interrupts // loop forever while(1) { while((PINB|0xEF)==0xFF); while((PINB&0x10)==0x00); kbd = LookUp[PINB&0x0F]; if(!(kbd=='*')) { if(kbdcnt==0) { if(!(kbd=='0')) { LCDline[15]=kbd; kbdcnt=1; } } else { for(i=1; i<15; i++) LCDline[i]=LCDline[i+1]; LCDline[15]=kbd; kbdcnt++; } } // if(!(kbd=='*')) if(kbdcnt>0) { carry = 0; for(i=0; i=10) { sum = sum-10; carry = 1; } else { carry = 0; } LCDline[31-i] = sum+'0'; } if(carry==1) LCDline[31-i]='1'; } } // while(1) } void init_display() { DDRA = 0xFF; PORTC &= 0xAF; DDRC |= 0x50; PORTC &= 0xBF; PORTA = 0x38; PORTC |= 0x10; PORTC &= 0xEF; PORTA = 0x0C; PORTC |= 0x10; PORTC &= 0xEF; PORTA = 0x01; PORTC |= 0x10;; PORTC &= 0xEF; _delay_ms(2); } void init_timer0() { TCCR0B |= (1<