Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/oled_samsung.asm @ 163:144822282fa3
Fusion declaration of shared C/ASM variables.
+ remove unused variables.
+ sort all in variables in BANK3, and out variables in BANK2.
author | JeanDo |
---|---|
date | Fri, 21 Jan 2011 01:44:37 +0100 |
parents | fc699a7460e6 |
children | cb055a7d75f3 |
rev | line source |
---|---|
0 | 1 ; OSTC - diving computer code |
2 ; Copyright (C) 2009 HeinrichsWeikamp GbR | |
3 | |
4 ; This program is free software: you can redistribute it and/or modify | |
5 ; it under the terms of the GNU General Public License as published by | |
6 ; the Free Software Foundation, either version 3 of the License, or | |
7 ; (at your option) any later version. | |
8 | |
9 ; This program is distributed in the hope that it will be useful, | |
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 ; GNU General Public License for more details. | |
13 | |
14 ; You should have received a copy of the GNU General Public License | |
15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | |
17 | |
18 ; hardware routines for S6E6D6 Samsung OLED Driver IC | |
19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
20 ; written: 090801 | |
142 | 21 ; History: |
22 ; 2009-08-30: [MH] last updated. | |
23 ; 2011-01-07: [jDG] Added flip_screen option | |
24 ; known bugs: pixel-write (loogbok curves) not done yet... | |
25 ; ToDo: | |
0 | 26 |
27 WIN_FONT macro win_font_input | |
28 movlw win_font_input | |
29 movff WREG,win_font | |
30 endm | |
31 | |
32 WIN_TOP macro win_top_input | |
33 movlw win_top_input | |
34 movff WREG,win_top | |
35 endm | |
36 | |
37 WIN_LEFT macro win_left_input | |
38 movlw win_left_input | |
39 movff WREG,win_leftx2 | |
40 endm | |
41 | |
42 WIN_INVERT macro win_invert_input | |
43 movlw win_invert_input | |
44 movff WREG,win_invert | |
45 endm | |
46 | |
47 WIN_COLOR macro win_color_input | |
48 movlw win_color_input | |
49 call PLED_set_color | |
50 endm | |
142 | 51 |
52 ;============================================================================= | |
53 | |
0 | 54 word_processor: ; word_processor: |
142 | 55 clrf POSTINC2 ; Required, to mark end of string. |
56 call aa_wordprocessor | |
57 movlb b'00000001' ; Back to Rambank1 | |
58 return | |
0 | 59 |
142 | 60 ;============================================================================= |
146 | 61 ; Macro to provides our own interface code. |
142 | 62 ; |
146 | 63 PIXEL_WRITE macro colRegister, rowRegister |
64 movff colRegister,win_leftx2 | |
65 movff rowRegister,win_top | |
66 call pixel_write | |
67 endm | |
123 | 68 |
146 | 69 INIT_PIXEL_WROTE macro colRegister |
70 movff colRegister,win_leftx2 | |
71 call init_pixel_write | |
72 endm | |
73 | |
74 HALF_PIXEL_WRITE macro rowRegister | |
75 movff rowRegister,win_top | |
76 call half_pixel_write | |
77 endm | |
0 | 78 |
146 | 79 ;----------------------------------------------------------------------------- |
80 ; Init for half_pixel_write | |
81 ; Set column register on OLED device, and current color. | |
82 ; Inputs: win_leftx2 | |
83 ; Outputs: win_color:2 | |
84 ; Trashed: WREG, PROD | |
85 init_pixel_write: | |
86 movff win_leftx2,WREG | |
87 mullw 2 | |
88 rcall pixel_write_col320 ; Start Address Vertical (.0 - .319) | |
89 goto PLED_standard_color | |
90 | |
91 ;----------------------------------------------------------------------------- | |
92 ; Writes two half-pixels at position (win_top,win_leftx2) | |
93 ; Inputs: win_leftx2, win_top, win_color:2 | |
94 ; Trashed: WREG, PROD | |
95 pixel_write: | |
96 movff win_leftx2,WREG | |
97 mullw 2 | |
98 rcall pixel_write_col320 ; Start Address Vertical (.0 - .319) | |
99 rcall half_pixel_write ; Write this half-one. | |
123 | 100 |
146 | 101 movff win_leftx2,WREG ; Address of next one |
102 mullw 2 | |
103 infsnz PRODL ; +1 | |
104 incf PRODH | |
105 rcall pixel_write_col320 | |
106 bra half_pixel_write ; Note: Cmd 0x20 is mandatory, because | |
107 ; of the autoincrement going vertical | |
108 | |
109 ;---- Do the 16bit 319-X-->X, if needed, and send to OLED ------------ | |
110 pixel_write_col320: | |
111 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
112 btfss WREG,0 ; 180° rotation ? | |
113 bra pixel_write_noflip_H | |
114 | |
115 movf PRODL,W ; 16bits 319 - PROD --> PROD | |
116 sublw LOW(.319) ; 319-W --> W | |
117 movwf PRODL | |
118 movf PRODH,W | |
119 btfss STATUS,C ; Borrow = /CARRY | |
120 incf WREG | |
121 sublw HIGH(.319) | |
122 movwf PRODH | |
0 | 123 |
146 | 124 pixel_write_noflip_H: |
125 movlw 0x21 ; Start Address Vertical (.0 - .319) | |
126 rcall PLED_CmdWrite | |
127 bra PLED_DataWrite_PROD | |
128 | |
129 ;----------------------------------------------------------------------------- | |
130 ; Writes one half-pixel at position (win_top,win_leftx2). | |
131 ; Inputs: win_leftx2, win_top, win_color:2 | |
132 ; Trashed: WREG, PROD | |
133 half_pixel_write: | |
134 movff win_top,WREG ; d'0' ... d'239' | |
135 | |
136 movff win_flags,PRODL ; BEWARE: bank0 bit-test | |
137 btfsc PRODL,0 ; 180° rotation ? | |
138 sublw .239 ; 239-Y --> Y | |
0 | 139 |
146 | 140 mullw 1 ; Copy row to PRODH:L |
141 movlw 0x20 ; Horizontal Address START:END | |
142 rcall PLED_CmdWrite | |
143 rcall PLED_DataWrite_PROD | |
144 | |
145 movlw 0x22 ; Start Writing Data to GRAM | |
146 rcall PLED_CmdWrite | |
147 bsf oled_rs ; Data! | |
148 movff win_color1, PORTD | |
149 bcf oled_rw | |
150 bsf oled_rw ; Upper | |
151 movff win_color2, PORTD | |
152 bcf oled_rw | |
153 bsf oled_rw ; Lower | |
154 return | |
0 | 155 |
156 ; ----------------------------- | |
157 ; PLED Display Off | |
158 ; ----------------------------- | |
159 PLED_DisplayOff: | |
160 clrf PORTD | |
161 bcf oled_hv | |
162 bcf oled_vdd | |
163 bcf oled_cs | |
164 bcf oled_e_nwr | |
165 bcf oled_rw | |
166 bcf oled_nreset | |
167 return | |
168 | |
123 | 169 ;============================================================================= |
142 | 170 ; Fast macros to write to OLED display. |
171 ; Adding a call/return adds 3 words and a pipeline flush, hence make it | |
172 ; nearly twice slower... | |
173 ; | |
174 ; Input : commande as macro parameter. | |
175 ; Output : NONE | |
176 ; Trash : WREG | |
177 ; | |
178 AA_CMD_WRITE macro cmd | |
179 movlw cmd | |
180 rcall PLED_CmdWrite | |
181 ; bcf oled_rs ; Cmd mode | |
182 ; movwf PORTD,A | |
183 ; bcf oled_rw ; Tick the clock | |
184 ; bsf oled_rw | |
185 endm | |
186 ; | |
187 ; Input : PRODH:L as 16bits data. | |
188 ; Output : NONE | |
189 ; Trash : NONE | |
190 ; | |
191 AA_DATA_WRITE_PROD macro | |
192 rcall PLED_DataWrite_PROD | |
193 ; bsf oled_rs ; Data mode | |
194 ; movff PRODH,PORTD ; NOTE: OLED is BIGENDIAN! | |
195 ; bcf oled_rw ; Tick the clock | |
196 ; bsf oled_rw | |
197 ; movff PRODL,PORTD | |
198 ; bcf oled_rw ; Tick the clock | |
199 ; bsf oled_rw | |
200 endm | |
201 | |
202 ;============================================================================= | |
203 ; Output OLED Window Address commands. | |
204 ; Inputs : win_top, win_leftx2, win_height, aa_width. | |
205 ; Output : PortD commands. | |
206 ; Trashed: PROD | |
207 ; | |
208 PLED_box_write: | |
209 movff win_leftx2,WREG ; Compute left = 2*leftx2 --> PROD | |
210 mullw 2 | |
211 | |
212 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
213 btfsc WREG,0 ; 180° rotation ? | |
214 bra PLED_box_flip_H ; YES: | |
215 | |
216 ;---- Normal horizontal window --------------------------------------- | |
217 ; Output 0x35 left, | |
218 ; 0x36 right == left + width - 1. | |
219 AA_CMD_WRITE 0x35 ; this is the left border | |
220 AA_DATA_WRITE_PROD ; Output left | |
221 AA_CMD_WRITE 0x21 ; Also the horizontal first pix coord. | |
222 AA_DATA_WRITE_PROD | |
223 | |
224 movf aa_width+0,W,ACCESS ; right = left + width - 1 | |
225 addwf PRODL,F | |
226 movf aa_width+1,W,ACCESS | |
227 addwfc PRODH,F | |
228 decf PRODL,F,A ; decrement result | |
229 btfss STATUS,C | |
230 decf PRODH,F,A | |
231 | |
232 AA_CMD_WRITE 0x36 ; Write and the right border | |
233 AA_DATA_WRITE_PROD | |
234 | |
235 bra PLED_box_noflip_H | |
236 | |
237 ;---- Flipped horizontal window -------------------------------------- | |
238 PLED_box_flip_H: | |
239 ; Output 0x36 flipped(left) = 319-left | |
240 ; 0x35 flipped(right) = 319-right = 320 - left - width | |
241 movf PRODL,W ; 16bits 319 - PROD --> PROD | |
242 sublw LOW(.319) ; 319-W --> W | |
243 movwf PRODL | |
244 movf PRODH,W | |
245 btfss STATUS,C ; Borrow = /CARRY | |
246 incf WREG | |
247 sublw HIGH(.319) | |
248 movwf PRODH | |
249 AA_CMD_WRITE 0x36 ; this is the left border | |
250 AA_DATA_WRITE_PROD ; Output left | |
251 AA_CMD_WRITE 0x21 | |
252 AA_DATA_WRITE_PROD | |
253 | |
254 movf aa_width+0,W ; 16bits PROD - width --> PROD | |
255 subwf PRODL,F ; PRODL - WREG --> PRODL | |
256 movf aa_width+1,W | |
257 subwfb PRODH,F | |
258 infsnz PRODL ; PROD+1 --> PROD | |
259 incf PRODH | |
260 AA_CMD_WRITE 0x35 ; this is the left border | |
261 AA_DATA_WRITE_PROD ; Output left | |
262 | |
263 PLED_box_noflip_H: | |
264 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
265 btfsc WREG,0 ; 180° rotation ? | |
266 bra PLED_box_flip_V | |
267 | |
268 ;---- Normal vertical window ----------------------------------------- | |
269 ; Output 0x37 (top) (bottom) | |
270 movff win_top,PRODH ; top --> PRODH (first byte) | |
271 movff win_height,WREG | |
272 addwf PRODH,W | |
273 decf WREG | |
274 movwf PRODL ; top+height-1 --> PRODL (second byte) | |
275 | |
276 AA_CMD_WRITE 0x37 | |
277 AA_DATA_WRITE_PROD | |
278 | |
279 movff PRODH,PRODL | |
280 clrf PRODH ; Start pixel V coord == top. | |
281 AA_CMD_WRITE 0x20 | |
282 AA_DATA_WRITE_PROD | |
283 | |
284 return | |
285 | |
286 ;---- Flipped vertical window ---------------------------------------- | |
287 ; Output 0x37 flipped(bottom) = 239-bottom = 240 - top - height | |
288 ; flipped(top) = 239-top | |
289 PLED_box_flip_V: | |
290 movff win_top,PRODL | |
291 movff win_height,WREG | |
292 addwf PRODL,W | |
293 sublw .240 ; 240 - top - height | |
294 movwf PRODH ; First byte | |
295 | |
296 movf PRODL,W | |
297 sublw .239 ; 249-top | |
298 movwf PRODL ; --> second byte. | |
299 | |
300 AA_CMD_WRITE 0x37 | |
301 AA_DATA_WRITE_PROD | |
302 | |
303 clrf PRODH ; Start pixel V coord. | |
304 AA_CMD_WRITE 0x20 | |
305 AA_DATA_WRITE_PROD | |
306 | |
307 return | |
308 | |
309 ;============================================================================= | |
123 | 310 ; PLED_frame : draw a frame around current box with current color. |
311 ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 | |
312 ; Outputs: (none) | |
313 ; Trashed: WREG, PROD, aa_start:2, aa_end:2, win_leftx2, win_width:1 | |
0 | 314 |
142 | 315 PLED_frame: |
316 movff win_top,aa_start+0 ; Backup everything. | |
123 | 317 movff win_height,aa_start+1 |
318 movff win_leftx2,aa_end+0 | |
319 movff win_width,aa_end+1 | |
0 | 320 |
123 | 321 ;---- TOP line ----------------------------------------------------------- |
142 | 322 movlw 1 ; row ~ height=1 |
123 | 323 movff WREG,win_height |
324 rcall PLED_box | |
0 | 325 |
123 | 326 ;---- BOTTOM line -------------------------------------------------------- |
142 | 327 movff aa_start+0,PRODL ; Get back top, |
328 movff aa_start+1,WREG ; and height | |
329 addwf PRODL,W ; top+height | |
330 decf WREG ; top+height-1 | |
331 movff WREG,win_top ; top+height-1 --> top | |
123 | 332 rcall PLED_box |
0 | 333 |
123 | 334 ;---- LEFT column -------------------------------------------------------- |
335 movff aa_start+0,win_top ; Restore top/height. | |
336 movff aa_start+1,win_height | |
337 movlw 1 ; column ~ width=1 | |
338 movff WREG,win_width | |
339 rcall PLED_box | |
0 | 340 |
123 | 341 ;---- RIGHT column ------------------------------------------------------- |
342 movff aa_end+0,WREG | |
343 movff aa_end+1,PRODL | |
344 addwf PRODL,W | |
345 decf WREG | |
346 movff WREG,win_leftx2 | |
347 bra PLED_box | |
0 | 348 |
123 | 349 ;============================================================================= |
350 ; PLED_box : fills current box with current color. | |
351 ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 | |
352 ; Outputs: (none) | |
353 ; Trashed: WREG, PROD | |
0 | 354 |
355 PLED_box: | |
123 | 356 ;---- Define Window ------------------------------------------------------ |
142 | 357 movff win_width,WREG |
358 bcf STATUS,C | |
359 rlcf WREG | |
150 | 360 movwf aa_width+0 |
142 | 361 movlw 0 |
362 rlcf WREG | |
363 movwf aa_width+1 | |
364 rcall PLED_box_write | |
0 | 365 |
123 | 366 ;---- Fill Window -------------------------------------------------------- |
150 | 367 movlw 0x22 ; Start Writing Data to GRAM |
0 | 368 rcall PLED_CmdWrite |
369 | |
150 | 370 clrf PRODH ; Column counter. |
371 bsf oled_rs ; Data! | |
0 | 372 |
150 | 373 PLED_box2: ; Loop height times |
142 | 374 movff win_height,PRODL |
150 | 375 |
376 PLED_box3: ; loop width times | |
0 | 377 movff win_color1,PORTD |
378 bcf oled_rw | |
150 | 379 bsf oled_rw ; Upper |
0 | 380 movff win_color2,PORTD |
381 bcf oled_rw | |
150 | 382 bsf oled_rw ; Lower |
0 | 383 |
384 movff win_color1,PORTD | |
385 bcf oled_rw | |
150 | 386 bsf oled_rw ; Upper |
0 | 387 movff win_color2,PORTD |
388 bcf oled_rw | |
150 | 389 bsf oled_rw ; Lower |
390 | |
391 decfsz PRODL,F ; row loop finished ? | |
392 bra PLED_box3 ; No: continue. | |
393 | |
394 incf PRODH,F ; column count ++ | |
395 | |
396 movff win_bargraph,WREG ; current column == bargraph ? | |
397 cpfseq PRODH | |
398 bra PLED_box4 ; No: just loop. | |
0 | 399 |
150 | 400 clrf WREG ; Yes: switch to black |
401 movff WREG,win_color1 | |
402 movff WREG,win_color2 | |
403 PLED_box4: | |
404 movff win_width,WREG | |
405 cpfseq PRODH | |
406 bra PLED_box2 | |
0 | 407 |
150 | 408 movlw 0x00 ; NOP, to stop window mode |
409 rcall PLED_CmdWrite | |
410 | |
411 setf WREG ; Reset bargraph mode... | |
412 movff WREG,win_bargraph | |
413 return | |
0 | 414 |
123 | 415 ;============================================================================= |
129
06c4899ddb4b
Custom views in dive mode configrable (New CF50-CF53)
Heinrichsweikamp
parents:
123
diff
changeset
|
416 ; PLED_ClearScreen: An optimized version of PLEX_box, for full screen black. |
123 | 417 ; Trashed: WREG, PROD |
0 | 418 |
419 PLED_ClearScreen: | |
420 movlw 0x35 ; VerticalStartAddress HIGH:LOW | |
421 rcall PLED_CmdWrite | |
123 | 422 mullw 0 |
423 rcall PLED_DataWrite_PROD | |
0 | 424 |
425 movlw 0x36 ; VerticalEndAddress HIGH:LOW | |
426 rcall PLED_CmdWrite | |
427 movlw 0x01 | |
123 | 428 rcall PLED_DataWrite |
0 | 429 movlw 0x3F |
123 | 430 rcall PLED_DataWrite |
0 | 431 |
432 movlw 0x37 ; HorizontalAddress START:END | |
433 rcall PLED_CmdWrite | |
434 movlw 0x00 | |
123 | 435 rcall PLED_DataWrite |
0 | 436 movlw 0xEF |
123 | 437 rcall PLED_DataWrite |
0 | 438 |
439 movlw 0x20 ; Start Address Horizontal (.0 - .239) | |
440 rcall PLED_CmdWrite | |
123 | 441 rcall PLED_DataWrite_PROD |
0 | 442 |
443 movlw 0x21 ; Start Address Vertical (.0 - .319) | |
444 rcall PLED_CmdWrite | |
123 | 445 rcall PLED_DataWrite_PROD |
0 | 446 |
150 | 447 movlw 0x22 ; Start Writing Data to GRAM |
0 | 448 rcall PLED_CmdWrite |
449 | |
83
3e351e25f5d1
adding anti-aliased fonts frame and merging some patches from Jeando
heinrichsweikamp
parents:
81
diff
changeset
|
450 ; See Page 101 of OLED Driver IC Datasheet how to handle rs/rw clocks |
150 | 451 bsf oled_rs ; Data! |
0 | 452 |
123 | 453 movlw .160 |
454 movwf PRODH | |
0 | 455 PLED_ClearScreen2: |
123 | 456 movlw .240 |
457 movwf PRODL | |
0 | 458 PLED_ClearScreen3: |
459 | |
150 | 460 clrf PORTD ; Need to generate trace here too. |
0 | 461 bcf oled_rw |
150 | 462 bsf oled_rw ; Upper |
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
3
diff
changeset
|
463 |
150 | 464 clrf PORTD ; Need to generate trace here too. |
0 | 465 bcf oled_rw |
150 | 466 bsf oled_rw ; Lower |
0 | 467 |
150 | 468 clrf PORTD ; Need to generate trace here too. |
123 | 469 bcf oled_rw |
150 | 470 bsf oled_rw ; Upper |
123 | 471 |
150 | 472 clrf PORTD ; Need to generate trace here too. |
123 | 473 bcf oled_rw |
150 | 474 bsf oled_rw ; Lower |
123 | 475 |
476 decfsz PRODL,F | |
0 | 477 bra PLED_ClearScreen3 |
123 | 478 decfsz PRODH,F |
0 | 479 bra PLED_ClearScreen2 |
480 | |
481 movlw 0x00 ; NOP, to stop Address Update Counter | |
123 | 482 bra PLED_CmdWrite |
0 | 483 |
484 ; ----------------------------- | |
485 ; PLED Write Cmd via W | |
486 ; ----------------------------- | |
487 PLED_CmdWrite: | |
488 bcf oled_rs ; Command! | |
489 movwf PORTD ; Move Data to PORTD | |
490 bcf oled_rw | |
491 bsf oled_rw | |
492 return | |
493 | |
494 ; ----------------------------- | |
495 ; PLED Write Display Data via W | |
496 ; ----------------------------- | |
497 PLED_DataWrite: | |
123 | 498 bsf oled_rs ; Data! |
499 movwf PORTD ; Move Data to PORTD | |
500 bcf oled_rw | |
501 bsf oled_rw | |
502 return | |
0 | 503 |
504 ; ----------------------------- | |
505 ; PLED Data Cmd via W | |
506 ; ----------------------------- | |
123 | 507 PLED_DataWrite_PROD: |
0 | 508 bsf oled_rs ; Data! |
123 | 509 movff PRODH,PORTD ; Move high byte to PORTD (OLED is bigendian) |
510 bcf oled_rw | |
511 bsf oled_rw | |
512 movff PRODL,PORTD ; Move low byte to PORTD | |
0 | 513 bcf oled_rw |
514 bsf oled_rw | |
515 return | |
516 | |
517 ; ----------------------------- | |
518 ; PLED boot | |
519 ; ----------------------------- | |
520 PLED_boot: | |
521 bcf oled_hv | |
522 WAITMS d'32' | |
523 bsf oled_vdd | |
524 nop | |
525 bcf oled_cs | |
526 nop | |
527 bsf oled_nreset | |
3 | 528 ; WAITMS d'10' ; Quick wake-up |
529 WAITMS d'250' ; Standard wake-up | |
0 | 530 bsf oled_e_nwr |
531 nop | |
532 bcf oled_nreset | |
533 WAIT10US d'2' | |
534 bsf oled_nreset | |
535 WAITMS d'10' | |
536 | |
537 movlw 0x24 ; 80-System 8-Bit Mode | |
538 rcall PLED_CmdWrite | |
539 | |
540 movlw 0x02 ; RGB Interface Control (S6E63D6 Datasheet page 42) | |
541 rcall PLED_CmdWrite | |
542 movlw 0x00 ; X X X X X X X RM | |
123 | 543 rcall PLED_DataWrite |
0 | 544 movlw 0x00 ; DM X RIM1 RIM0 VSPL HSPL EPL DPL |
123 | 545 rcall PLED_DataWrite ; System Interface: RIM is ignored, Internal Clock |
0 | 546 |
547 movlw 0x03 ; Entry Mode (S6E63D6 Datasheet page 46) | |
548 rcall PLED_CmdWrite | |
142 | 549 movlw 0x00 ; CLS MDT1 MDT0 BGR X X X SS 65k Color |
123 | 550 rcall PLED_DataWrite |
142 | 551 |
552 ; Change direction for block-writes of pixels | |
553 lfsr FSR0,win_flags | |
554 btfss INDF0,0 ; BANK-SAFE bit test. | |
555 movlw b'00110000' ; [normal] X X I/D1 I/D0 X X X AM | |
556 btfsc INDF0,0 | |
557 movlw b'00000000' ; [flipped] X X I/D1 I/D0 X X X AM | |
123 | 558 rcall PLED_DataWrite |
0 | 559 |
560 movlw 0x18 | |
561 rcall PLED_CmdWrite | |
562 movlw 0x00 | |
123 | 563 rcall PLED_DataWrite |
0 | 564 movlw 0x28 |
123 | 565 rcall PLED_DataWrite |
0 | 566 |
567 movlw 0xF8 | |
568 rcall PLED_CmdWrite | |
569 movlw 0x00 | |
123 | 570 rcall PLED_DataWrite |
0 | 571 movlw 0x0F |
123 | 572 rcall PLED_DataWrite |
0 | 573 |
574 movlw 0xF9 | |
575 rcall PLED_CmdWrite | |
576 movlw 0x00 | |
123 | 577 rcall PLED_DataWrite |
0 | 578 movlw 0x0F |
123 | 579 rcall PLED_DataWrite |
0 | 580 |
581 movlw 0x10 | |
582 rcall PLED_CmdWrite | |
583 movlw 0x00 | |
123 | 584 rcall PLED_DataWrite |
0 | 585 movlw 0x00 |
123 | 586 rcall PLED_DataWrite |
0 | 587 |
588 ; Now Gamma settings... | |
589 rcall PLED_brightness_full | |
2 | 590 ;rcall PLED_brightness_low |
0 | 591 ; End Gamma Settings |
592 | |
593 rcall PLED_ClearScreen | |
594 | |
595 bsf oled_hv | |
596 WAITMS d'32' | |
597 | |
598 movlw 0x05 | |
599 rcall PLED_CmdWrite | |
600 movlw 0x00 | |
123 | 601 rcall PLED_DataWrite |
0 | 602 movlw 0x01 |
123 | 603 rcall PLED_DataWrite ; Display ON |
0 | 604 return |
605 | |
606 | |
607 PLED_brightness_full: | |
608 movlw 0x70 | |
609 rcall PLED_CmdWrite | |
610 movlw 0x1F | |
123 | 611 rcall PLED_DataWrite |
0 | 612 movlw 0x00 |
123 | 613 rcall PLED_DataWrite |
0 | 614 movlw 0x71 |
615 rcall PLED_CmdWrite | |
616 movlw 0x23 | |
123 | 617 rcall PLED_DataWrite |
0 | 618 movlw 0x80 |
123 | 619 rcall PLED_DataWrite |
0 | 620 movlw 0x72 |
621 rcall PLED_CmdWrite | |
622 movlw 0x2A | |
123 | 623 rcall PLED_DataWrite |
0 | 624 movlw 0x80 |
123 | 625 rcall PLED_DataWrite |
0 | 626 |
627 movlw 0x73 | |
628 rcall PLED_CmdWrite | |
629 movlw 0x15 | |
123 | 630 rcall PLED_DataWrite |
0 | 631 movlw 0x11 |
123 | 632 rcall PLED_DataWrite |
0 | 633 movlw 0x74 |
634 rcall PLED_CmdWrite | |
635 movlw 0x1C | |
123 | 636 rcall PLED_DataWrite |
0 | 637 movlw 0x11 |
123 | 638 rcall PLED_DataWrite |
0 | 639 |
640 movlw 0x75 | |
641 rcall PLED_CmdWrite | |
642 movlw 0x1B | |
123 | 643 rcall PLED_DataWrite |
0 | 644 movlw 0x15 |
123 | 645 rcall PLED_DataWrite |
0 | 646 movlw 0x76 |
647 rcall PLED_CmdWrite | |
648 movlw 0x1A | |
123 | 649 rcall PLED_DataWrite |
0 | 650 movlw 0x15 |
123 | 651 rcall PLED_DataWrite |
0 | 652 |
653 movlw 0x77 | |
654 rcall PLED_CmdWrite | |
655 movlw 0x1C | |
123 | 656 rcall PLED_DataWrite |
0 | 657 movlw 0x18 |
123 | 658 rcall PLED_DataWrite |
0 | 659 movlw 0x78 |
660 rcall PLED_CmdWrite | |
661 movlw 0x21 | |
123 | 662 rcall PLED_DataWrite |
0 | 663 movlw 0x15 |
123 | 664 rcall PLED_DataWrite |
0 | 665 |
666 return | |
667 | |
668 PLED_brightness_low: | |
669 movlw 0x70 | |
670 rcall PLED_CmdWrite | |
671 movlw 0x14 | |
123 | 672 rcall PLED_DataWrite |
0 | 673 movlw 0x00 |
123 | 674 rcall PLED_DataWrite |
0 | 675 movlw 0x71 |
676 rcall PLED_CmdWrite | |
677 movlw 0x17 | |
123 | 678 rcall PLED_DataWrite |
0 | 679 movlw 0x00 |
123 | 680 rcall PLED_DataWrite |
0 | 681 movlw 0x72 |
682 rcall PLED_CmdWrite | |
683 movlw 0x15 | |
123 | 684 rcall PLED_DataWrite |
0 | 685 movlw 0x80 |
123 | 686 rcall PLED_DataWrite |
0 | 687 |
688 movlw 0x73 | |
689 rcall PLED_CmdWrite | |
690 movlw 0x15 | |
123 | 691 rcall PLED_DataWrite |
0 | 692 movlw 0x11 |
123 | 693 rcall PLED_DataWrite |
0 | 694 movlw 0x74 |
695 rcall PLED_CmdWrite | |
696 movlw 0x14 | |
123 | 697 rcall PLED_DataWrite |
0 | 698 movlw 0x0B |
123 | 699 rcall PLED_DataWrite |
0 | 700 |
701 movlw 0x75 | |
702 rcall PLED_CmdWrite | |
703 movlw 0x1B | |
123 | 704 rcall PLED_DataWrite |
0 | 705 movlw 0x15 |
123 | 706 rcall PLED_DataWrite |
0 | 707 movlw 0x76 |
708 rcall PLED_CmdWrite | |
709 movlw 0x13 | |
123 | 710 rcall PLED_DataWrite |
0 | 711 movlw 0x0E |
123 | 712 rcall PLED_DataWrite |
0 | 713 |
714 movlw 0x77 | |
715 rcall PLED_CmdWrite | |
716 movlw 0x1C | |
123 | 717 rcall PLED_DataWrite |
0 | 718 movlw 0x18 |
123 | 719 rcall PLED_DataWrite |
0 | 720 movlw 0x78 |
721 rcall PLED_CmdWrite | |
722 movlw 0x15 | |
123 | 723 rcall PLED_DataWrite |
0 | 724 movlw 0x0E |
123 | 725 rcall PLED_DataWrite |
0 | 726 |
727 return | |
728 | |
729 PLED_set_color:;Converts 8Bit RGB b'RRRGGGBB' into 16Bit RGB b'RRRRRGGGGGGBBBBB' | |
730 movwf oled1_temp ; Get 8Bit RGB b'RRRGGGBB' | |
731 movff oled1_temp, oled2_temp ; Copy | |
732 | |
733 ; Mask Bit 7,6,5,4,3,2 | |
734 movlw b'00000011' | |
735 andwf oled2_temp,F | |
736 | |
737 movlw b'00000000' | |
738 dcfsnz oled2_temp,F | |
739 movlw b'01010000' | |
740 dcfsnz oled2_temp,F | |
741 movlw b'10100000' | |
742 dcfsnz oled2_temp,F | |
743 movlw b'11111000' | |
744 movwf oled3_temp ; Blue done. | |
745 | |
746 movff oled1_temp, oled2_temp ; Copy | |
747 ; Mask Bit 7,6,5,1,0 | |
748 movlw b'00011100' | |
749 andwf oled2_temp,F | |
750 rrncf oled2_temp,F | |
751 rrncf oled2_temp,F | |
752 | |
753 movlw b'00000000' | |
754 dcfsnz oled2_temp,F | |
755 movlw b'00000100' | |
756 dcfsnz oled2_temp,F | |
757 movlw b'00001000' | |
758 dcfsnz oled2_temp,F | |
759 movlw b'00001100' | |
760 dcfsnz oled2_temp,F | |
761 movlw b'00010000' | |
762 dcfsnz oled2_temp,F | |
763 movlw b'00010100' | |
764 dcfsnz oled2_temp,F | |
765 movlw b'00100000' | |
766 dcfsnz oled2_temp,F | |
767 movlw b'00111111' | |
768 movwf oled4_temp | |
769 | |
770 rrcf oled4_temp,F | |
771 rrcf oled3_temp,F | |
772 | |
773 rrcf oled4_temp,F | |
774 rrcf oled3_temp,F | |
775 | |
776 rrcf oled4_temp,F | |
777 rrcf oled3_temp,F ; oled3_temp (b'GGGBBBBB') done. | |
778 | |
779 movff oled1_temp, oled2_temp ; Copy | |
780 clrf oled1_temp | |
781 | |
782 rrcf oled4_temp,F | |
783 rrcf oled1_temp,F | |
784 | |
785 rrcf oled4_temp,F | |
786 rrcf oled1_temp,F | |
787 | |
788 rrcf oled4_temp,F | |
789 rrcf oled1_temp,F ; Green done. | |
790 | |
791 ; Mask Bit 4,3,2,1,0 | |
792 movlw b'11100000' | |
793 andwf oled2_temp,F | |
794 | |
795 rrncf oled2_temp,F | |
796 rrncf oled2_temp,F | |
797 rrncf oled2_temp,F | |
798 rrncf oled2_temp,F | |
799 rrncf oled2_temp,F | |
800 | |
801 movlw b'00000000' | |
802 dcfsnz oled2_temp,F | |
803 movlw b'00000100' | |
804 dcfsnz oled2_temp,F | |
805 movlw b'00001000' | |
806 dcfsnz oled2_temp,F | |
807 movlw b'00001100' | |
808 dcfsnz oled2_temp,F | |
809 movlw b'00010000' | |
810 dcfsnz oled2_temp,F | |
811 movlw b'00010100' | |
812 dcfsnz oled2_temp,F | |
813 movlw b'00100000' | |
814 dcfsnz oled2_temp,F | |
815 movlw b'00111111' | |
816 movwf oled4_temp | |
817 | |
818 rrcf oled4_temp,F | |
819 rrcf oled1_temp,F | |
820 | |
821 rrcf oled4_temp,F | |
822 rrcf oled1_temp,F | |
823 | |
824 rrcf oled4_temp,F | |
825 rrcf oled1_temp,F | |
826 | |
827 rrcf oled4_temp,F | |
828 rrcf oled1_temp,F | |
829 | |
830 rrcf oled4_temp,F | |
831 rrcf oled1_temp,F ; Red done. | |
832 | |
833 movff oled1_temp,win_color1 | |
834 movff oled3_temp,win_color2 ; Set Bank0 Color registers... | |
835 return | |
836 |