; Reset Vector RJMP Reset RJMP Event RJMP Event NOP ; TIMER NOP ; EEPROM NOP ; Analog NOP ; Timer 0 Compare A NOP ; Timer 0 Compare B NOP ; Watch NOP ; ADC Conversion ; .ORG 0x0010 ;==================================================================== ; CODE SEGMENT ;==================================================================== Event: Reset: LDI R16,LOW(RAMEND) OUT SPL,R16 LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,1 << PUD OUT MCUCR,R16 Phase_1:; Vertical Out - Horizontal In LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 ; ???11111 LDI R16,(1 << DDB0) | (1 << DDB1) | (1 << DDB2) OUT DDRB,R16 ; ???ZZ111 LDI R17,(1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 ; ???11110 - Scan for D4, D11 IN R20,PINB ; ???HG??? - D11(H) D4(G) LDI R17,(1 << PB0) | (1 << PB2) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 ; ???11101 - Scan for D2, D8 IN R21,PINB ; ???JI??? - D8(J) D2(I) LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 ; ???11011 - Scan for D6, D12 IN R22,PINB ; ???LK??? - D12(L) D6(K) Phase_2:; Horizontal Out - Vertical In LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 ; ???11111 LDI R16,(1 << DDB3) | (1 << DDB4) OUT DDRB,R16 ; ???11ZZZ LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB4) OUT PORTB,R17 ; ???10111 - Scan for D1, D3, D5 IN R23,PINB ; ?????CBA - D3(C) D5(B) D1(A) LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) OUT PORTB,R17 ; ???01111 - Scan for D7, D9, D10 IN R24,PINB ; ?????FED - D9(F) D10(E) D7(D) Phase_3:; Pack the bits ANDI R24,(1 << PB0) | (1 << PB1) | (1 << PB2) LSL R24 LSL R24 LSL R24 ANDI R23,(1 << PB0) | (1 << PB1) | (1 << PB2) OR R23,R24 ; ??FEDCBA - D9 D10 D7 D3 D5 D1 ANDI R20,(1 << PB3) | (1 << PB4) LSR R20 LSR R20 LSR R20 ANDI R21,(1 << PB3) | (1 << PB4) LSR R21 OR R21,R20 ANDI R22,(1 << PB3) | (1 << PB4) LSL R22 OR R22,R21 ; ??LKJIHG - D12 D6 D8 D2 D11 D4 LDI R21,0x3F EOR R22,R21 EOR R23,R23 ; Now is code in R23 and R22 Phase_4: LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) OUT PORTB,R17 LDI R16,(1 << DDB0) | (1 << DDB2) | (1 << DDB4) OUT DDRB,R16 LDI R17,(1 << PB4) ; Flashing for LEDs OUT PORTB,R17 LDI R17,255 Pause: DEC R17 BRNE Pause SBRC R23,4 ; D10(E) RCALL Key_0 SBRC R23,0 ; D1(A) RCALL Key_1 SBRC R22,2 ; D2(I) RCALL Key_2 SBRC R23,2 ; D3(C) RCALL Key_3 SBRC R22,0 ; D4(G) RCALL Key_4 SBRC R23,1 ; D5(B) RCALL Key_5 SBRC R22,4 ; D6(K) RCALL Key_6 SBRC R23,3 ; D7(D) RCALL Key_7 SBRC R22,3 ; D8(J) RCALL Key_8 SBRC R23,5 ; D9(F) RCALL Key_9 Stopped:RJMP Phase_1 Key_0: NOP Key_1: NOP Key_2: NOP Key_3: NOP Key_4: NOP Key_5: NOP Key_6: NOP Key_7: NOP Key_8: NOP Key_9: NOP RET