-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlcd_routines.c
118 lines (105 loc) · 2.42 KB
/
lcd_routines.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
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
//8-bit interface for LCD
#include <avr/io.h>
#include <util/delay.h>
#include "lcd_routines.h"
// Some LCD parameters and macros
#define delay 1
#define fastdelay 40
#define Set_Enable CONTROL_PORT|=_BV(E)
#define Clear_Enable CONTROL_PORT&=~_BV(E)
#define Select_InstructionRegister CONTROL_PORT&=~_BV(RS)
#define Select_DataRegister CONTROL_PORT|=_BV(RS)
#define Data_Lcd(a) DATA_PORT=a
void lcd_clear(void)
{
Select_InstructionRegister;
Data_Lcd(0x01);
Set_Enable;
_delay_us(2);
Clear_Enable;
_delay_ms(2);
}
void lcd_home(void)
{
Select_InstructionRegister;
Data_Lcd(0x02);
Set_Enable;
_delay_us(2);
Clear_Enable;
_delay_ms(2);
}
void lcd_command(unsigned char command)
{
Select_InstructionRegister;
Data_Lcd(command);
Set_Enable;
_delay_us(1);
Clear_Enable;
_delay_us(fastdelay);
}
void lcd_init(void)
{
DATA_DDR=0XFF; //Setting data port for output
CONTROL_DDR |= _BV(E)| _BV(RS);//setting selected pins of control port for output
CONTROL_PORT&= ~(_BV(E)|_BV(RS)); //setting values to 0 at starting
CONTROL_DDR |= _BV(RW); //
CONTROL_PORT |= ~(_BV(RW)); //
_delay_ms(15);
_delay_ms(15);
char init[3];
unsigned char i;
init[0] = 0x38;// 8bitdata and 5x8 dot display
init[1] = 0x0c;// enable display
init[2] = 0x06;// move cursor right after writing a character
for(i=0;i<3;i++) lcd_command(init[i]);
lcd_clear();
}
void display_char(unsigned char data)
{
Select_DataRegister;
Data_Lcd(data);
Set_Enable;
_delay_us(1);
Clear_Enable;
_delay_us(fastdelay);
}
void display_byte(unsigned char num)
{ unsigned char i = 0;
while(num>=100)
{
i++;
num = num -100;
}
display_char(i+48);
i=0;
while(num>=10)
{
i++;
num = num -10;
}
display_char(i+48);
display_char(num + 48);
}
void display_int(unsigned int num)
{
unsigned char i=0;
while(num>=10000) {num = num - 10000; i++;}
display_char(i+48);
i=0;
while(num>=1000) {num = num - 1000; i++;}
display_char(i+48);
i=0;
while(num>=100) {num = num - 100; i++;}
display_char(i+48);
i=0;
while(num>=10) {num = num - 10; i++;}
display_char(i+48);
i = (unsigned char)num;
display_char(i+48);
}
void move_to(unsigned char x,unsigned char y)
{
unsigned char t;
t = 128 + (y<<6) + x;
lcd_command(t);
}