* 连线: _ _ * | PA7 —— X4 | * | PA6 —— X3 | * | PA5 —— X2 |
* GP32| PA4 —— X1 |KEYPAD * | PA3 —— Y4 | * | PA2 —— Y3 | * | PA1 —— Y2 | * | PA0 —— Y1 _| * |
* |_ PB0--7 —— OUT0--7 (LED) *
*===========Registers==================== porta equ $00 portb equ $01 ddra equ $04 ddrb equ $05 intkbstr equ $001a keyf equ 3 ackk equ 2 imaskk equ 1 modek equ 0 intkubier equ $001b ptapue equ $000d
*========================================= org $00B0
key_buf rmb 1 *
org $8000
main:
lda #%11111111 sta portb lda #$ff sta ddrb
jsr keyboard_init ;跳转 bra keyboard_int
*========================================== keyboard_init
lda #%00000000 ;out \"0\" to create interrupt sta porta
lda #%00001111 ;low bits out, high bits in sta ddra
lda #%11110000
sta ptapue ;input pin pull up to vdd sta intkubier ;interrupt enable
cli ;开中断 rts
*============键盘中断====================== keyboard_int
bset imaskk,intkbstr ;disable keyboard interrupt
lda porta ;只有高四位输入 ora #%00001111 ;或,取高四位 sta porta ;低四位输出 bclr 0,porta nop nop
lda porta
and #%11110000 cmp #$f0
beq key_next1 ;等于转移 lda porta JSR change LSL portb LSL portb LSL portb LSL portb 这里加一个延迟函数
coma ;对A取反 and #$0f add portb
因篇幅问题不能全部显示,请点此查看更多更全内容