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
- ;----Quick DELAY------------------
- IDONCE equ 0x7F
- QDELAY CLRF IDONCE
- QLOOP DECFSZ IDONCE
- GOTO QLOOP
- RETURN
- ;----END OF QUICK DELAY------------------
- ;*********SYMBO
- ;*****************************************************
- ;**************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,3 ; Om 0000 0100 = 4
- CLRF WREG ; Börja om om från 0 ( vi har bara 0-3 )
- 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,0
- BSF TRISB,2
- BSF TRISB,4
- BSF TRISB,5
- 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,0 ;Är en knapp på kolumn 0 tryckt?
- CLRF WREG ; Spara 0 i WREG
- BTFSS PORTB,2 ;Är en knapp på kolumn 1 tryckt?
- MOVLW 0x01 ; Spara 1 i WREG
- BTFSS PORTB,4 ;Är en knapp på kolumn 2 tryckt?
- MOVLW 0x02 ; Spara 2 i WREG
- BTFSS PORTB,5 ;Ä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 0000 0001
- CALL EC8COLQ ; Kolla raden den var i 0000 0001
- RLNCF WREG
- RLNCF WREG ; 0000 0100
- IORWF IKTEMP ; Spara den! 0000 0101
- 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*************
- ;*****************************************************
- S88DISP equ 0x020
- ;*Ä***
- E88INIT CLRF TRISD
- LFSR 0,S88DISP
- CLRF S88DISP+0
- CLRF S88DISP+1
- CLRF S88DISP+2
- CLRF S88DISP+3
- CLRF S88DISP+4
- CLRF S88DISP+5
- CLRF S88DISP+6
- CLRF S88DISP+7
- RETURN
- E88VIEW MOVFF PLUSW0,PORTD
- RETURN
- ;******************************************************
- ;********************************************************
- ;********************************************************
- MAIN CALL EC8INIT
- CALL EKINIT
- CALL E88INIT
- LFSR 1,S88DISP
- MLOOP CALL EC8NXTQ
- CALL E88VIEW
- CALL EC8NEXT ; Kollar nästa rad..
- CALL EKDOWNQ ; ..om en knapp är tryckt
- BTFSS WREG,7 ; Är en tryckt?
- MOVWF POSTINC1
- BTFSC FSR1L,3
- LFSR 1,S88DISP
- CALL QDELAY ; Lys
- CALL EC8FREE ; Släck
- GOTO MLOOP ; en gång till!
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement