lcd.c


1
#include <lpc21xx.h>
2
3
#define LCD_RS  1 << 16
4
#define LCD_R_W  1 << 17
5
#define LCD_E  1 << 18
6
#define LCD_D4  1 << 19
7
#define LCD_D5  1 << 20
8
#define LCD_D6  1 << 21
9
#define LCD_D7  1 << 22
10
11
void enable(void);
12
void delay_30ms(void);
13
void delay_1_53ms(void);
14
void delay_39us(void);
15
16
void main(void) 
17
{    
18
  IODIR1 |= LCD_RS | LCD_R_W | LCD_E | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7;  //portbits als output definieren
19
  
20
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_E | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; //portbits auf low
21
22
  delay_30ms();  // wait for power on of the lcd
23
24
  //funtion set ->  4-bit mode, 2 rows, 5x7 dots
25
  IOSET1 |= LCD_D5;
26
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D4 | LCD_D6 | LCD_D7;
27
28
  enable();
29
30
  delay_30ms();
31
32
  enable();
33
34
  delay_30ms();
35
36
  IOSET1 |= LCD_D7; 
37
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D6; 
38
39
  enable();
40
41
  delay_30ms();
42
43
  //display on, cursor on, blink on
44
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; 
45
46
  enable();
47
48
  delay_30ms();
49
50
  IOSET1 |= LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; 
51
  IOCLR1 |= LCD_RS | LCD_R_W;
52
  
53
  enable();
54
55
  //clear display 
56
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; 
57
58
  enable();
59
60
  IOSET1 |= LCD_D4;
61
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D5 | LCD_D6 | LCD_D7; 
62
63
  IOCLR0 |= 0x800;
64
65
  enable();
66
67
  delay_1_53ms();
68
69
  //entry mode set -> increment mode, entire shoft on
70
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; 
71
72
  enable();
73
74
  IOSET1 |= LCD_D4 | LCD_D5 | LCD_D6;
75
  IOCLR1 |= LCD_RS | LCD_R_W | LCD_D7; 
76
77
  enable();
78
79
  //write 'A' to the display
80
  IOSET1 |= LCD_RS | LCD_D6;
81
  IOCLR1 |= LCD_R_W | LCD_D4 | LCD_D5 | LCD_D7;
82
83
  enable();
84
85
  IOSET1 |= LCD_RS | LCD_D4;
86
  IOCLR1 |= LCD_R_W | LCD_D5 | LCD_D6 | LCD_D7;
87
88
  enable();  
89
90
91
  while(1);
92
}
93
94
void enable(void)
95
{
96
  delay_39us();
97
  
98
  IOSET1 |= LCD_E;
99
  
100
  delay_39us();
101
102
  IOCLR1 |= LCD_E;  
103
}
104
105
void delay_30ms(void)
106
{
107
  unsigned int i=0, j=0;
108
109
  for(i=0; i < 250000; i++)       //250000
110
    j+=1;
111
}
112
113
void delay_1_53ms(void)
114
{
115
  unsigned int i=0, j=0;
116
117
  for(i=0; i < 1500; i++)   //1500
118
    j+=1;
119
}
120
121
void delay_39us(void)
122
{
123
  unsigned int i=0, j=0;
124
125
  for(i=0; i < 350; i++)      //350
126
    j+=1;
127
}