#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
Comments
0 B
|👍
/👎