1 /*********************************************************************
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #include <string.h>
34 #include <xc.h>
35 #include "MainBrain.h"
36
37 uint8_t back_level;
38 int CanvasColor;
39 int TextColor;
40 unsigned ascii_char;
41 int color1;
42 int color2;
43 uint16_t hchar;
44 uint16_t vchar;
45 uint8_t Display_Read;
46 uint8_t disData[10];
47 unsigned row_start;
48 unsigned row_end;
49 unsigned col_start;
50 unsigned col_end;
51 int t;
52
53 void Backlight_Control(uint8_t back_level)
54 {
55
56
57 PR2 = 300;
58
59 OC5CONbits.OCTSEL = 0;
60 OC5CONbits.OCM = 6;
61 OC5CONbits.ON = 1;
62
63
64 if((back_level <= 10) | (back_level >= 0))
65 {
66 if(back_level == 0)
67 {
68 OC5RS = 300;
69 }
70 if(back_level == 1)
71 {
72 OC5RS = 270;
73 }
74 if(back_level == 2)
75 {
76 OC5RS = 243;
77 }
78 if(back_level == 3)
79 {
80 OC5RS = 216;
81 }
82 if(back_level == 4)
83 {
84 OC5RS = 189;
85 }
86 if(back_level == 5)
87 {
88 OC5RS = 162;
89 }
90 if(back_level == 6)
91 {
92 OC5RS = 135;
93 }
94 if(back_level == 7)
95 {
96 OC5RS = 108;
97 }
98 if(back_level == 8)
99 {
100 OC5RS = 81;
101 }
102 if(back_level == 9)
103 {
104 OC5RS = 54;
105 }
106 if(back_level == 10)
107 {
108 OC5RS = 27;
109 }
110
111 }
112
113 T2CONbits.ON = 1;
114
115 return;
116 }
117
118 void Display_init(void)
119 {
120
121 TRISGbits.TRISG12 = 0;
122 TRISGbits.TRISG14 = 0;
123 PORTGbits.RG12 = 0;
124 PORTGbits.RG14 = 0;
125
126
127 TRISBbits.TRISB1 = 0;
128 PORTBbits.RB1 = 1;
129
130
131 TRISAbits.TRISA9 = 0;
132 PORTAbits.RA9 = 0;
133
134
135
136 PORTBbits.RB1 = 0;
137 PMDOUT = 0x01;
138 while(PMMODEbits.BUSY == 1);
139
140
141 PORTAbits.RA9 = 1;
142
143
144
145
146 Delay32(7, 65535);
147
148
149 PORTAbits.RA9 = 0;
150
151
152
153 PORTBbits.RB1 = 0;
154 PMDOUT = 0x011;
155 while(PMMODEbits.BUSY == 1);
156
157
158
159
160
161
162 PORTBbits.RB1 = 0;
163 PMDOUT = 0x03a;
164 while(PMMODEbits.BUSY == 1);
165
166 PORTBbits.RB1 = 1;
167 PMDOUT = 0x05;
168 while(PMMODEbits.BUSY == 1);
169
170
171
172 PORTBbits.RB1 = 0;
173
174
175 PMDOUT = 0x36;
176 while(PMMODEbits.BUSY == 1);
177
178
179 PORTBbits.RB1 = 1;
180
181
182
183
184
185
186
187
188
189
190 PMDOUT = 0x28;
191 while(PMMODEbits.BUSY == 1);
192
193
194 PORTAbits.RA9 = 1;
195 }
196
197
198 void Display_NOP(void)
199 {
200
201 PORTAbits.RA9 = 0;
202
203
204 PORTBbits.RB1 = 0;
205
206
207 PMDOUT = 0x00;
208 while(PMMODEbits.BUSY == 1);
209
210
211 PORTAbits.RA9 = 1;
212
213 return;
214 }
215
216
217 void Display_SWRESET(void)
218 {
219
220 PORTAbits.RA9 = 0;
221
222
223 PORTBbits.RB1 = 0;
224
225
226 PMDOUT = 0x01;
227 while(PMMODEbits.BUSY == 1);
228
229
230 PORTAbits.RA9 = 1;
231
232 return;
233 }
234
235
236 uint8_t Display_RDDIDIF(void)
237 {
238
239 PORTAbits.RA9 = 0;
240
241
242 PORTBbits.RB1 = 0;
243
244
245 PMDOUT = 0x04;
246 while(PMMODEbits.BUSY == 1);
247
248
249 PORTBbits.RB1 = 1;
250
251
252 disData[0] = PMRDIN;
253 while(PMMODEbits.BUSY == 1);
254
255
256 disData[1] = PMRDIN;
257 while(PMMODEbits.BUSY == 1);
258
259 disData[2] = PMRDIN;
260 while(PMMODEbits.BUSY == 1);
261
262
263 disData[3] = PMRDIN;
264 while(PMMODEbits.BUSY == 1);
265
266 disData[4] = PMRDIN;
267 while(PMMODEbits.BUSY == 1);
268
269
270 PORTAbits.RA9 = 1;
271 }
272
273
274 void Display_RDNUMED(void)
275 {
276
277 PORTAbits.RA9 = 0;
278
279
280 PORTBbits.RB1 = 0;
281
282
283 PMDOUT = 0x05;
284 while(PMMODEbits.BUSY == 1);
285
286
287 PORTBbits.RB1 = 1;
288
289
290 disData[0] = PMRDIN;
291 while(PMMODEbits.BUSY == 1);
292
293
294 disData[1] = PMRDIN;
295 while(PMMODEbits.BUSY == 1);
296
297
298 disData[2] = PMRDIN;
299 while(PMMODEbits.BUSY == 1);
300
301
302 PORTAbits.RA9 = 1;
303 }
304
305
306 void Display_RDDST(void)
307 {
308
309 PORTAbits.RA9 = 0;
310
311
312 PORTBbits.RB1 = 0;
313
314
315 PMDOUT = 0x09;
316 while(PMMODEbits.BUSY == 1);
317
318
319 PORTBbits.RB1 = 1;
320
321
322 disData[0] = PMRDIN;
323 while(PMMODEbits.BUSY == 1);
324
325
326 disData[1] = PMRDIN;
327 while(PMMODEbits.BUSY == 1);
328
329
330 disData[2] = PMRDIN;
331 while(PMMODEbits.BUSY == 1);
332
333
334 disData[3] = PMRDIN;
335 while(PMMODEbits.BUSY == 1);
336
337 disData[4] = PMRDIN;
338 while(PMMODEbits.BUSY == 1);
339
340 disData[5] = PMRDIN;
341 while(PMMODEbits.BUSY == 1);
342
343
344 PORTAbits.RA9 = 1;
345 }
346
347
348 void Display_RDDPM(void)
349 {
350
351 PORTAbits.RA9 = 0;
352
353
354 PORTBbits.RB1 = 0;
355
356
357 PMDOUT = 0x0a;
358 while(PMMODEbits.BUSY == 1);
359
360
361 PORTBbits.RB1 = 1;
362
363
364 disData[0] = PMRDIN;
365 while(PMMODEbits.BUSY == 1);
366
367
368 disData[1] = PMRDIN;
369 while(PMMODEbits.BUSY == 1);
370
371
372 disData[2] = PMRDIN;
373 while(PMMODEbits.BUSY == 1);
374
375
376 PORTAbits.RA9 = 1;
377 }
378
379
380 uint8_t Display_RDDMADCTL(void)
381 {
382
383 PORTAbits.RA9 = 0;
384
385
386 PORTBbits.RB1 = 0;
387
388
389 PMDOUT = 0x0b;
390 while(PMMODEbits.BUSY == 1);
391
392
393 PORTBbits.RB1 = 1;
394
395
396 disData[0] = PMRDIN;
397 while(PMMODEbits.BUSY == 1);
398
399
400 disData[1] = PMRDIN;
401 while(PMMODEbits.BUSY == 1);
402
403
404 disData[2] = PMRDIN;
405 while(PMMODEbits.BUSY == 1);
406
407
408 PORTAbits.RA9 = 1;
409 }
410
411
412 void Display_RDDCOLMOD(void)
413 {
414
415 PORTAbits.RA9 = 0;
416
417
418 PORTBbits.RB1 = 0;
419
420
421 PMDOUT = 0x0c;
422 while(PMMODEbits.BUSY == 1);
423
424
425 PORTBbits.RB1 = 1;
426
427
428 disData[0] = PMRDIN;
429 while(PMMODEbits.BUSY == 1);
430
431
432 disData[1] = PMRDIN;
433 while(PMMODEbits.BUSY == 1);
434
435
436 disData[2] = PMRDIN;
437 while(PMMODEbits.BUSY == 1);
438
439
440 PORTAbits.RA9 = 1;
441 }
442
443
444 void Display_RDDIM(void)
445 {
446
447 PORTAbits.RA9 = 0;
448
449
450 PORTBbits.RB1 = 0;
451
452
453 PMDOUT = 0x0d;
454 while(PMMODEbits.BUSY == 1);
455
456
457 PORTBbits.RB1 = 1;
458
459
460 disData[0] = PMRDIN;
461 while(PMMODEbits.BUSY == 1);
462
463
464 disData[1] = PMRDIN;
465 while(PMMODEbits.BUSY == 1);
466
467
468 disData[2] = PMRDIN;
469 while(PMMODEbits.BUSY == 1);
470
471
472 PORTAbits.RA9 = 1;
473 }
474
475
476 void Display_RDDSM(void)
477 {
478
479 PORTAbits.RA9 = 0;
480
481
482 PORTBbits.RB1 = 0;
483
484
485 PMDOUT = 0x0e;
486 while(PMMODEbits.BUSY == 1);
487
488
489 PORTBbits.RB1 = 1;
490
491
492 disData[0] = PMRDIN;
493 while(PMMODEbits.BUSY == 1);
494
495
496 disData[1] = PMRDIN;
497 while(PMMODEbits.BUSY == 1);
498
499
500 disData[2] = PMRDIN;
501 while(PMMODEbits.BUSY == 1);
502
503
504 PORTAbits.RA9 = 1;
505 }
506
507
508 void Display_RDDSDR(void)
509 {
510
511 PORTAbits.RA9 = 0;
512
513
514 PORTBbits.RB1 = 0;
515
516
517 PMDOUT = 0x0f;
518 while(PMMODEbits.BUSY == 1);
519
520
521 PORTBbits.RB1 = 1;
522
523
524 disData[0] = PMRDIN;
525 while(PMMODEbits.BUSY == 1);
526
527
528 disData[1] = PMRDIN;
529 while(PMMODEbits.BUSY == 1);
530
531
532 disData[2] = PMRDIN;
533 while(PMMODEbits.BUSY == 1);
534
535
536 PORTAbits.RA9 = 1;
537 }
538
539
540 void Display_SLPIN(void)
541 {
542
543 PORTAbits.RA9 = 0;
544
545
546 PORTBbits.RB1 = 0;
547
548
549 PMDOUT = 0x10;
550 while(PMMODEbits.BUSY == 1);
551
552
553 PORTAbits.RA9 = 1;
554 }
555
556
557 void Display_SLPOUT(void)
558 {
559
560 PORTAbits.RA9 = 0;
561
562
563 PORTBbits.RB1 = 0;
564
565
566 PMDOUT = 0x11;
567 while(PMMODEbits.BUSY == 1);
568
569
570 PORTAbits.RA9 = 1;
571 }
572
573
574 void Display_PTLON(void)
575 {
576
577 PORTAbits.RA9 = 0;
578
579
580 PORTBbits.RB1 = 0;
581
582
583 PMDOUT = 0x12;
584 while(PMMODEbits.BUSY == 1);
585
586
587 PORTAbits.RA9 = 1;
588 }
589
590
591 void Display_NORON(void)
592 {
593
594 PORTAbits.RA9 = 0;
595
596
597 PORTBbits.RB1 = 0;
598
599
600 PMDOUT = 0x13;
601 while(PMMODEbits.BUSY == 1);
602
603
604 PORTAbits.RA9 = 1;
605 }
606
607
608 void Display_INVOFF(void)
609 {
610
611 PORTAbits.RA9 = 0;
612
613
614 PORTBbits.RB1 = 0;
615
616
617 PMDOUT = 0x20;
618 while(PMMODEbits.BUSY == 1);
619
620
621 PORTAbits.RA9 = 1;
622 }
623
624
625 void Display_INVON(void)
626 {
627
628 PORTAbits.RA9 = 0;
629
630
631 PORTBbits.RB1 = 0;
632
633
634 PMDOUT = 0x21;
635 while(PMMODEbits.BUSY == 1);
636
637
638 PORTAbits.RA9 = 1;
639 }
640
641
642 void Display_ALLPOFF(void)
643 {
644
645 PORTAbits.RA9 = 0;
646
647
648 PORTBbits.RB1 = 0;
649
650
651 PMDOUT = 0x22;
652 while(PMMODEbits.BUSY == 1);
653
654
655 PORTAbits.RA9 = 1;
656 }
657
658
659 void Display_ALLPON(void)
660 {
661
662 PORTAbits.RA9 = 0;
663
664
665 PORTBbits.RB1 = 0;
666
667
668 PMDOUT = 0x23;
669 while(PMMODEbits.BUSY == 1);
670
671
672 PORTAbits.RA9 = 1;
673
674 return;
675 }
676
677
678 void Display_DISPOFF(void)
679 {
680
681 PORTAbits.RA9 = 0;
682
683
684 PORTBbits.RB1 = 0;
685
686
687 PMDOUT = 0x28;
688 while(PMMODEbits.BUSY == 1);
689
690
691 PORTAbits.RA9 = 1;
692
693 return;
694 }
695
696
697 void Display_DISPON(void)
698 {
699
700 PORTAbits.RA9 = 0;
701
702
703 PORTBbits.RB1 = 0;
704
705
706 PMDOUT = 0x29;
707 while(PMMODEbits.BUSY == 1);
708
709
710 PORTAbits.RA9 = 1;
711
712 return;
713 }
714
715
716 void Display_CASET(uint16_t col_start, uint16_t col_end)
717 {
718 if(col_end == 0)
719 {
720 col_end = col_start + 15;
721 }
722
723
724 PORTAbits.RA9 = 0;
725
726
727 PORTBbits.RB1 = 0;
728
729 PMDOUT = 0x02a;
730 while(PMMODEbits.BUSY == 1);
731
732 PORTBbits.RB1 = 1;
733
734
735
736 if(col_start > 0xff)
737 {
738 PMDOUT = 1;
739 }
740 else
741 {
742 PMDOUT = 0;
743 }
744 while(PMMODEbits.BUSY == 1);
745
746 PMDOUT = col_start;
747 while(PMMODEbits.BUSY == 1);
748
749
750
751 if(col_end > 0xff)
752 {
753 PMDOUT = 1;
754 }
755 else
756 {
757 PMDOUT = 0;
758 }
759 while(PMMODEbits.BUSY == 1);
760
761 PMDOUT = col_end;
762 while(PMMODEbits.BUSY == 1);
763
764
765 PORTAbits.RA9 = 1;
766
767 return;
768 }
769
770
771 void Display_RASET(unsigned row_start, unsigned row_end)
772 {
773 if(row_end == 0)
774 {
775 row_end = row_start + 21;
776 }
777
778
779 PORTAbits.RA9 = 0;
780
781
782 PORTBbits.RB1 = 0;
783
784 PMDOUT = 0x02b;
785 while(PMMODEbits.BUSY == 1);
786
787 PORTBbits.RB1 = 1;
788
789
790
791 if(row_start > 0xff)
792 {
793 PMDOUT = 1;
794 }
795 else
796 {
797 PMDOUT = 0;
798 }
799 while(PMMODEbits.BUSY == 1);
800
801 PMDOUT = row_start;
802 while(PMMODEbits.BUSY == 1);
803
804
805
806 if(row_end > 0xff)
807 {
808 PMDOUT = 1;
809 }
810 else
811 {
812 PMDOUT = 0;
813 }
814 while(PMMODEbits.BUSY == 1);
815
816 PMDOUT = row_end;
817 while(PMMODEbits.BUSY == 1);
818
819
820 PORTAbits.RA9 = 1;
821
822 return;
823 }
824
825
826 void Display_RAMWR(void)
827 {
828
829 PORTAbits.RA9 = 0;
830
831
832 PORTBbits.RB1 = 0;
833
834
835 PMDOUT = 0x2C;
836 while(PMMODEbits.BUSY == 1);
837
838
839 PORTBbits.RB1 = 1;
840
841
842
843
844
845
846
847 return;
848 }
849
850
851 void Display_RAMRD(void)
852 {
853
854 PORTAbits.RA9 = 0;
855
856
857 PORTBbits.RB1 = 0;
858
859
860 PMDOUT = 0x2e;
861 while(PMMODEbits.BUSY == 1);
862
863
864 PORTBbits.RB1 = 1;
865
866
867 disData[0] = PMRDIN;
868 while(PMMODEbits.BUSY == 1);
869
870
871 disData[1] = PMRDIN;
872 while(PMMODEbits.BUSY == 1);
873
874
875 disData[2] = PMRDIN;
876 while(PMMODEbits.BUSY == 1);
877
878
879 disData[3] = PMRDIN;
880 while(PMMODEbits.BUSY == 1);
881
882
883 disData[4] = PMRDIN;
884 while(PMMODEbits.BUSY == 1);
885
886
887 PORTAbits.RA9 = 1;
888
889 return;
890 }
891
892
893 void Display_PLTAR(unsigned SR_HI, unsigned SR_LO, unsigned ER_HI, unsigned ER_LO)
894 {
895
896 PORTAbits.RA9 = 0;
897
898
899 PORTBbits.RB1 = 0;
900
901
902 PMDOUT = 0x30;
903 while(PMMODEbits.BUSY == 1);
904
905
906 PORTBbits.RB1 = 1;
907
908
909 PMDOUT = SR_HI;
910 while(PMMODEbits.BUSY == 1);
911
912
913 PMDOUT = SR_LO;
914 while(PMMODEbits.BUSY == 1);
915
916
917 PMDOUT = ER_HI;
918 while(PMMODEbits.BUSY == 1);
919
920
921 PMDOUT = ER_LO;
922 while(PMMODEbits.BUSY == 1);
923
924
925 PORTAbits.RA9 = 1;
926 }
927
928
929 void Display_Rect(unsigned col_start, unsigned col_end, unsigned row_start, unsigned row_end, unsigned rect_color)
930 {
931 unsigned a = col_start;
932 unsigned b = row_start;
933 unsigned c = col_end;
934 unsigned d = row_end;
935
936 Display_CASET(col_start, col_end - 1);
937 Display_RASET(row_start, row_end - 1);
938
939 Display_RAMWR();
940
941
942
943 PORTAbits.RA9 = 0;
944
945 for(int i=0;i<(col_end - col_start) * (row_end - row_start); i++)
946 {
947 PMDOUT = rect_color;
948 while(PMMODEbits.BUSY == 1);
949 for(int i=0;i<5;i++);
950 }
951
952
953 PORTAbits.RA9 = 1;
954
955 col_start = a;
956 row_start = b;
957 col_end = c;
958 row_end = d;
959 }
960
961 void Display_CLRSCN(int CanvasColor)
962 {
963 Display_CASET(0, 479);
964 Display_RASET(0, 319);
965 Display_RAMWR();
966
967 for(int i=0;i<=153600;i++)
968 {
969 PMDOUT = CanvasColor;
970 while(PMMODEbits.BUSY == 1);
971 }
972 }
973
974
975 void WriteChar(unsigned col_start, unsigned row_start, unsigned ascii_char, int TextColor, int CanvasColor)
976 {
977
978 if(ascii_char > 0x7F || ascii_char < 0)
979 {
980 ascii_char = 0x2a;
981 }
982
983 int x;
984 int text_char = ascii_char - 32;
985 int off_set = lut[text_char];
986 int read = courier_new_16pt_bold[off_set];
987 int a = 0b10000000;
988 int pixel = 0;
989 int s = 0;
990 int i;
991
992 col_end = col_start + 15;
993 row_end = row_start + 21;
994 Display_CASET(col_start, col_end);
995 Display_RASET(row_start, row_end);
996
997 Display_RAMWR();
998
999 for(s=0;s<=45;s++)
1000 {
1001 for(i=0;i<=7;i++)
1002 {
1003 x = read & a;
1004 if(x > 0)
1005 {
1006 pixel = TextColor;
1007 }
1008 else
1009 {
1010 pixel = CanvasColor;
1011 }
1012
1013
1014 PORTAbits.RA9 = 0;
1015
1016 PMDOUT = pixel;
1017 while(PMMODEbits.BUSY == 1);
1018
1019
1020 PORTAbits.RA9 = 1;
1021
1022 a = a / 2;
1023 }
1024 off_set++;
1025 read = courier_new_16pt_bold[off_set];
1026 a = 0b10000000;
1027 }
1028
1029 hchar = hchar + 15; return;
1030 }
1031
1032
1033 void WriteString(unsigned col_start, unsigned row_start, char array_name[], int TextColor, int CanvasColor)
1034 {
1035 int offset = 0;
1036
1037
1038
1039 char test_char = array_name[offset];
1040
1041 while(test_char != '\0')
1042 {
1043 test_char = array_name[offset];
1044
1045 Display_CASET(col_start, col_start + 15);
1046
1047 WriteChar(col_start, row_start, test_char, TextColor, CanvasColor);
1048 offset++;
1049 col_start = col_start + 15;
1050 }
1051
1052 hchar = hchar - 15;
1053 }
1054
1055
1056 void WriteButtonChar(unsigned col_start, unsigned row_start, unsigned ascii_char, int TextColor, int color1, int color2)
1057 {
1058
1059 if(ascii_char > 0x7F || ascii_char < 0)
1060 {
1061 ascii_char = 0x2a;
1062 }
1063
1064 int x;
1065 int text_char = ascii_char - 32;
1066 int off_set = lut[text_char];
1067 int read = courier_new_16pt_bold[off_set];
1068 int a = 0b10000000;
1069 int pixel = 0;
1070 int s = 0;
1071 int i;
1072
1073 col_end = col_start + 15;
1074 row_end = row_start + 21;
1075 Display_CASET(col_start, col_end);
1076 Display_RASET(row_start, row_end);
1077
1078 Display_RAMWR();
1079
1080 for(s=0;s<44;s++)
1081 {
1082 for(i=0;i<=7;i++)
1083 {
1084 x = read & a;
1085 if(x > 0)
1086 {
1087 pixel = TextColor;
1088 }
1089 else
1090 {
1091 if(s < 24)
1092 {
1093 pixel = color1;
1094 }
1095 else
1096 {
1097 pixel = color2;
1098 }
1099 }
1100
1101
1102 PORTAbits.RA9 = 0;
1103
1104 PMDOUT = pixel;
1105 while(PMMODEbits.BUSY == 1);
1106
1107
1108 PORTAbits.RA9 = 1;
1109
1110 a = a / 2;
1111 }
1112 off_set++;
1113 read = courier_new_16pt_bold[off_set];
1114 a = 0b10000000;
1115 }
1116
1117 hchar = hchar + 15;
1118 return;
1119 }
1120
1121
1122 void WriteButtonString(unsigned col_start, unsigned row_start, char array_name[], int TextColor, int color1, int color2)
1123 {
1124 int offset = 0;
1125
1126
1127
1128 char test_char = array_name[offset];
1129
1130 while(test_char != '\0')
1131 {
1132 test_char = array_name[offset];
1133
1134 Display_CASET(col_start, col_start + 15);
1135
1136 WriteButtonChar(col_start, row_start, test_char, TextColor, color1, color2);
1137 offset++;
1138 col_start = col_start + 15;
1139 }
1140
1141 hchar = hchar - 15;
1142 }
1143
1144 void DrawButton(unsigned col_start, unsigned row_start, uint8_t length, uint8_t height, int color1, int color2, int border_color, char array_name[])
1145 {
1146
1147
1148 Display_Rect(col_start, col_start + length, row_start, row_start + 2, border_color);
1149
1150 Display_Rect((col_start + length) - 2, col_start + length, row_start, row_start + height, border_color);
1151
1152 Display_Rect(col_start, col_start + length, (row_start + height) - 2, row_start + height, border_color);
1153
1154 Display_Rect(col_start, col_start + 2, row_start, row_start + height, border_color);
1155
1156
1157
1158 Display_Rect(col_start + 2, (col_start + length) - 2, row_start + 2, row_start + (height / 2), color1);
1159
1160
1161 Display_Rect(col_start + 2, (col_start + length) - 2, row_start + (height / 2), (row_start + height) - 2, color2);
1162
1163
1164 WriteButtonString(col_start + ((length - ((strlen(array_name) * 15))) / 2), row_start + 13, array_name, TextColor, color1, color2);
1165 }
1166