-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsethlcd.h
199 lines (181 loc) · 10.7 KB
/
sethlcd.h
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/** Driver for LCD ABG128064A23 for Microprocessor Laboratory
2017 Spring Semester. Lee Sang Su 2011314425 SKKU
github.com/sethlee0111
@author sethlee
@version 0.9
*/
/* ------------------- BASIC INFO for HARDWARE -------------------- */
/*
Built On : MC9S12DP512
Wired :
-------
| | 1 ~ 3
| | 4 ------ RS(H:Data, L: Ins) -- Port P : 4
| | 5 ------ RW(H:Read, L: Write)- Port P : 3
| LCD | 6 ------ E(Enable Signal) ---- Port P : 5
| | 7 ~ 14 - Data Bus Lines ------ Port T : 0 ~ 7
| | 15, 16 - CS1(L), CS2(R) ------ Port P : 6, 7
| |
-------
-------------< Port P >---------------
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 |
<CS2><CS1> <E> <RS ><RW >
|
|
The enable pin works as a clock for the GLCD.
During write instructions, after setting each pin of the
corresponding value, enable pin must be applied
with a high to low pulse. The data will be latched at the
FALLING EDGE of the E. For reading instructions, data appears
while E is at high level. Always give a delay of more than Ecycle
(refer datasheet) between each instruction and also consider other
timing parameters like delay time, rise time and setup time.
<https://openlabpro.com/guide/ks0108-graphic-lcd-interfacing-pic18f4550-part-2>
-------------< ------ >---------------
Timing : ? why is this here i do not know
Oscillator clock : 16Mhz
1 Clock Duration = 6.25 ns
25ns = 4 Clocks
*/
#ifndef SETHLCD_H
#define SETHLCD_H
#include "projectglobals.h"
#define GLCD_E Pim.ptp.bit.ptp5
#define GLCD_RS Pim.ptp.bit.ptp4
#define GLCD_RW Pim.ptp.bit.ptp3
#define GLCD_CS1 Pim.ptp.bit.ptp6
#define GLCD_CS2 Pim.ptp.bit.ptp7
#define GLCD_Data Pim.ptt.byte
#define GLCD_Control Pim.ptp.byte
#define GLCD_DataDir Pim.ddrt.byte
#define STRING_HEIGHT 9
#define MAX_STRING_LENGTH 20
/* GLOBALS */
static int currentPage, currentY; // current position of x and y on GLCD
static unsigned char buffer[8][128]; //buffer for screen. each Byte represent one 8*1 column data
static unsigned char bitmap1[5] = {0xBD, 0xa9, 0xa1, 0x81, 0xFF};
static unsigned char bitmap2[5] = {0xFF, 0x81, 0xa1, 0xa9, 0xBD};
/*I took this from web */
static unsigned char font[95][5] = { /* 5x7 ASCII character font */
{0x00, 0x00, 0x00, 0x00, 0x00}, // font for Microprocessor class 0x20 space
{0x00, 0x00, 0x4f, 0x00, 0x00}, // font for Microprocessor class 0x21 !
{0x00, 0x07, 0x00, 0x07, 0x00}, // font for Microprocessor class 0x22 "
{0x14, 0x7f, 0x14, 0x7f, 0x14}, // font for Microprocessor class 0x23 #
{0x24, 0x2a, 0x7f, 0x2a, 0x12}, // font for Microprocessor class 0x24 $
{0x23, 0x13, 0x08, 0x64, 0x62}, // font for Microprocessor class 0x25 %
{0x36, 0x49, 0x56, 0x20, 0x50}, // font for Microprocessor class 0x26 & -
{0x00, 0x05, 0x03, 0x00, 0x00}, // font for Microprocessor class 0x27 '
{0x00, 0x00, 0x3E, 0x41, 0x00}, // font for Microprocessor class 0x28 ( -
{0x00, 0x00, 0x41, 0x3E, 0x00}, // font for Microprocessor class 0x29 ) -
{0x08, 0x2A, 0x1c, 0x2A, 0x08}, // font for Microprocessor class 0x2a * -
{0x08, 0x08, 0x3e, 0x08, 0x08}, // font for Microprocessor class 0x2b +
{0x00, 0x50, 0x30, 0x00, 0x00}, // font for Microprocessor class 0x2c , -
{0x08, 0x08, 0x08, 0x08, 0x08}, // font for Microprocessor class 0x2d -
{0x00, 0x60, 0x60, 0x00, 0x00}, // font for Microprocessor class 0x2e .
{0x20, 0x10, 0x08, 0x04, 0x02}, // font for Microprocessor class 0x2f /
{0x3e, 0x51, 0x49, 0x45, 0x3e}, // font for Microprocessor class 0x30 0
{0x00, 0x42, 0x7f, 0x40, 0x00}, // font for Microprocessor class 0x31 1
{0x62, 0x51, 0x49, 0x49, 0x46}, // font for Microprocessor class 0x32 2 -
{0x22, 0x49, 0x49, 0x49, 0x36}, // font for Microprocessor class 0x33 3 -
{0x18, 0x14, 0x12, 0x7f, 0x10}, // font for Microprocessor class 0x34 4
{0x27, 0x45, 0x45, 0x45, 0x39}, // font for Microprocessor class 0x35 5
{0x3c, 0x4a, 0x49, 0x49, 0x30}, // font for Microprocessor class 0x36 6
{0x01, 0x71, 0x09, 0x05, 0x03}, // font for Microprocessor class 0x37 7
{0x36, 0x49, 0x49, 0x49, 0x36}, // font for Microprocessor class 0x38 8
{0x06, 0x49, 0x49, 0x29, 0x1e}, // font for Microprocessor class 0x39 9
{0x00, 0x36, 0x36, 0x00, 0x00}, // font for Microprocessor class 0x3a :
{0x00, 0x56, 0x36, 0x00, 0x00}, // font for Microprocessor class 0x3b ;
{0x08, 0x14, 0x22, 0x41, 0x00}, // font for Microprocessor class 0x3c <
{0x14, 0x14, 0x14, 0x14, 0x14}, // font for Microprocessor class 0x3d =
{0x00, 0x41, 0x22, 0x14, 0x08}, // font for Microprocessor class 0x3e >
{0x02, 0x01, 0x51, 0x09, 0x06}, // font for Microprocessor class 0x3f ?
{0x32, 0x49, 0x79, 0x41, 0x3e}, // font for Microprocessor class 0x40 @
{0x7e, 0x09, 0x09, 0x09, 0x7e}, // font for Microprocessor class 0x41 A -
{0x7f, 0x49, 0x49, 0x49, 0x36}, // font for Microprocessor class 0x42 B
{0x3e, 0x41, 0x41, 0x41, 0x22}, // font for Microprocessor class 0x43 C
{0x7f, 0x41, 0x41, 0x41, 0x3e}, // font for Microprocessor class 0x44 D
{0x7f, 0x49, 0x49, 0x49, 0x41}, // font for Microprocessor class 0x45 E
{0x7f, 0x09, 0x09, 0x09, 0x01}, // font for Microprocessor class 0x46 F
{0x3e, 0x41, 0x51, 0x51, 0x70}, // font for Microprocessor class 0x47 G -
{0x7f, 0x08, 0x08, 0x08, 0x7f}, // font for Microprocessor class 0x48 H
{0x00, 0x41, 0x7f, 0x41, 0x00}, // font for Microprocessor class 0x49 I
{0x20, 0x40, 0x40, 0x40, 0x3f}, // font for Microprocessor class 0x4a J -
{0x7f, 0x08, 0x14, 0x22, 0x41}, // font for Microprocessor class 0x4b K
{0x7f, 0x40, 0x40, 0x40, 0x40}, // font for Microprocessor class 0x4c L
{0x7f, 0x02, 0x0c, 0x02, 0x7f}, // font for Microprocessor class 0x4d M
{0x7f, 0x04, 0x08, 0x10, 0x7f}, // font for Microprocessor class 0x4e N
{0x3e, 0x41, 0x41, 0x41, 0x3e}, // font for Microprocessor class 0x4f O
{0x7f, 0x09, 0x09, 0x09, 0x06}, // font for Microprocessor class 0x50 P
{0x3e, 0x41, 0x51, 0x21, 0x5e}, // font for Microprocessor class 0x51 Q
{0x7f, 0x09, 0x19, 0x29, 0x46}, // font for Microprocessor class 0x52 R
{0x26, 0x49, 0x49, 0x49, 0x32}, // font for Microprocessor class 0x53 S
{0x01, 0x01, 0x7f, 0x01, 0x01}, // font for Microprocessor class 0x54 T
{0x3f, 0x40, 0x40, 0x40, 0x3f}, // font for Microprocessor class 0x55 U
{0x07, 0x18, 0x60, 0x18, 0x07}, // font for Microprocessor class 0x56 V -
{0x7f, 0x20, 0x18, 0x20, 0x7f}, // font for Microprocessor class 0x57 W -
{0x63, 0x14, 0x08, 0x14, 0x63}, // font for Microprocessor class 0x58 X
{0x03, 0x04, 0x78, 0x04, 0x03}, // font for Microprocessor class 0x59 Y -
{0x61, 0x51, 0x49, 0x45, 0x43}, // font for Microprocessor class 0x5a Z
{0x00, 0x7f, 0x41, 0x41, 0x00}, // font for Microprocessor class 0x5b [
{0x02, 0x04, 0x08, 0x10, 0x20}, // font for Microprocessor class 0x5c (\)
{0x00, 0x41, 0x41, 0x7f, 0x00}, // font for Microprocessor class 0x5d ]
{0x04, 0x02, 0x01, 0x02, 0x04}, // font for Microprocessor class 0x5e ^
{0x40, 0x40, 0x40, 0x40, 0x40}, // font for Microprocessor class 0x5f _
{0x00, 0x01, 0x02, 0x04, 0x00}, // font for Microprocessor class 0x60 `
{0x20, 0x54, 0x54, 0x78, 0x40}, // font for Microprocessor class 0x61 a -
{0x7f, 0x48, 0x44, 0x44, 0x38}, // font for Microprocessor class 0x62 b
{0x38, 0x44, 0x44, 0x44, 0x20}, // font for Microprocessor class 0x63 c
{0x38, 0x44, 0x44, 0x48, 0x7f}, // font for Microprocessor class 0x64 d
{0x38, 0x54, 0x54, 0x54, 0x18}, // font for Microprocessor class 0x65 e
{0x08, 0x7e, 0x09, 0x02, 0x00}, // font for Microprocessor class 0x66 f -
{0x0e, 0x51, 0x51, 0x51, 0x3e}, // font for Microprocessor class 0x67 g -
{0x7f, 0x08, 0x04, 0x04, 0x78}, // font for Microprocessor class 0x68 h
{0x00, 0x44, 0x7d, 0x40, 0x00}, // font for Microprocessor class 0x69 i -
{0x30, 0x40, 0x44, 0x3d, 0x00}, // font for Microprocessor class 0x6a j -
{0x7f, 0x10, 0x28, 0x44, 0x00}, // font for Microprocessor class 0x6b k
{0x00, 0x41, 0x7f, 0x40, 0x00}, // font for Microprocessor class 0x6c l
{0x78, 0x04, 0x18, 0x04, 0x78}, // font for Microprocessor class 0x6d m -
{0x7c, 0x08, 0x04, 0x04, 0x78}, // font for Microprocessor class 0x6e n
{0x38, 0x44, 0x44, 0x44, 0x38}, // font for Microprocessor class 0x6f o
{0x7f, 0x05, 0x09, 0x09, 0x06}, // font for Microprocessor class 0x70 p -
{0x06, 0x09, 0x05, 0x7f, 0x40}, // font for Microprocessor class 0x71 q -
{0x7c, 0x08, 0x04, 0x04, 0x00}, // font for Microprocessor class 0x72 r -
{0x48, 0x54, 0x54, 0x54, 0x24}, // font for Microprocessor class 0x73 s -
{0x04, 0x3e, 0x44, 0x20, 0x00}, // font for Microprocessor class 0x74 t -
{0x3c, 0x40, 0x40, 0x20, 0x7c}, // font for Microprocessor class 0x75 u
{0x1c, 0x20, 0x40, 0x20, 0x1c}, // font for Microprocessor class 0x76 v
{0x3c, 0x40, 0x30, 0x40, 0x3c}, // font for Microprocessor class 0x77 w
{0x44, 0x28, 0x10, 0x28, 0x44}, // font for Microprocessor class 0x78 x
{0x41, 0x22, 0x1c, 0x02, 0x01}, // font for Microprocessor class 0x79 y -
{0x44, 0x64, 0x54, 0x4c, 0x44}, // font for Microprocessor class 0x7a z
{0x00, 0x08, 0x36, 0x41, 0x00}, // font for Microprocessor class 0x7b {
{0x00, 0x00, 0x77, 0x00, 0x00}, // font for Microprocessor class 0x7c |
{0x00, 0x41, 0x36, 0x08, 0x00}, // font for Microprocessor class 0x7d }
{0x08, 0x04, 0x08, 0x10, 0x08}}; // font for Microprocessor class 0x7e ~
/* FUNCTIONS : add immediately after making one or it will work in weird way */
void Busy_Wait(void);
void Set_CS(char csNum);
void Move_Cursor(unsigned char page, unsigned char yPos);
void Draw_Dot(unsigned char xPos, unsigned char yPos);
void Set_Start_Line(unsigned char line);
void Write_Column_GLCD(unsigned char data);
void Write_Character_GLCD(unsigned char page, unsigned char yPos, char chr);
//BE SURE TO ADD NULL at the end of a string!
void Write_String_GLCD(unsigned char page, unsigned char yPos, char* chrArr);
void Buffer_Update_GLCD(unsigned char lowerPage, unsigned char upperPage, unsigned char lowerY, unsigned char upperY);
void String_Buffer(unsigned char xPos, unsigned char yPos, char* strArr);
void Clear_Buffer(unsigned char lowerX, unsigned char upperX, unsigned char lowerY, unsigned char upperY);
void Draw_Direct_Vline(unsigned char yPos, unsigned char lowerX, unsigned char upperX);
void Bitmap_Buffer5X7(unsigned char page, unsigned char yPos, char* bitmapBuf);
/* FUNCTIONS for users - for broad use */
/* naming order : "ACTION"_GLCD */
void Import_GLCD(void);
void Write_GLCD(unsigned char isData, unsigned char data);
unsigned char Read_GLCD (unsigned char isData);
void Clear_GLCD(void);
void String_GLCD(unsigned char xPos, unsigned char yPos, char* strArr);
void Draw_Vline(unsigned char yPos, unsigned char lowerX, unsigned char upperX);
void Draw_Hline(unsigned char xPos, unsigned char lowerY, unsigned char upperY);
void Erase_GLCD(unsigned char lowerX, unsigned char upperX, unsigned char lowerY, unsigned char upperY);
void Draw_Logo(void);
#endif