-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclcd.c
79 lines (65 loc) · 1.45 KB
/
clcd.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
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
/*
* File: clcd.c
* Author: palan
*
* Created on December 14, 2023, 1:00 PM
*/
#include <xc.h>
#include "clcd.h"
void clcd_write(unsigned char byte, unsigned char control_bit)
{
CLCD_RS = control_bit;
CLCD_PORT = byte;
/* Should be atleast 200ns */
CLCD_EN = HI;
//__delay_ms(2);
CLCD_EN = LO;
PORT_DIR = INPUT;
CLCD_RW = HI;
CLCD_RS = INSTRUCTION_COMMAND;
do
{
CLCD_EN = HI;
CLCD_EN = LO;
} while (CLCD_BUSY);
CLCD_RW = LO;
PORT_DIR = OUTPUT;
}
void init_clcd()
{
/* Set PortD as output port for CLCD data */
TRISD = 0x00;
/* Set PortC as output port for CLCD control */
TRISC = TRISC & 0xF8;
CLCD_RW = LO;
/* Startup Time for the CLCD controller */
__delay_ms(40);
/* The CLCD Startup Sequence */
clcd_write(EIGHT_BIT_MODE, INSTRUCTION_COMMAND );
__delay_us(4100);
clcd_write(EIGHT_BIT_MODE, INSTRUCTION_COMMAND );
__delay_us(100);
clcd_write(EIGHT_BIT_MODE, INSTRUCTION_COMMAND );
__delay_us(1);
CURSOR_HOME;
__delay_us(100);
TWO_LINE_5x8_MATRIX_8_BIT;
__delay_us(100);
CLEAR_DISP_SCREEN;
__delay_us(500);
DISP_ON_AND_CURSOR_OFF;
__delay_us(100);
}
void clcd_print(const unsigned char *data, unsigned char addr)
{
clcd_write(addr, INSTRUCTION_COMMAND);
while (*data != '\0')
{
clcd_write(*data++, DATA_COMMAND);
}
}
void clcd_putch(const unsigned char data, unsigned char addr)
{
clcd_write(addr, INSTRUCTION_COMMAND);
clcd_write(data, DATA_COMMAND);
}