📄 ex0501.asm
字号:
;
; EX0501.ASM
;
LIST P=16F877, R=DEC
#INCLUDE <P16F877.INC>
CBLOCK 0X20
ENDC
;
; define RAM
;
CBLOCK
KYBUF,R0
ENDC
;
ORG 0
NOP ;
BANKSEL TRISB
MOVLW 0
MOVWF TRISB
MOVWF TRISD
BANKSEL PORTB
MOVLW H'FF' ; turn off LEDS
MOVWF PORTB
;
CLRF DATBF1 ; clear data buffers
CLRF DATBF2
;
;=======================
MAIN:
CALL FOURLED
CALL KB4X4 ; read kyboard
BTFSC KYBUF,4 ; Key detected?
GOTO MAIN
MOVF KYBUF,W
MOVWF DATBF1
;
MAIN2:
CALL KB4X4
BTFSS KYBUF,4 ; KEY RELEASED?
GOTO MAIN2 ; w=zero means key still pressed
;
GOTO MAIN ; w = non-zero means key released !!!
;
; define port
;
PORT4X4 EQU PORTD ; keyboard is connected with portd
TRIS4X4 EQU TRISD ; set direction of port
;
;
KB4X4:
MOVLW H'FF' ;
MOVWF PORT4X4 ; turn off all pins
;
BANKSEL TRIS4X4 ; TRIS4X4 is in bank1
MOVLW B'00001111' ; b0~3=input, b4~7=output
MOVWF TRIS4X4 ;
BANKSEL PORT4X4 ; PORT4X4 is in bank0
;
MOVLW B'11101111' ; select RAW1 (0~3)
MOVWF PORT4X4
MOVLW H'10' ; preset KYBUF to be 0X10
BTFSS PORT4X4,0 ; key 0 ?
MOVLW 0
BTFSS PORT4X4,1 ; key 1 ?
MOVLW 1
BTFSS PORT4X4,2 ; key 2 ?
MOVLW 2
BTFSS PORT4X4,3 ; key 3 ?
MOVLW 3
MOVWF KYBUF ; store result
BTFSS KYBUF,4
GOTO KB4X4_1
;
BSF PORT4X4,4 ; turn off RAW1
BCF PORT4X4,5 ; turn on RAW2(4~7)
CALL KB4X4_DLY
;
BTFSS PORT4X4,0 ; key 4 ?
MOVLW 4
BTFSS PORT4X4,1 ; key 5 ?
MOVLW 5
BTFSS PORT4X4,2 ; key 6 ?
MOVLW 6
BTFSS PORT4X4,3 ; key 7 ?
MOVLW 7
MOVWF KYBUF ; store result
BTFSS KYBUF,4
GOTO KB4X4_1
;
BSF PORT4X4,5 ; turn off RAW2
BCF PORT4X4,6 ; turn on RAW3(8~B)
CALL KB4X4_DLY
;
BTFSS PORT4X4,0 ; key 8 ?
MOVLW 8
BTFSS PORT4X4,1 ; key 9 ?
MOVLW 9
BTFSS PORT4X4,2 ; key A ?
MOVLW H'A'
BTFSS PORT4X4,3 ; key B ?
MOVLW H'B'
MOVWF KYBUF ; store result
BTFSS KYBUF,4
GOTO KB4X4_1
;
BSF PORT4X4,6 ; turn off RAW3
BCF PORT4X4,7 ; turn on RAW4(C~F)
CALL KB4X4_DLY
;
BTFSS PORT4X4,0 ; key C ?
MOVLW H'C'
BTFSS PORT4X4,1 ; key D ?
MOVLW H'D'
BTFSS PORT4X4,2 ; key E ?
MOVLW H'E'
BTFSS PORT4X4,3 ; key F ?
MOVLW H'F'
MOVWF KYBUF ; store result
;
KB4X4_1:
BSF PORT4X4,7
RETURN
;
KB4X4_DLY: ; used for 16MHz CPU
NOP
NOP
NOP
RETURN
;---------------------------------------------------------------;
;
#INCLUDE <FOURLED.INC> ;
;
; externally defined pins (in main program) ;
;
PORTSEG EQU PORTD ; segment port ;
TRISEG EQU TRISD ; direction of segment port ;
PORTCA EQU PORTB ; common anode port ;
TRICA EQU TRISB ; direction of segment port ;
;
#INCLUDE <DLY2_5mS.INC> ;
;
;===============================================================;
;
;
;
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -