led7seg.inc
changeset 23 a6afc0eb347f
parent 18 79b25e81721f
child 25 33496b1a964f
equal deleted inserted replaced
22:fd72c63b8db8 23:a6afc0eb347f
    18 .db     0b01110111, 0b01111100      ; A, b
    18 .db     0b01110111, 0b01111100      ; A, b
    19 .db     0b00111001, 0b01011110      ; C, d
    19 .db     0b00111001, 0b01011110      ; C, d
    20 .db     0b01111001, 0b01110001      ; E, f
    20 .db     0b01111001, 0b01110001      ; E, f
    21 .db     0b10000000, 0b00000000      ; ., 
    21 .db     0b10000000, 0b00000000      ; ., 
    22 
    22 
    23 ;.db     0b00111111,     ; 0
    23 .equ LED7_0     = 0
    24 ;        0b00000110,     ; 1
    24 .equ LED7_1     = 1
    25 ;        0b01011011,     ; 2
    25 .equ LED7_2     = 2
    26 ;        0b01001111,     ; 3
    26 .equ LED7_3     = 3
    27 ;        0b01100110,     ; 4
    27 .equ LED7_4     = 4
    28 ;        0b01101101,     ; 5
    28 .equ LED7_5     = 5
    29 ;        0b01111101,     ; 6
    29 .equ LED7_6     = 6
    30 ;        0b00000111,     ; 7
    30 .equ LED7_7     = 7
    31 ;        0b01111111,     ; 8
    31 .equ LED7_8     = 8
    32 ;        0b01100111,     ; 9
    32 .equ LED7_9     = 9
    33 ;        0b10000000,     ; .
    33 .equ LED7_A     = 10
    34 ;        0b01000000      ; 
    34 .equ LED7_B     = 11
       
    35 .equ LED7_C     = 12
       
    36 .equ LED7_D     = 13
       
    37 .equ LED7_E     = 14
       
    38 .equ LED7_F     = 15
       
    39 .equ LED7_DOT   = 16
       
    40 .equ LED7_EMPTY = 17
    35 
    41 
    36 .equ LED7_0      = 0
    42 ; output buffer
    37 .equ LED7_1      = 1
    43 .set LED7_COUNT = 2
    38 .equ LED7_2      = 2
    44 
    39 .equ LED7_3      = 3
    45 .dseg
    40 .equ LED7_4      = 4
    46 led7_buffer:    .byte LED7_COUNT
    41 .equ LED7_5      = 5
    47 
    42 .equ LED7_6      = 6
    48 .cseg
    43 .equ LED7_7      = 7
       
    44 .equ LED7_8      = 8
       
    45 .equ LED7_9      = 9
       
    46 .equ LED7_A      = 10
       
    47 .equ LED7_B      = 11
       
    48 .equ LED7_C      = 12
       
    49 .equ LED7_D      = 13
       
    50 .equ LED7_E      = 14
       
    51 .equ LED7_F      = 15
       
    52 .equ LED7_DOT    = 16
       
    53 .equ LED7_EMPTY  = 17
       
    54 
    49 
    55 ;; Initialize LCD to empty, and enable
    50 ;; Initialize LCD to empty, and enable
    56 LED7_Init:
    51 LED7_Init:
    57     ; Setup ENable port
    52     ; Setup ENable port
    58         sbi         LED7_PORT, LED7_OE    ; Disabled (Low)
    53         sbi         LED7_PORT, LED7_OE    ; Disabled (Low)
    59         sbi         LED7_DDR, LED7_OE     ; Out
    54         sbi         LED7_DDR, LED7_OE     ; Out
    60 
    55     
    61         ; empty
    56     ; Initialize buffer
    62         ldi         r16, 0b11111111
    57         ldi         r16, 0b11111111
       
    58         sts         led7_buffer + 0, r16
       
    59         sts         led7_buffer + 1, r16
    63 
    60 
    64     ; Output
    61     ; Output
    65         rcall       SPI_SendRecv
    62         ldi         r16, LED7_COUNT
    66         rcall       SPI_Wait
    63         ldi         XL, low(led7_buffer + LED7_COUNT)
       
    64         ldi         XH, high(led7_buffer + LED7_COUNT)
       
    65         rcall       SPI_SendBuf
    67 
    66 
    68     ; Enable
    67     ; Enable output once the initial display has been shifted out
    69         cbi         LED7_PORT, LED7_OE
    68         cbi         LED7_PORT, LED7_OE
    70 
    69 
    71     ; Done
    70     ; Done
    72         ret
    71         ret
    73 
    72 
    74 ;; Display a single digit on the display
    73 LED7_LoadChar:
    75 ;;  Input: r16
       
    76 LED7_Show:
       
    77         clr         r0, 0
    74         clr         r0, 0
    78 
    75 
    79     ; Prep address
    76     ; Prep address
    80         ; base addr for font table
    77         ; base addr for font table
    81         ldi         ZH, high(2*LED7_Font)
    78         ldi         ZH, high(2 * LED7_Font)
    82         ldi         ZL, low(2*LED7_Font)
    79         ldi         ZL, low(2 * LED7_Font)
    83         
    80         
    84         ; offset
    81         ; offset
    85         add         ZL, r16
    82         add         ZL, r8
    86         adc         ZH, r0
    83         adc         ZH, r0
    87 
    84 
    88     ; Load char
    85     ; Load char
    89         lpm         r16, Z
    86         lpm         r8, Z
    90     
    87 
       
    88     ; Done
       
    89         ret
       
    90  
       
    91 ;; Display a single digit on the display
       
    92 ;;  Input: r16, r17
       
    93 LED7_Show:
       
    94         mov         r8, r16
       
    95         rcall       LED7_LoadChar
       
    96         mov         r16, r8
       
    97 
       
    98         mov         r8, r16
       
    99         rcall       LED7_LoadChar
       
   100         mov         r16, r8
       
   101         
    91     ;; Continue
   102     ;; Continue
    92 
   103 
    93 ;; Display a raw segment mask
   104 ;; Display a raw segment mask
    94 ;;  Input: r16
   105 ;;  Input: r16, r17
    95 LED7_ShowRaw:
   106 LED7_ShowRaw:
    96     ; Invert
   107     ; Set buffer
    97         ; com         r16
   108         sts         led7_buffer + 0, r16
       
   109         sts         led7_buffer + 1, r17
       
   110 
       
   111     ; Output
       
   112         ldi         r16, LED7_COUNT
       
   113         ldi         XL, low(led7_buffer + LED7_COUNT)
       
   114         ldi         XH, high(led7_buffer + LED7_COUNT)
    98 
   115 
    99     ; Display
   116     ; Display
   100         rjmp        SPI_SendRecv
   117         rjmp        SPI_SendBuf
   101 
   118 
   102 
   119