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 |