Ist zwar schon etwas älter hier aber egal..
Ich kenne mich zwar nicht mit deinem Chip aus aber versuch mal so:
1 | #include "sfr29.h"
|
2 | #include "main.h"
|
3 |
|
4 | void wait(void)
|
5 | {
|
6 | unsigned int i=0;
|
7 |
|
8 | for(i=0;i<=100;i++)
|
9 | {
|
10 | asm("nop");
|
11 | }
|
12 |
|
13 | }
|
14 |
|
15 | void lcd_enable(void)
|
16 | {
|
17 | p3_2 = 1; //Enable high
|
18 | wait();
|
19 | p3_2 = 0; //Enable low
|
20 | }
|
21 |
|
22 | void lcd_writecom(char com) //Routine für Instruction Befehle
|
23 | {
|
24 | p3_1=1; //RS high
|
25 | p3_3=0; //RW low
|
26 | wait();
|
27 | p0=com;
|
28 | wait();
|
29 | lcd_enable();
|
30 | }
|
31 |
|
32 | void lcd_writedat(unsigned char data) //Routine für Instruction Daten
|
33 | {
|
34 | p3_1=0; //RS low
|
35 | p3_3=0; //RW low
|
36 | wait();
|
37 | p0=data;
|
38 | wait();
|
39 | lcd_enable();
|
40 | }
|
41 |
|
42 | void lcd_init(void)
|
43 | {
|
44 | p3_0 = 0; //Reset low
|
45 | p3_2 = 0; //Enable low
|
46 | p3_1 = 0; //RS low
|
47 | wait();
|
48 | p3_0 = 1; //Reset high
|
49 |
|
50 | lcd_writecom(0x00); // mode con
|
51 | wait();
|
52 | lcd_writedat(0x3C); // display on
|
53 | wait();
|
54 |
|
55 | lcd_writecom(0x01); // character pitch
|
56 | wait();
|
57 | lcd_writedat(0x77); // 8x8 chars
|
58 | wait();
|
59 |
|
60 | lcd_writecom(0x02); // characters per line
|
61 | wait();
|
62 | lcd_writedat(19); // 20
|
63 | wait();
|
64 |
|
65 | lcd_writecom(0x03); // set duty
|
66 | wait();
|
67 | lcd_writedat(0x4F); // 1/80
|
68 | wait();
|
69 |
|
70 | lcd_writecom(0x04); // set cursor position
|
71 | wait();
|
72 | lcd_writedat(0x07); // Cp=8
|
73 | wait();
|
74 |
|
75 | lcd_writecom(0x08); // startadress low
|
76 | wait();
|
77 | lcd_writedat(0x00); // 0
|
78 | wait();
|
79 |
|
80 | lcd_writecom(0x09); // startadress high
|
81 | wait();
|
82 | lcd_writedat(0x00); // 0
|
83 | wait();
|
84 |
|
85 | lcd_writecom(0x0A); // startadress high
|
86 | wait();
|
87 | lcd_writedat(0x00); // 0
|
88 | wait();
|
89 |
|
90 | lcd_writecom(0x0B); // startadress high
|
91 | wait();
|
92 | lcd_writedat(0x00); // 0
|
93 | wait();
|
94 | }
|
95 |
|
96 | void lcd_writebyte(unsigned char byte)
|
97 | {
|
98 | lcd_writecom(0x0C);
|
99 | lcd_writedat(byte);
|
100 | }
|
101 |
|
102 | void lcd_setadress( unsigned char x, unsigned char y )
|
103 | {
|
104 | unsigned int adress;
|
105 | adress = y*20+x;
|
106 | lcd_writecom(0x0A); // writeadress low
|
107 | lcd_writedat(adress&255);
|
108 | lcd_writecom(0x0B); // writeadress high
|
109 | lcd_writedat(adress/256);
|
110 | }
|
111 |
|
112 | void lcd_clear( void )
|
113 | {
|
114 | unsigned int i;
|
115 | lcd_setadress( 0,0 );
|
116 | for (i=0; i<160/8*80; i++)
|
117 | lcd_writebyte( 0 );
|
118 |
|
119 | }
|
120 |
|
121 |
|
122 | void main(void)
|
123 | {
|
124 | //Port deklaration für GLCD
|
125 | prcr = 0x04;
|
126 | /* Set to 80 pin chip */
|
127 | pacr = 0x03;
|
128 |
|
129 | pd0=0xFF; //Data
|
130 | pd3_0=1; //Reset
|
131 | pd3_1=1; //RS
|
132 | pd3_2=1; //Enable
|
133 | pd3_3=1; //R/W
|
134 | pd3_4=1; //Chip Enable
|
135 |
|
136 |
|
137 | lcd_init();
|
138 | lcd_clear();
|
139 | lcd_setadress(0,0);
|
140 | lcd_writebyte(0x55);
|
141 |
|
142 | while(1)
|
143 | {
|
144 |
|
145 | }
|
146 | }
|
Und sicher, dass Ausgänge mit "1" aktiviert sind? Bei AVR ist es glaub
so.. Ich weiß nur, dass bei PICs "1" Eingang konfiguriert.
LG Nico