| E:\Project\MainBrain32_MZ\Display.c |
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 = 0x55;
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
868
869
870
871
872 return;
873 }
874
875
876 void Display_PLTAR(unsigned SR_HI, unsigned SR_LO, unsigned ER_HI, unsigned ER_LO)
877 {
878
879 PORTAbits.RA9 = 0;
880
881
882 PORTBbits.RB1 = 0;
883
884
885 PMDOUT = 0x30;
886 while(PMMODEbits.BUSY == 1);
887
888
889 PORTBbits.RB1 = 1;
890
891
892 PMDOUT = SR_HI;
893 while(PMMODEbits.BUSY == 1);
894
895
896 PMDOUT = SR_LO;
897 while(PMMODEbits.BUSY == 1);
898
899
900 PMDOUT = ER_HI;
901 while(PMMODEbits.BUSY == 1);
902
903
904 PMDOUT = ER_LO;
905 while(PMMODEbits.BUSY == 1);
906
907
908 PORTAbits.RA9 = 1;
909 }
910
911
912 void Display_Rect(unsigned col_start, unsigned col_end, unsigned row_start, unsigned row_end, unsigned rect_color)
913 {
914 unsigned a = col_start;
915 unsigned b = row_start;
916 unsigned c = col_end;
917 unsigned d = row_end;
918
919 Display_CASET(col_start, col_end - 1);
920 Display_RASET(row_start, row_end - 1);
921
922 Display_RAMWR();
923
924
925
926 PORTAbits.RA9 = 0;
927
928 for(int i=0;i<(col_end - col_start) * (row_end - row_start); i++)
929 {
930 PMDOUT = rect_color;
931 while(PMMODEbits.BUSY == 1);
932 for(int i=0;i<5;i++);
933 }
934
935
936 PORTAbits.RA9 = 1;
937
938 col_start = a;
939 row_start = b;
940 col_end = c;
941 row_end = d;
942 }
943
944 void Display_CLRSCN(int CanvasColor)
945 {
946 Display_CASET(0, 479);
947 Display_RASET(0, 319);
948 Display_RAMWR();
949
950 for(int i=0;i<=153600;i++)
951 {
952 PMDOUT = CanvasColor;
953 while(PMMODEbits.BUSY == 1);
954 }
955 }
956
957
958 void WriteChar(unsigned col_start, unsigned row_start, unsigned ascii_char, int TextColor, int CanvasColor)
959 {
960
961 if(ascii_char > 0x7e || ascii_char < 0x20)
962 {
963 ascii_char = 0x2a;
964 }
965
966 int x;
967 int text_char = ascii_char - 32;
968 int off_set = lut[text_char];
969 int read = courier_new_10pt_bold[off_set];
970 int a = 0b10000000;
971 int pixel = 0;
972 int s = 0;
973 int i;
974
975 col_end = col_start + 15;
976 row_end = row_start + 26;
977 Display_CASET(col_start, col_end);
978 Display_RASET(row_start, row_end);
979
980 Display_RAMWR();
981
982 for(s=0;s<=52;s++)
983 {
984 for(i=0;i<=7;i++)
985 {
986 x = read & a;
987 if(x > 0)
988 {
989 pixel = TextColor;
990 }
991 else
992 {
993 pixel = CanvasColor;
994 }
995
996
997 PORTAbits.RA9 = 0;
998
999 PMDOUT = pixel;
1000 while(PMMODEbits.BUSY == 1);
1001
1002
1003 PORTAbits.RA9 = 1;
1004
1005 a = a / 2;
1006 }
1007 off_set++;
1008 read = courier_new_10pt_bold[off_set];
1009 a = 0b10000000;
1010 }
1011
1012 hchar = hchar + 15;
1013
1014 return;
1015 }
1016
1017
1018 void WriteString(unsigned col_start, unsigned row_start, char array_name[], int TextColor, int CanvasColor)
1019 {
1020 int offset = 0;
1021
1022
1023
1024 char test_char = array_name[offset];
1025
1026 while(test_char != '\0')
1027 {
1028 test_char = array_name[offset];
1029
1030 Display_CASET(col_start, col_start + 15);
1031
1032 WriteChar(col_start, row_start, test_char, TextColor, CanvasColor);
1033 offset++;
1034 col_start = col_start + 15;
1035 }
1036
1037 hchar = hchar - 15;
1038 }
1039
1040
1041 void WriteButtonChar(unsigned col_start, unsigned row_start, unsigned ascii_char, int TextColor, int color1, int color2)
1042 {
1043
1044 if(ascii_char > 0x7F || ascii_char < 0)
1045 {
1046 ascii_char = 0x2a;
1047 }
1048
1049 int x;
1050 int text_char = ascii_char - 32;
1051 int off_set = lut[text_char];
1052 int read = courier_new_10pt_bold[off_set];
1053 int a = 0b10000000;
1054 int pixel = 0;
1055 int s = 0;
1056 int i;
1057
1058 col_end = col_start + 15;
1059 row_end = row_start + 21;
1060 Display_CASET(col_start, col_end);
1061 Display_RASET(row_start, row_end);
1062
1063 Display_RAMWR();
1064
1065 for(s=0;s<44;s++)
1066 {
1067 for(i=0;i<=7;i++)
1068 {
1069 x = read & a;
1070 if(x > 0)
1071 {
1072 pixel = TextColor;
1073 }
1074 else
1075 {
1076 if(s < 24)
1077 {
1078 pixel = color1;
1079 }
1080 else
1081 {
1082 pixel = color2;
1083 }
1084 }
1085
1086
1087 PORTAbits.RA9 = 0;
1088
1089 PMDOUT = pixel;
1090 while(PMMODEbits.BUSY == 1);
1091
1092
1093 PORTAbits.RA9 = 1;
1094
1095 a = a / 2;
1096 }
1097 off_set++;
1098 read = courier_new_10pt_bold[off_set];
1099 a = 0b10000000;
1100 }
1101
1102 hchar = hchar + 15;
1103 return;
1104 }
1105
1106
1107 void WriteButtonString(unsigned col_start, unsigned row_start, char array_name[], int TextColor, int color1, int color2)
1108 {
1109 int offset = 0;
1110
1111
1112
1113 char test_char = array_name[offset];
1114
1115 while(test_char != '\0')
1116 {
1117 test_char = array_name[offset];
1118
1119 Display_CASET(col_start, col_start + 15);
1120
1121 WriteButtonChar(col_start, row_start, test_char, TextColor, color1, color2);
1122 offset++;
1123 col_start = col_start + 15;
1124 }
1125
1126 hchar = hchar - 15;
1127 }
1128
1129 void DrawButton(unsigned col_start, unsigned row_start, uint8_t length, uint8_t height, int color1, int color2, int border_color, char array_name[])
1130 {
1131
1132
1133 Display_Rect(col_start, col_start + length, row_start, row_start + 2, border_color);
1134
1135 Display_Rect((col_start + length) - 2, col_start + length, row_start, row_start + height, border_color);
1136
1137 Display_Rect(col_start, col_start + length, (row_start + height) - 2, row_start + height, border_color);
1138
1139 Display_Rect(col_start, col_start + 2, row_start, row_start + height, border_color);
1140
1141
1142
1143 Display_Rect(col_start + 2, (col_start + length) - 2, row_start + 2, row_start + (height / 2), color1);
1144
1145
1146 Display_Rect(col_start + 2, (col_start + length) - 2, row_start + (height / 2), (row_start + height) - 2, color2);
1147
1148
1149 WriteButtonString(col_start + ((length - ((strlen(array_name) * 15))) / 2), row_start + 13, array_name, TextColor, color1, color2);
1150 }
1151