Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "p18F4520.inc"
- CONFIG OSC = HS
- CONFIG PWRT = OFF
- CONFIG WDT = OFF
- CONFIG PBADEN = OFF
- CONFIG LVP = OFF
- org 0x000000
- PORST GOTO MAIN
- org 0x000020
- ;*************************************************************
- ;*****MASTER LOOPER*****ADJUST COUNT1,2,3 for delay***********
- ;*************[7+(3xCOUNT3)x(3xCOUNT2)x(3xCOUNT3)*************
- ;*******************NotBranch ignored*************************
- R1 EQU 0x1
- R2 EQU 0x2
- R3 EQU 0x3
- COUNT1 EQU D'10'
- COUNT2 EQU D'1'
- COUNT3 EQU D'10'
- QDELAY MOVLW 0x55 ; 1
- MOVLW COUNT3 ; 1
- MOVWF R3 ; 1
- LOP3 MOVLW COUNT2 ; 1
- MOVWF R2 ; 1
- LOP2 MOVLW COUNT1 ; 1
- MOVWF R1 ; 1
- LOP1 DECF R1,F ; 1
- BNZ LOP1 ; 2
- DECF R2,F ; 1
- BNZ LOP2 ; 2
- DECF R3,F ; 1
- BNZ LOP3 ; 2
- RETURN
- ;*************************************************************
- ;*****MASTER LOOPER*****END***********************************
- ;*************************************************************
- ;*****************************************************
- ;**************8x8 display 7-segment INIT*************
- IC8COL equ 0x07F
- ;*****************************************************
- EC8INIT BCF TRISA,1
- BCF TRISA,2
- BCF TRISA,3
- BCF TRISA,5
- BCF TRISE,0 ; E0 Out for Col 5
- BCF TRISE,1 ; E1 Out for Col 6
- BCF TRISE,2 ; E2 Out for Col 7
- BCF TRISC,0 ; C0 Out for Col 8
- CLRF IC8COL
- CALL EC8FREE
- RETURN
- EC8COLQ MOVF IC8COL,W
- RETURN
- EC8NXTQ INCF IC8COL,W
- BTFSC WREG,2 ; VARNING orginal toolbox ändrad här 2 istället för 3
- CLRF WREG ; Börja om om från 0
- RETURN
- EC8FREE BCF PORTA,1
- BCF PORTA,2
- BCF PORTA,3
- BCF PORTA,5
- BCF PORTE,0
- BCF PORTE,1
- BCF PORTE,2
- BCF PORTC,0
- RETURN
- EC8NEXT CALL EC8NXTQ ; Gå till nästa column
- MOVWF IC8COL
- RLNCF WREG
- RLNCF WREG
- ADDWF PCL
- BSF PORTA,1
- RETURN
- BSF PORTA,2
- RETURN
- BSF PORTA,3
- RETURN
- BSF PORTA,5
- RETURN
- BSF PORTE,0
- RETURN
- BSF PORTE,1
- RETURN
- BSF PORTE,2
- RETURN
- BSF PORTC,0
- RETURN
- ;**************END OF*********************************
- ;**************8x8 display 7-segment INIT*************
- ;*****************************************************
- ;*****************************************************
- ;**************KEYBOARD*******************************
- ;******************************************************************************
- IKTEMP equ 0x003
- IKPREV equ 0x004
- IKTIME equ 0x005
- EKINIT BSF TRISB,RB0
- BSF TRISB,RB2
- BSF TRISB,RB4
- BSF TRISB,RB5
- SETF IKPREV
- CLRF IKTIME
- RETURN
- EKDOWNQ CALL EC8COLQ
- DECFSZ WREG
- GOTO LKDOWNQ
- DCFSNZ IKTIME
- INCF IKTIME
- LKDOWNQ SETF WREG ;Anta att ingen knappt är tryckt
- BTFSS PORTB,RB0 ;Är en knapp på kolumn 0 tryckt?
- CLRF WREG ; Spara 0 i WREG
- BTFSS PORTB,RB2 ;Är en knapp på kolumn 1 tryckt?
- MOVLW 0x01 ; Spara 1 i WREG
- BTFSS PORTB,RB4 ;Är en knapp på kolumn 2 tryckt?
- MOVLW 0x02 ; Spara 2 i WREG
- BTFSS PORTB,RB5 ;Är en knapp på kolumn 3 tryckt?
- MOVLW 0x03 ; Spara 3 i WREG
- BTFSC WREG,7 ;
- RETURN
- MOVWF IKTEMP ; Spara kolumnen för knappen tryckt
- CALL EC8COLQ ; Kolla raden den var i
- RLNCF WREG
- RLNCF WREG ; 0000 0100
- IORWF IKTEMP ; Spara den!
- MOVF IKPREV,W
- XORWF IKTEMP,W ; Är det samma knapp igen?
- BNZ LKNEW ; Ny knapp = branch!
- MOVF IKTEMP,W ; Om det är samma knapp så spara den här
- DECFSZ IKTIME
- SETF WREG
- RETURN
- LKNEW MOVF IKTEMP,W ; Ny knapp är tryckt!
- MOVWF IKPREV ; Spara det!
- CLRF IKTIME ; Återställä räknare
- RETURN
- ;*************END KEY TOOLBOX*************
- ;*****************************************************
- CURSYM equ 0x071
- ;******************0-9, A-F****************************
- ELDFSR LFSR 0, 0x020
- MOVLW 0x3F ;Siffran 0
- MOVWF POSTINC0
- MOVLW 0x06 ;Siffran 1
- MOVWF POSTINC0
- MOVLW 0x5B ;Siffran 2
- MOVWF POSTINC0
- MOVLW 0x4F ;Siffran 3
- MOVWF POSTINC0
- MOVLW 0x66 ;Siffran 4
- MOVWF POSTINC0
- MOVLW 0x6D ;Siffran 5
- MOVWF POSTINC0
- MOVLW 0x7D ;Siffran 6
- MOVWF POSTINC0
- MOVLW 0x07 ;Siffran 7
- MOVWF POSTINC0
- MOVLW 0x7F ;Siffran 8
- MOVWF POSTINC0
- MOVLW 0x6F ;Siffran 9
- MOVWF POSTINC0
- MOVLW 0x77 ;Bokstaven A
- MOVWF POSTINC0
- MOVLW 0x7C ;Bokstaven b
- MOVWF POSTINC0
- MOVLW 0x39 ;Bokstaven c
- MOVWF POSTINC0
- MOVLW 0x5E ;Bokstaven d
- MOVWF POSTINC0
- MOVLW 0x79 ;Bokstaven E
- MOVWF POSTINC0
- MOVLW 0x71 ;Bokstaven F
- MOVWF INDF0 ; Adress 0x02F
- RETURN
- EGETNR MOVFF PLUSW0, CURSYM
- RETURN
- ;********************************************************
- ;******************************************************
- ;******************MAIN PROGRAM**************************
- ;********************************************************
- MAIN CALL EC8INIT
- CALL EKINIT
- CLRF CURSYM
- CALL ELDFSR
- LFSR 0, 0x020
- CLRF TRISD ; PortD ska vara UT idag
- MLOOP CLRF PORTD ; Rensa PORTD inför kolumncheck
- CALL EC8NEXT ; Tänd nästa kolumn
- CALL EKDOWNQ ; Kolla vilken knapp som är tryckt
- BTFSS WREG,7 ; Var en knapp tryckt?
- CALL EGETNR ; Ja då hämtar vi rätt bokstav
- MOVFF CURSYM,PORTD ; Lägger den i portD
- BSF PORTA,1 ; Tänder CS8, 7seg
- CALL QDELAY ; Lyser lite
- CALL EC8FREE ; Släcker allt
- GOTO MLOOP ; en gång till!
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement