1 | #include <p18cxxx.h>
|
2 | #include <delays.h>
|
3 |
|
4 |
|
5 | void lcd_init(void);
|
6 | void OutLcdControl(unsigned char Daten);
|
7 | void OutLcdDaten(unsigned char Daten);
|
8 | void DelayFor18TCY(void);
|
9 | void Delay_30m(void);
|
10 | void Delay_5m(void);
|
11 | void Delay_100u(void);
|
12 | void Delay_1m(void);
|
13 | void Delay_50m(void);
|
14 |
|
15 |
|
16 | #define enable LATBbits.LATB3
|
17 | #define rs LATBbits.LATB2
|
18 | #define rw LATBbits.LATB1
|
19 |
|
20 |
|
21 | void lcd_init (void)
|
22 | {
|
23 | Delay_50m(); //laaaange Warten
|
24 | Delay_50m();
|
25 | Delay_50m();
|
26 | Delay_50m();
|
27 | Delay_50m();
|
28 | Delay_50m();
|
29 | Delay_50m();
|
30 | Delay_50m();
|
31 | Delay_50m();
|
32 | Delay_50m();
|
33 |
|
34 | LATB = 0b00110000; //1
|
35 | enable = 1;
|
36 | DelayFor18TCY();
|
37 | enable = 0;
|
38 |
|
39 | Delay_5m();
|
40 |
|
41 | LATB = 0b00110000; //2
|
42 | enable = 1;
|
43 | DelayFor18TCY();
|
44 | enable = 0;
|
45 |
|
46 | Delay_5m();
|
47 |
|
48 | LATB = 0b00110000; //3
|
49 | enable = 1;
|
50 | DelayFor18TCY();
|
51 | enable = 0;
|
52 |
|
53 | Delay_5m();
|
54 |
|
55 | LATB = 0b00100000; //4
|
56 | enable = 1;
|
57 | DelayFor18TCY();
|
58 | enable = 0;
|
59 |
|
60 | Delay_5m();
|
61 |
|
62 | OutLcdControl(0b00000001); //löschen und cusor home
|
63 | Delay_5m();
|
64 | OutLcdControl(0b00101000); //5 function set, 4-bit 2-zeilig, 5x7
|
65 | Delay_5m();
|
66 | OutLcdControl(0b00001000); //6 display off
|
67 | Delay_5m();
|
68 | OutLcdControl(0b00000110); //7 entry mode, increment, disable display-shift
|
69 | Delay_5m();
|
70 | OutLcdControl(0b00000011); //8 cursor home, cursor home
|
71 | Delay_5m();
|
72 | OutLcdControl(0b00001111); //9 display on
|
73 | Delay_5m();
|
74 |
|
75 | return;
|
76 |
|
77 | // OutLcdDaten('A');
|
78 |
|
79 | }
|
80 |
|
81 | void OutLcdControl(unsigned char Daten)
|
82 | {
|
83 | Delay_5m(); //warten bis Display bereit ist
|
84 | LATB = Daten & 0xF0;
|
85 |
|
86 | enable = 1; //Daten senden
|
87 | Delay_1m(); //DelayFor18TCY();
|
88 | enable = 0;
|
89 |
|
90 | Delay_1m(); //DelayFor18TCY(); //warten
|
91 |
|
92 | Daten = Daten << 4; //untere Daten an Position schiebebn
|
93 |
|
94 | LATB = Daten & 0xF0;
|
95 |
|
96 | enable = 1; // Daten senden
|
97 | Delay_1m(); //DelayFor18TCY()
|
98 | enable = 0;
|
99 |
|
100 | Delay_1m(); //DelayFor18TCY(); //warten
|
101 | //fertig
|
102 | }
|
103 | //====================================================================
|
104 | void OutLcdDaten(unsigned char Daten)
|
105 | {
|
106 | DelayFor18TCY(); //warten bis Display bereit ist
|
107 | LATB = Daten & 0xF0;
|
108 | rs = 1; //Daten senden
|
109 |
|
110 | enable = 1; //Daten senden
|
111 | DelayFor18TCY();
|
112 | enable = 0;
|
113 |
|
114 | Delay_5m(); //warten
|
115 |
|
116 | Daten = Daten << 4; //untere Daten an Position schiebebn
|
117 |
|
118 | LATB = Daten & 0xF0;
|
119 | rs = 1; //Daten senden
|
120 |
|
121 | enable = 1; // Daten senden
|
122 | DelayFor18TCY();
|
123 | enable = 0;
|
124 |
|
125 | Delay_5m(); //warten
|
126 | //fertig
|
127 | }
|
128 | //====================================================================
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 | void DelayFor18TCY(void)
|
135 | {
|
136 | Nop();
|
137 | Nop();
|
138 | Nop();
|
139 | Nop();
|
140 | Nop();
|
141 | Nop();
|
142 | Nop();
|
143 | Nop();
|
144 | Nop();
|
145 | Nop();
|
146 | Nop();
|
147 | Nop();
|
148 | Nop();
|
149 | Nop();
|
150 | }
|
151 |
|
152 | void Delay_30m(void)
|
153 | {
|
154 | Delay1KTCYx(56); //Delay of 15ms
|
155 | return;
|
156 | }
|
157 | void Delay_5m(void)
|
158 | {
|
159 | Delay1KTCYx(28); //Delay 5ms
|
160 | return;
|
161 | }
|
162 | void Delay_100u(void)
|
163 | {
|
164 | Delay100TCYx(36); //100µs
|
165 | }
|
166 | void Delay_1m(void)
|
167 | {
|
168 | Delay1KTCYx(36); //1ms
|
169 | }
|
170 | void Delay_50m(void)
|
171 | {
|
172 | Delay1KTCYx(180); //Delay of 50ms
|
173 | return;
|
174 | }
|