1 |
|
2 | void lcd_init(){
|
3 |
|
4 | DDRB = 0xFF;
|
5 | DDRD = 0xFF;
|
6 |
|
7 | lcd_reset();
|
8 |
|
9 | lcd_setC(0x40); //SYSTEM SET
|
10 | lcd_setP(0x30); //Setze P1
|
11 | lcd_setP(0x87); //Setze P2
|
12 | lcd_setP(0x07); //Setze P3
|
13 | lcd_setP(0x27); //Setze P4
|
14 | lcd_setP(0x2B); //55 //Setze P5
|
15 | lcd_setP(0xEF); //Setze P6
|
16 | lcd_setP(0xF0); //28 //Setze P7
|
17 | lcd_setP(0); //Setze P8
|
18 |
|
19 | lcd_setC(0x44); //SCROLL
|
20 | lcd_setP(0); //Setze P1
|
21 | lcd_setP(0); //Setze P2
|
22 | lcd_setP(0x40); //Setze P3
|
23 | lcd_setP(0); //Setze P4
|
24 | lcd_setP(0x10); //Setze P5
|
25 | lcd_setP(0x40); //Setze P6
|
26 | lcd_setP(0); //Setze P7
|
27 | lcd_setP(0x04); //Setze P8
|
28 | lcd_setP(0); //Setze P9
|
29 | lcd_setP(0x30); //Setze P10
|
30 |
|
31 | lcd_setC(0x5A); //HDOT SCR
|
32 | lcd_setP(0); //Setze P1
|
33 |
|
34 | lcd_setC(0x5B); //OVLAY
|
35 | lcd_setP(0x01); //Setze P
|
36 |
|
37 | lcd_setC(0x58); //DISP OFF
|
38 | lcd_setP(0x56); //Setze P1
|
39 |
|
40 |
|
41 | //Clear data in first layer
|
42 | //Coursor auf Start
|
43 | lcd_setC(0x46); //CSRW
|
44 | lcd_setP(0x00); //Setze P1
|
45 | lcd_setP(0x00); //Setze P2
|
46 |
|
47 | //überschreibe alles mit ' '
|
48 | lcd_setC(0x42); //MWRITE
|
49 | for (int i = 0; i < 40 * 15; i++) lcd_setP(' ');
|
50 |
|
51 |
|
52 |
|
53 | //Clear data in second layer
|
54 | //Coursor auf Start
|
55 | lcd_setC(0x46); //CSRW
|
56 | lcd_setP(0x00); //Setze P1
|
57 | lcd_setP(0x10); //Setze P2
|
58 |
|
59 | //überschreibe alles mit ' '
|
60 | lcd_setC(0x42); //MWRITE
|
61 | for (int i = 0; i < 40 * 15; i++) lcd_setP(0x00);
|
62 |
|
63 |
|
64 | lcd_setC(0x59); //DISP ON
|
65 | lcd_setP(0x10); //Setze P1
|
66 |
|
67 | lcd_setC(0x5D); //CSR FORM
|
68 | lcd_setP(0x04); //Setze P1
|
69 | lcd_setP(0x86); //Setze P2
|
70 |
|
71 | lcd_setC(0x4C); //CSR DIR
|
72 |
|
73 | //Coursor auf Start
|
74 | lcd_setC(0x46); //CSRW
|
75 | lcd_setP(0x00); //Setze P1
|
76 | lcd_setP(0x00); //Setze P2
|
77 |
|
78 | lcd_setC(0x42); //MWRITE
|
79 | lcd_setP(' '); //Setze P1
|
80 | lcd_setP('M'); //Setze P2
|
81 | lcd_setP('i'); //Setze P3
|
82 | lcd_setP('c'); //Setze P4
|
83 | lcd_setP('h'); //Setze P5
|
84 | lcd_setP('i'); //Setze P6
|
85 | }
|
86 |
|
87 |
|
88 | void lcd_setC(char c){
|
89 |
|
90 | PORTD = (1<<LCD_A0) | (1<<LCD_RD) | (1<<LCD_RESET); //Setze C
|
91 | asm volatile ("nop");
|
92 | PORTB = c;
|
93 |
|
94 | for(int i = 0; i < 100; i++) asm volatile ("nop"); //pause
|
95 |
|
96 | }
|
97 |
|
98 |
|
99 | void lcd_setP(char p){
|
100 | PORTD = (1<<LCD_RD) | (1<<LCD_RESET); //P setzen
|
101 | asm volatile ("nop");
|
102 | PORTB = p;
|
103 |
|
104 | for(int i = 0; i < 100; i++) asm volatile ("nop"); //pause
|
105 | }
|
106 |
|
107 |
|
108 |
|
109 | void lcd_reset(){
|
110 |
|
111 | for(unsigned int i = 0; i < 53300; i++) asm volatile ("nop"); //3ms Warten
|
112 |
|
113 | PORTB = 0;
|
114 | PORTD = 0;
|
115 |
|
116 | for(int i = 0; i < 100; i++) asm volatile ("nop"); //pause
|
117 |
|
118 | PORTD = (1<<LCD_RESET);
|
119 |
|
120 | for(unsigned int i = 0; i < 53300; i++) asm volatile ("nop"); //3ms Warten
|
121 | }
|