#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