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
| #define _XTAL_FREQ 20000000
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include <htc.h>
__CONFIG(FOSC_EXTRC &WDTE_OFF & PWRTE_ON &LVP_OFF &BOREN_ON &CPD_OFF &WRT_OFF &CP_OFF);
/*******START OF LCD FUNCTIONS*********/
void Lcd_SetBit(char data_bit) //Based on the Hex value Set the Bits of the Data Lines
{
if(data_bit& 1)
D4 = 1;
else
D4 = 0;
if(data_bit& 2)
D5 = 1;
else
D5 = 0;
if(data_bit& 4)
D6 = 1;
else
D6 = 0;
if(data_bit& 8)
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0;
Lcd_SetBit(a); //Incoming Hex value
EN = 1;
__delay_ms(4);
EN = 0;
}
Lcd_Clear()
{
Lcd_Cmd(0); //Clear the LCD
Lcd_Cmd(1); //Move the curser to first position
}
void Lcd_Set_Cursor(char a, char b)
{
char temp,z,y;
if(a== 1)
{
temp = 0x80 + b - 1; //80H is used to move the curser
z = temp>>4; //Lower 8-bits
y = temp & 0x0F; //Upper 8-bits
Lcd_Cmd(z); //Set Row
Lcd_Cmd(y); //Set Column
}
else if(a== 2)
{
temp = 0xC0 + b - 1;
z = temp>>4; //Lower 8-bits
y = temp & 0x0F; //Upper 8-bits
Lcd_Cmd(z); //Set Row
Lcd_Cmd(y); //Set Column
}
}
void Lcd_Start()
{
Lcd_SetBit(0x00);
for(int i=1065244; i<=0; i--) NOP();
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
Lcd_Cmd(0x03);
Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD
Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD
Lcd_Cmd(0x08); //Select Row 1
Lcd_Cmd(0x00); //Clear Row 1 Display
Lcd_Cmd(0x0C); //Select Row 2
Lcd_Cmd(0x00); //Clear Row 2 Display
Lcd_Cmd(0x06);
}
void Lcd_Print_Char(char data) //Send 8-bits through 4-bit mode
{
char Lower_Nibble,Upper_Nibble;
Lower_Nibble = data&0x0F;
Upper_Nibble = data&0xF0;
RS = 1; // => RS = 1
Lcd_SetBit(Upper_Nibble>>4); //Send upper half by shifting by 4
EN = 1;
for(int i=2130483; i<=0; i--) NOP();
EN = 0;
Lcd_SetBit(Lower_Nibble); //Send Lower half
EN = 1;
for(int i=2130483; i<=0; i--) NOP();
EN = 0;
}
void Lcd_Print_String(char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
Lcd_Print_Char(a[i]); //Split the string using pointers and call the Char function
}
/*******END OF LCD FUNCTIONS*********/
const unsigned short Custom_Char5x8[] = {
0b01110,0b11011,0b10001,0b10001,0b10001,0b10001,0b10001,0b11111,//code for CGRAM memory space 1
0b01110,0b11011,0b10001,0b10001,0b10001,0b10001,0b11111,0b11111,//code for CGRAM memory space 2
0b01110,0b11011,0b10001,0b10001,0b10001,0b11111,0b11111,0b11111,//code for CGRAM memory space 3
0b01110,0b11011,0b10001,0b10001,0b11111,0b11111,0b11111,0b11111,//code for CGRAM memory space 4
0b01110,0b11011,0b10001,0b11111,0b11111,0b11111,0b11111,0b11111,//code for CGRAM memory space 5
0b01110,0b11011,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,//code for CGRAM memory space 6
0b01110,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111 //code for CGRAM memory space 7
};
int main()
{
unsigned int a;char i;
TRISD = 0x00;
Lcd_Start();
//***Load custom char inyo CGROM***//
Lcd_Cmd(0x04);//set CGRAM address
Lcd_Cmd(0x00);//...set CGRAM Address
for (i = 0; i <= 63 ; i++)
Lcd_Print_Char(Custom_Char5x8[i]);
Lcd_Cmd(0); // Return to Home
Lcd_Cmd(2); // .. return to Home
//*** Loading custom char complete***//
while(1)
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Print_String("Custom Font");
Lcd_Set_Cursor(2,1);
Lcd_Print_Char(0); // Display Custom Character 0
Lcd_Print_Char(1); // Display Custom Character 1
Lcd_Print_Char(2); // Display Custom Character 2
Lcd_Print_Char(3); // Display Custom Character 3
Lcd_Print_Char(4); // Display Custom Character 4
Lcd_Print_Char(5); // Display Custom Character 5
Lcd_Print_Char(6); // Display Custom Character 6
Lcd_Print_Char(7); // Display Custom Character 7
Lcd_Print_String("BATTERY");
__delay_ms(1000);
}
return 0;
} |