1 | Header: main.h
|
2 |
|
3 | #ifndef F_CPU
|
4 | #define F_CPU 1000000
|
5 | #endif
|
6 |
|
7 |
|
8 | Header: lcd.h
|
9 |
|
10 | #define LCD_PORT PORTC
|
11 | #define LCD_DDR DDRC
|
12 | #define LCD_DB PC0
|
13 | #define LCD_RS PC4
|
14 | #define LCD_EN PC5
|
15 |
|
16 |
|
17 | Source: main.c
|
18 |
|
19 | #include <avr/io.h>
|
20 | #include <stdio.h>
|
21 | #include <stdlib.h>
|
22 | #include <string.h>
|
23 | #include "main.h"
|
24 | #include "lcd.h"
|
25 | #include <util/delay.h>
|
26 |
|
27 |
|
28 | int main (void)
|
29 | {
|
30 |
|
31 | DDRD = (1 << PD0); // PIN D0 Ausgang
|
32 | PORTD = (0 << PD0); // auf LOW da RW angeschlossen
|
33 |
|
34 | uint8_t data;
|
35 | uint8_t data2;
|
36 |
|
37 | //*********** Initialisierung ******************************************
|
38 | _delay_ms (100);
|
39 |
|
40 | LCD_PORT = 0b00000011; // muss 3 mal gesendet werden
|
41 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
42 | _delay_us( 2 ); // kurze Pause
|
43 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
44 | _delay_ms (20);
|
45 |
|
46 | LCD_PORT = 0b00000011; // 2
|
47 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
48 | _delay_us( 2); // kurze Pause
|
49 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
50 | _delay_ms (10);
|
51 |
|
52 | LCD_PORT = 0b00000011; // 3
|
53 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
54 | _delay_us( 2 ); // kurze Pause
|
55 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
56 | _delay_ms (10);
|
57 |
|
58 | LCD_PORT = 0b00000010; // 4bit-Modus einstellen
|
59 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
60 | _delay_us( 2 ); // kurze Pause
|
61 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
62 |
|
63 | _delay_ms (10); // 10ms warten
|
64 |
|
65 | //********4bit / 2 Zeilen /5x8
|
66 | LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen
|
67 | data = 0b00101000; // 4bit / 2 Zeilen /5x8
|
68 | data2= data;
|
69 | //obere 4 Bits senden
|
70 | data &= 0xF0; // obere 4 Bit maskieren
|
71 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
72 | LCD_PORT |= (data>>(4-LCD_DB)); // obere Bits setzen
|
73 |
|
74 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
75 | _delay_us( 2 ); // kurze Pause
|
76 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
77 |
|
78 | //untere 4 Bits senden
|
79 | data2 = data2 << 4;
|
80 | data2 &= 0xF0; // untere 4 Bit maskieren
|
81 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
82 | LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen
|
83 |
|
84 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
85 | _delay_us( 2 ); // kurze Pause
|
86 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
87 |
|
88 | _delay_us(100);
|
89 |
|
90 | //******** Display Ein / Cursor Ein / blinken
|
91 | LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen
|
92 | data = 0b00001111; // Display Ein / Cursor Ein / blinken
|
93 | data2= data;
|
94 |
|
95 | //obere 4 Bits senden
|
96 | data &= 0xF0; // obere 4 Bit maskieren
|
97 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
98 | LCD_PORT |= (data>>(4-LCD_DB)); // obere Bits setzen
|
99 |
|
100 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
101 | _delay_us( 2 ); // kurze Pause
|
102 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
103 |
|
104 | //untere 4 Bits senden
|
105 | data2 = data2 << 4;
|
106 | data2 &= 0xF0; // untere 4 Bit maskieren
|
107 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
108 | LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen
|
109 |
|
110 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
111 | _delay_us( 2 ); // kurze Pause
|
112 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
113 |
|
114 | _delay_us(100);
|
115 |
|
116 | //******** Cursor ink / kein Scrollen
|
117 | LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen
|
118 | data = 0b00000100; // Cursor ink / kein Scrollen
|
119 | data2= data;
|
120 | //obere 4 Bits senden
|
121 | data &= 0xF0; // obere 4 Bit maskieren
|
122 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
123 | LCD_PORT |= (data>>(4-LCD_DB)); // obere Bits setzen
|
124 |
|
125 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
126 | _delay_us( 2 ); // kurze Pause
|
127 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
128 |
|
129 | //untere 4 Bits senden
|
130 | data2 = data2 << 4;
|
131 | data2 &= 0xF0; // untere 4 Bit maskieren
|
132 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen
|
133 | LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen
|
134 |
|
135 | LCD_PORT |= (1<<LCD_EN); // Enable auf 1 setzen
|
136 | _delay_us( 2 ); // kurze Pause
|
137 | LCD_PORT &= ~(1<<LCD_EN); // Enable auf 0 setzen
|
138 |
|
139 | _delay_us(100);
|
140 | //*********** Initialisierung ENDEN *************************************
|
141 |
|
142 | while(1) {
|
143 | }
|
144 | return 0;
|
145 | }
|