#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************* ;***************************************************** 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 LFSR 0, 0x020 RETURN EGETNR MOVFF PLUSW0, CURSYM RETURN ;******************************************************** ;****************************************************** ;******************************************************** ;******************************************************** MAIN CALL EC8INIT CALL EKINIT CLRF CURSYM MLOOP CALL EC8NXTQ CALL E88VIEW CALL EC8NEXT ; Kollar nästa rad.. CALL EKDOWNQ ; ..om en knapp är tryckt BTFSS WREG,7 ; Är en tryckt? CALL EGETNR MOVLW PORTD BSF PORTA,1 CALL QDELAY ; Lys CALL EC8FREE ; Släck GOTO MLOOP ; en gång till! end