#include #include #include #include #include unsigned char keyscan() { unsigned char row,col=1,data=16; while(data==16) { PORTB=col; delay_ms(55);//in delay baray jologiry az larzesh dast ast row=PINB&0b11110000; if(row==0b00010000) { switch(col) { case 1: data='7'; break; case 2: data='8'; break; case 4: data='9'; break; case 8: data='/'; break; } } if(row==0b00100000) { switch(col) { case 1: data='4'; break; case 2: data='5'; break; case 4: data='6'; break; case 8: data='*'; break; } } if(row==0b01000000) { switch(col) { case 1: data='1'; break; case 2: data='2'; break; case 4: data='3'; break; case 8: data='-'; break; } } if(row==0b10000000) { switch(col) { case 1: data='C'; break; case 2: data='0'; break; case 4: data='='; break; case 8: data='+'; break; } } col=col<<1; if(col==16) col=1; }//payan halghe while return data; }//payan tabe #asm .equ __lcd_port=0x1B ;PORTA #endasm #include void main(void) { unsigned char k; PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x0F; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; lcd_init(16); while (1) { k=keyscan(); lcd_putchar(k); } }