Advertisement
miyago

ACKboard

Feb 19th, 2018
97
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.            
  137. S88DISP equ     0x020
  138.  
  139.  ;*Ä***
  140.     E88INIT     CLRF    TRISD
  141.                 LFSR    0,S88DISP
  142.                 CLRF    S88DISP+0
  143.                 CLRF    S88DISP+1
  144.                 CLRF    S88DISP+2
  145.                 CLRF    S88DISP+3
  146.                 CLRF    S88DISP+4
  147.                 CLRF    S88DISP+5
  148.                 CLRF    S88DISP+6
  149.                 CLRF    S88DISP+7
  150.                 RETURN
  151.            
  152.     E88VIEW     MOVFF   PLUSW0,PORTD
  153.                 RETURN
  154. ;******************************************************
  155.  
  156. ;********************************************************
  157. ;********************************************************
  158.  
  159.         MAIN    CALL    EC8INIT
  160.                 CALL    EKINIT
  161.                 CALL    E88INIT
  162.                 LFSR    1,S88DISP
  163.                
  164.                              
  165.         MLOOP   CALL    EC8NXTQ
  166.                 CALL    E88VIEW
  167.                        
  168.                 CALL    EC8NEXT         ; Kollar nästa rad..
  169.                 CALL    EKDOWNQ            ; ..om en knapp är tryckt
  170.                 BTFSS   WREG,7          ; Är en tryckt?
  171.                 MOVWF   POSTINC1
  172.                 BTFSC   FSR1L,3
  173.                 LFSR    1,S88DISP
  174.                 CALL    QDELAY          ; Lys
  175.                 CALL    EC8FREE         ; Släck
  176.                
  177.                 GOTO    MLOOP           ; en gång till!
  178.             end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement