INCLUDE P16F877A.INC
__CONFIG _XT_OSC & _WDT_OFF & _LVP_OFF
; Count for keys
; Initialise ports
sho EQU 0x30
key EQU 0x20
addvalue EQU 0x21
num1 EQU 0x22
num2 EQU 0x23
num3 EQU 0x32
num4 EQU 0x33
num5 EQU 0x34
num6 EQU 0x26
num7 EQU 0x27
BANKSEL TRISD ;
MOVLW B'00001111' ; Set RD0-RD3 as inputs for Rows 1,2,3,4
MOVWF TRISD ; and RD4-RD7 as outputs for Columns 1,2,3
BANKSEL PORTD
CLRW ; Clear PORTD
MOVWF PORTD
BANKSEL TRISC
CLRW ; Set PORTC as outputs
MOVWF TRISC
BANKSEL PORTC
CLRF PORTC
BANKSEL TRISA
CLRW ; Set PORTC as outputs
MOVWF TRISA
BANKSEL PORTA
CLRF PORTA
movlw 0xFE
movwf key
clrw
GOTO main
; Read keypad
main movlw 0x01
movwf PORTA
movf num6,w
movwf PORTC
clrw
;movlw 0x02
;movwf PORTA
;movf num7,w
;movwf PORTC
;clrw
call scan
GOTO main ; Repeat
scan BSF PORTD,4 ; Column 1 = 1
BCF PORTD,5 ; Column 2 = 0
BCF PORTD,6 ; Column 3 = 0
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call one ; Key = 1
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call four ; Key = 4
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call seven ; Key = 7
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call equal ; Key = * (10)
BCF PORTD,4 ; Column 1 = 0
BSF PORTD,5 ; Column 2 = 1
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call two ; Key = 2
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call five ; Key = 5
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call eight ; Key = 8
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call zero ; Key = 0 (11)
BCF PORTD,5 ; Column 2 = 0
BSF PORTD,6 ; Column 3 = 1
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call three ; Key = 3
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call six ; Key = 6
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call nine ; Key = 9
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call add ; Key = +
return
add movlw 0x01
movwf addvalue
movf num1,w
movwf num3
movf num2,w
movwf num4
return
equal movf num1,w
addwf num3,w
movwf num1
call check
movwf num6
;movf num2,w
;addwf num4,w
;movwf num2
;call check
;movwf num7
;btfsc num1,3
;call checkcarry
return
;checkcarry movlw 0x0A
; btfsc num1,2
; call checkcarry1
; movwf num1
; movlw 0x01
; addwf num2,w
; movwf num2
return
;checkcarry1 btfsc num1,1
; subwf num1,w
; return
;show1 movf num1,w
; movwf num2
;
; MOVF num2,W
; call check
; movwf num7
; return
zero ;movlw 0x00
;movwf num5
;btfss key,1
;call show1
movlw 0x00
movwf num1
movlw 0xFD
movwf key
movlw B'01111110'
movwf num6
return
one ;btfss key,1
;call show1
movlw 0x01
movwf num1
movlw 0xFD
movwf key
movlw B'00001100'
movwf num6
return
two ;btfss key,1
;call show1
movlw 0x02
movwf num1
movlw 0xFD
movwf key
movlw B'10110110'
movwf num6
return
three ;btfss key,1
;call show1
movlw 0x03
movwf num1
movlw 0xFD
movwf key
movlw B'10011110'
movwf num6
return
four ;btfss key,1
;call show1
movlw 0x04
movwf num1
movlw 0xFD
movwf key
movlw B'11001100'
movwf num6
return
five ;btfss key,1
;call show1
movlw 0x05
movwf num1
movlw 0xFD
movwf key
movlw B'11011010'
movwf num6
return
six ;btfss key,1
;call show1
movlw 0x06
movwf num1
movlw 0xFD
movwf key
movlw B'11111010'
movwf num6
return
seven ;btfss key,1
;call show1
movlw 0x07
movwf num1
movlw 0xFD
movwf key
movlw B'00001110'
movwf num6
return
eight ;btfss key,1
;call show1
movlw 0x08
movwf num1
movlw 0xFD
movwf key
movlw B'11111110'
movwf num6
return
nine ;btfss key,1
;call show1
movlw 0x09
movwf num1
movlw 0xFD
movwf key
movlw B'11001110'
movwf num6
return
check ; Get key number
ADDWF PCL ; Jump to Program Counter + W
RETLW B'01111110' ; Code for '0'
RETLW B'00001100' ; Code for '1'
RETLW B'10110110' ; Code for '2'
RETLW B'10011110' ; Code for '3'
RETLW B'11001100' ; Code for '4'
RETLW B'11011010' ; Code for '5'
RETLW B'11111010' ; Code for '6'
RETLW B'00001110' ; Code for '7'
RETLW B'11111110' ; Code for '8'
RETLW B'11001110' ; Code for '9'
end
please help me!!
__CONFIG _XT_OSC & _WDT_OFF & _LVP_OFF
; Count for keys
; Initialise ports
sho EQU 0x30
key EQU 0x20
addvalue EQU 0x21
num1 EQU 0x22
num2 EQU 0x23
num3 EQU 0x32
num4 EQU 0x33
num5 EQU 0x34
num6 EQU 0x26
num7 EQU 0x27
BANKSEL TRISD ;
MOVLW B'00001111' ; Set RD0-RD3 as inputs for Rows 1,2,3,4
MOVWF TRISD ; and RD4-RD7 as outputs for Columns 1,2,3
BANKSEL PORTD
CLRW ; Clear PORTD
MOVWF PORTD
BANKSEL TRISC
CLRW ; Set PORTC as outputs
MOVWF TRISC
BANKSEL PORTC
CLRF PORTC
BANKSEL TRISA
CLRW ; Set PORTC as outputs
MOVWF TRISA
BANKSEL PORTA
CLRF PORTA
movlw 0xFE
movwf key
clrw
GOTO main
; Read keypad
main movlw 0x01
movwf PORTA
movf num6,w
movwf PORTC
clrw
;movlw 0x02
;movwf PORTA
;movf num7,w
;movwf PORTC
;clrw
call scan
GOTO main ; Repeat
scan BSF PORTD,4 ; Column 1 = 1
BCF PORTD,5 ; Column 2 = 0
BCF PORTD,6 ; Column 3 = 0
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call one ; Key = 1
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call four ; Key = 4
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call seven ; Key = 7
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call equal ; Key = * (10)
BCF PORTD,4 ; Column 1 = 0
BSF PORTD,5 ; Column 2 = 1
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call two ; Key = 2
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call five ; Key = 5
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call eight ; Key = 8
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call zero ; Key = 0 (11)
BCF PORTD,5 ; Column 2 = 0
BSF PORTD,6 ; Column 3 = 1
BTFSC PORTD,0 ; Test and skip if Row 1 = 0
call three ; Key = 3
BTFSC PORTD,1 ; Test and skip if Row 2 = 0
call six ; Key = 6
BTFSC PORTD,2 ; Test and skip if Row 3 = 0
call nine ; Key = 9
BTFSC PORTD,3 ; Test and skip if Row 4 = 0
call add ; Key = +
return
add movlw 0x01
movwf addvalue
movf num1,w
movwf num3
movf num2,w
movwf num4
return
equal movf num1,w
addwf num3,w
movwf num1
call check
movwf num6
;movf num2,w
;addwf num4,w
;movwf num2
;call check
;movwf num7
;btfsc num1,3
;call checkcarry
return
;checkcarry movlw 0x0A
; btfsc num1,2
; call checkcarry1
; movwf num1
; movlw 0x01
; addwf num2,w
; movwf num2
return
;checkcarry1 btfsc num1,1
; subwf num1,w
; return
;show1 movf num1,w
; movwf num2
;
; MOVF num2,W
; call check
; movwf num7
; return
zero ;movlw 0x00
;movwf num5
;btfss key,1
;call show1
movlw 0x00
movwf num1
movlw 0xFD
movwf key
movlw B'01111110'
movwf num6
return
one ;btfss key,1
;call show1
movlw 0x01
movwf num1
movlw 0xFD
movwf key
movlw B'00001100'
movwf num6
return
two ;btfss key,1
;call show1
movlw 0x02
movwf num1
movlw 0xFD
movwf key
movlw B'10110110'
movwf num6
return
three ;btfss key,1
;call show1
movlw 0x03
movwf num1
movlw 0xFD
movwf key
movlw B'10011110'
movwf num6
return
four ;btfss key,1
;call show1
movlw 0x04
movwf num1
movlw 0xFD
movwf key
movlw B'11001100'
movwf num6
return
five ;btfss key,1
;call show1
movlw 0x05
movwf num1
movlw 0xFD
movwf key
movlw B'11011010'
movwf num6
return
six ;btfss key,1
;call show1
movlw 0x06
movwf num1
movlw 0xFD
movwf key
movlw B'11111010'
movwf num6
return
seven ;btfss key,1
;call show1
movlw 0x07
movwf num1
movlw 0xFD
movwf key
movlw B'00001110'
movwf num6
return
eight ;btfss key,1
;call show1
movlw 0x08
movwf num1
movlw 0xFD
movwf key
movlw B'11111110'
movwf num6
return
nine ;btfss key,1
;call show1
movlw 0x09
movwf num1
movlw 0xFD
movwf key
movlw B'11001110'
movwf num6
return
check ; Get key number
ADDWF PCL ; Jump to Program Counter + W
RETLW B'01111110' ; Code for '0'
RETLW B'00001100' ; Code for '1'
RETLW B'10110110' ; Code for '2'
RETLW B'10011110' ; Code for '3'
RETLW B'11001100' ; Code for '4'
RETLW B'11011010' ; Code for '5'
RETLW B'11111010' ; Code for '6'
RETLW B'00001110' ; Code for '7'
RETLW B'11111110' ; Code for '8'
RETLW B'11001110' ; Code for '9'
end
please help me!!