miyago

Untitled

Feb 19th, 2018
1,226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "p18F4520.inc"
  2.    
  3.     CONFIG OSC = HS
  4.     CONFIG PWRT = OFF
  5.     CONFIG WDT = OFF
  6.     CONFIG PBADEN = OFF
  7.     CONFIG LVP = OFF
  8.    
  9.     org 0x000000
  10.    
  11. PORST   GOTO    MAIN
  12.    
  13.     org 0x000020
  14. ;----Quick DELAY------------------
  15. IDONCE  equ 0x7F
  16.  
  17. QDELAY  CLRF    IDONCE
  18. QLOOP   DECFSZ  IDONCE
  19.         GOTO    QLOOP
  20.         RETURN
  21. ;----END OF QUICK DELAY------------------
  22.        
  23. ;*********SYMBO
  24.     ;*****************************************************
  25.     ;**************8x8 display 7-segment INIT*************
  26.     IC8COL  equ 0x07F
  27.     ;*****************************************************
  28.     EC8INIT     BCF     TRISA,1
  29.                 BCF     TRISA,2
  30.                 BCF     TRISA,3
  31.                 BCF     TRISA,5
  32.                 BCF     TRISE,0     ; E0 Out for Col 5
  33.                 BCF     TRISE,1     ; E1 Out for Col 6
  34.                 BCF     TRISE,2     ; E2 Out for Col 7
  35.                 BCF     TRISC,0     ; C0 Out for Col 8
  36.                 CLRF    IC8COL
  37.                 CALL    EC8FREE
  38.                 RETURN
  39.  
  40.     EC8COLQ     MOVF    IC8COL,W
  41.                 RETURN
  42.              
  43.     EC8NXTQ     INCF    IC8COL,W
  44.                 BTFSC   WREG,3      ; Om 0000 0100 = 4
  45.                 CLRF    WREG        ; Börja om om från 0 ( vi har bara 0-3 )
  46.                 RETURN
  47.                
  48.     EC8FREE     BCF     PORTA,1
  49.                 BCF     PORTA,2
  50.                 BCF     PORTA,3
  51.                 BCF     PORTA,5
  52.                 BCF     PORTE,0
  53.                 BCF     PORTE,1
  54.                 BCF     PORTE,2
  55.                 BCF     PORTC,0
  56.                 RETURN
  57.                
  58.     EC8NEXT     CALL    EC8NXTQ     ; Gå till nästa column
  59.                 MOVWF   IC8COL
  60.  
  61.                 RLNCF   WREG
  62.                 RLNCF   WREG
  63.                 ADDWF   PCL
  64.                 BSF     PORTA,1
  65.                 RETURN
  66.                 BSF     PORTA,2
  67.                 RETURN
  68.                 BSF     PORTA,3
  69.                 RETURN
  70.                 BSF     PORTA,5
  71.                 RETURN        
  72.                 BSF     PORTE,0
  73.                 RETURN
  74.                 BSF     PORTE,1
  75.                 RETURN
  76.                 BSF     PORTE,2
  77.                 RETURN
  78.                 BSF     PORTC,0
  79.                 RETURN
  80.            
  81.     ;**************END OF*********************************
  82.     ;**************8x8 display 7-segment INIT*************
  83.     ;*****************************************************
  84.  
  85. ;*****************************************************
  86. ;**************KEYBOARD*******************************
  87. ;******************************************************************************
  88. IKTEMP  equ 0x003
  89. IKPREV  equ 0x004
  90. IKTIME  equ 0x005
  91.  
  92. EKINIT      BSF     TRISB,0
  93.             BSF     TRISB,2
  94.             BSF     TRISB,4
  95.             BSF     TRISB,5
  96.             SETF    IKPREV
  97.             CLRF    IKTIME
  98.             RETURN
  99.                
  100. EKDOWNQ     CALL    EC8COLQ
  101.             DECFSZ  WREG
  102.             GOTO    LKDOWNQ
  103.             DCFSNZ  IKTIME
  104.             INCF    IKTIME
  105. LKDOWNQ     SETF    WREG            ;Anta att ingen knappt är tryckt
  106.             BTFSS   PORTB,0         ;Är en knapp på kolumn 0 tryckt?
  107.             CLRF    WREG            ; Spara 0 i WREG
  108.             BTFSS   PORTB,2         ;Är en knapp på kolumn 1 tryckt?
  109.             MOVLW   0x01            ; Spara 1 i WREG
  110.             BTFSS   PORTB,4         ;Är en knapp på kolumn 2 tryckt?
  111.             MOVLW   0x02            ; Spara 2 i WREG
  112.             BTFSS   PORTB,5         ;Är en knapp på kolumn 3 tryckt?
  113.             MOVLW   0x03            ; Spara 3 i WREG
  114.             BTFSC   WREG,7          ;
  115.             RETURN
  116.             MOVWF   IKTEMP          ; Spara kolumnen för knappen tryckt 0000 0001
  117.             CALL    EC8COLQ          ; Kolla raden den var i             0000 0001
  118.             RLNCF   WREG
  119.             RLNCF   WREG            ; 0000 0100
  120.             IORWF   IKTEMP          ; Spara den!                0000 0101
  121.             MOVF    IKPREV,W
  122.             XORWF   IKTEMP,W        ; Är det samma knapp igen?
  123.             BNZ     LKNEW           ; Ny knapp = branch!
  124.            
  125.             MOVF    IKTEMP,W        ; Om det är samma knapp så spara den här
  126.             DECFSZ  IKTIME
  127.             SETF    WREG
  128.             RETURN
  129.            
  130. LKNEW       MOVF    IKTEMP,W        ; Ny knapp är tryckt!
  131.             MOVWF   IKPREV          ; Spara det!
  132.             CLRF    IKTIME          ; Återställä räknare
  133.             RETURN
  134. ;*************END KEY TOOLBOX*************
  135. ;*****************************************************
  136.     CURSYM  equ     0x071        
  137. ;******************0-9, A-F****************************    
  138.     ELDFSR      LFSR    0, 0x020
  139.                
  140.                 MOVLW   0x3F            ;Siffran 0 
  141.                 MOVWF   POSTINC0
  142.                 MOVLW   0x06            ;Siffran 1
  143.                 MOVWF   POSTINC0
  144.                 MOVLW   0x5B            ;Siffran 2
  145.                 MOVWF   POSTINC0
  146.                 MOVLW   0x4F            ;Siffran 3
  147.                 MOVWF   POSTINC0
  148.                 MOVLW   0x66            ;Siffran 4
  149.                 MOVWF   POSTINC0
  150.                 MOVLW   0x6D            ;Siffran 5
  151.                 MOVWF   POSTINC0
  152.                 MOVLW   0x7D            ;Siffran 6
  153.                 MOVWF   POSTINC0
  154.                 MOVLW   0x07            ;Siffran 7
  155.                 MOVWF   POSTINC0
  156.                 MOVLW   0x7F            ;Siffran 8
  157.                 MOVWF   POSTINC0
  158.                 MOVLW   0x6F            ;Siffran 9
  159.                 MOVWF   POSTINC0
  160.                 MOVLW   0x77            ;Bokstaven A
  161.                 MOVWF   POSTINC0
  162.                 MOVLW   0x7C            ;Bokstaven b
  163.                 MOVWF   POSTINC0
  164.                 MOVLW   0x39            ;Bokstaven c
  165.                 MOVWF   POSTINC0
  166.                 MOVLW   0x5E            ;Bokstaven d
  167.                 MOVWF   POSTINC0
  168.                 MOVLW   0x79            ;Bokstaven E
  169.                 MOVWF   POSTINC0
  170.                 MOVLW   0x71            ;Bokstaven F  
  171.                 MOVWF   INDF0           ; Adress 0x02F
  172.                 LFSR    0, 0x020
  173.                 RETURN
  174.        
  175.         EGETNR  MOVFF   PLUSW0, CURSYM
  176.                 RETURN
  177. ;********************************************************
  178. ;******************************************************
  179.  
  180.                
  181.                
  182.                
  183.                
  184.                
  185.                
  186. ;********************************************************
  187. ;********************************************************
  188.  
  189.         MAIN    CALL    EC8INIT
  190.                 CALL    EKINIT
  191.                 CLRF    CURSYM
  192.                              
  193.         MLOOP   CALL    EC8NXTQ
  194.                 CALL    E88VIEW
  195.        
  196.                 CALL    EC8NEXT         ; Kollar nästa rad..
  197.                 CALL    EKDOWNQ            ; ..om en knapp är tryckt
  198.                 BTFSS   WREG,7          ; Är en tryckt?
  199.                 CALL    EGETNR
  200.                 MOVLW   PORTD
  201.                 BSF     PORTA,1
  202.                 CALL    QDELAY          ; Lys
  203.                 CALL    EC8FREE         ; Släck
  204.                
  205.                 GOTO    MLOOP           ; en gång till!
  206.             end
Advertisement