1 | // ********************************************************************
|
2 | // Demoprogramm (Minimaltest)
|
3 | // Inhalt: LCD (DIP122-5 122x32 Pixel mit 2xSED1520 Controller) ansteuern
|
4 | // LCD-Controller: SED1520 S-MOS Sytems(2x) kompatibel
|
5 | // 1 (linke Displayhälfte E1)
|
6 | // 2 (rechte Displayhälfte E2)
|
7 | // ********************************************************************
|
8 |
|
9 | #include "at89c51ed2.h" // Register des AT89C51ED2
|
10 |
|
11 | // Hardware Definebereich
|
12 | #define LCD_ON P1_4
|
13 | #define LCD_E1 P3_5
|
14 | #define LCD_E2 P1_2
|
15 | #define LCD_A0 P3_7
|
16 | #define LCD_RW P3_6
|
17 | #define LCD_RES P1_0
|
18 | #define LCD_DATA P2
|
19 |
|
20 | // ********************************************************************
|
21 | // Verzögerungsschleife für kurze Zeit
|
22 | // Zeit: Wartezeit in [zeit]
|
23 | // 1 = 20us
|
24 | // 2 = 28us
|
25 | // 3 = 36us u.s.w. (gilt für 11.0952MHz)
|
26 | // 255 = ca. 2ms
|
27 | // ********************************************************************
|
28 | void delay_us(unsigned char zeit) {
|
29 | unsigned char zaehler;
|
30 | for ( zaehler = zeit; zaehler; zaehler-- ) {
|
31 | _asm nop; _endasm;
|
32 | }
|
33 | }
|
34 |
|
35 | // ********************************************************************
|
36 | // Verzögerungsschleife für lange Zeit
|
37 | // Zeit: Wartezeit in [zeit]
|
38 | // 1 = ca. 10ms
|
39 | // 2 = ca. 20ms
|
40 | // 3 = ca. 30ms u.s.w.
|
41 | // 255 = ca. 2,5s (gilt für 11.0952MHz)
|
42 | // ********************************************************************
|
43 | void delay(unsigned char zeit) {
|
44 | unsigned char zaehler;
|
45 | for (zaehler = zeit; zaehler; zaehler--) {
|
46 | delay_us(255); // dauert ca. 2ms
|
47 | delay_us(255); // dauert ca. 2ms
|
48 | delay_us(255); // dauert ca. 2ms
|
49 | delay_us(255); // dauert ca. 2ms
|
50 | delay_us(255); // dauert ca. 2ms
|
51 | }
|
52 | }
|
53 |
|
54 | // ***********************************************************************
|
55 | // Schreiben eines Zeichens (Steuerzeichen) das LCD-Modul
|
56 | // Übergabe: lcd_byte : Auszugebendes Steuerzeichen
|
57 | // lcd_teil : 0 - linke Displayhälfte
|
58 | // 1 - rechte Displayhälfte
|
59 | // ***********************************************************************
|
60 | void write_lcd_command(unsigned char lcd_byte, unsigned char lcd_teil) {
|
61 | unsigned char lcd_busy = 1;
|
62 | delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
|
63 | LCD_DATA = lcd_byte; // Byte ausgeben
|
64 | LCD_RW = 0;
|
65 | LCD_A0 = 0;
|
66 | if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
|
67 | delay_us(1); // Impulsverzögerung
|
68 | if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
|
69 | }
|
70 |
|
71 | // ***********************************************************************
|
72 | // Schreiben eines Zeichens (Daten) das LCD-Modul
|
73 | // Übergabe: lcd_byte : Auszugebendes Datenbyte
|
74 | // lcd_teil : 0 - linke Displayhälfte
|
75 | // 1 - rechte Displayhälfte
|
76 | // ***********************************************************************
|
77 | void write_lcd_data(unsigned char lcd_byte, unsigned char lcd_teil) {
|
78 | unsigned char lcd_busy = 1;
|
79 | delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
|
80 | LCD_DATA = lcd_byte; // Byte ausgeben
|
81 | LCD_RW = 0;
|
82 | LCD_A0 = 1;
|
83 | if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
|
84 | delay_us(1); // Impulsverzögerung
|
85 | if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
|
86 | }
|
87 |
|
88 | // ********************************************************************
|
89 | // Hauptprogramm
|
90 | // ********************************************************************
|
91 | void main (void) {
|
92 | delay(100); // Wartezeit nach POWER-ON bis VCC stabil ist ca. 100ms
|
93 | write_lcd_command(0xAF,0); // 1010 1111 (Display on linke Hälfte)
|
94 | write_lcd_command(0xAF,1); // 1010 1111 (Display on rechte Hälfte)
|
95 | write_lcd_data(0x55,0); // schreibt Schachbrettmuster auf DIP-122 oben rechts
|
96 | write_lcd_data(0xAA,0);
|
97 | write_lcd_data(0x55,0);
|
98 | write_lcd_data(0xAA,0);
|
99 | write_lcd_data(0x55,0);
|
100 | write_lcd_data(0xAA,0);
|
101 | write_lcd_data(0x55,0);
|
102 | write_lcd_data(0xAA,0);
|
103 | while(1);
|
104 | }
|