Ken Webster says:
I just happened to have an example [of a keyboard to SX interface]. It is for a 4x4 keypad connected [...] on PORTB. It doesn't do the fast scan ... just a plain old one-row-at-a-time scan. I had PORTB (output latch) set to 0. Weak pullups were enabled.Pinout is kinda funky (to make PCB layout easier):
6---(1)-(2)-(3)-(A) | | | | 7---(4)-(5)-(6)-(B) | | | | 5---(7)-(8)-(9)-(C) | | | | 2---(*)-(0)-(#)-(D) | | | | 3 4 0 1 ;------------------------------------------------------------ ;Called by interrupt handler to scan the keypad ;Returns with W=ASCII if a key is pressed, W=0 otherwise ;Interrupt handler performs debounce SCAN1 mov W, #$40 ;Enable ROW0 output mov DDRB, W nop nop sb RB.3 retw #'1' sb RB.4 retw #'2' sb RB.0 retw #'3' sb RB.1 retw #'A' mov W, #$80 ;ROW1 mov DDRB, W nop nop sb RB.3 retw #'4' sb RB.4 retw #'5' sb RB.0 retw #'6' sb RB.1 retw #'B' mov W, #$20 ;ROW2 mov DDRB, W nop nop sb RB.3 retw #'7' sb RB.4 retw #'8' sb RB.0 retw #'9' sb RB.1 retw #'C' mov W, #$04 ;ROW3 mov DDRB, W nop nop sb RB.3 retw #'*' sb RB.4 retw #'0' sb RB.0 retw #'#' sb RB.1 retw #'D' retw #0
Interested: