00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00043 #include "ea_ldp6416.h"
00044 #include "config.h"
00045 #include "draw\draw.h"
00046 #include "draw\draw_screen_buffer.h"
00047
00048 #define set_pins_r1_g1() \
00049 set_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); \
00050 set_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin);
00051
00052 uns8 current_row =0;
00053
00054 uns8 bright_count = 0;
00055 uns8 bright_level = 0;
00056 uns8 buffer_position = 0;
00057 #if ea_ldp6416_displays > 1
00058 uns8 buffer_position1 = 0;
00059 #endif
00060 uns8 current_buffer = 0;
00061
00062 char buffer0[256];
00063 #if ea_ldp6416_displays > 1
00064 char buffer1[256];
00065 #endif
00066 #if ea_ldp6416_displays > 2
00067 char buffer2[256];
00068 #endif
00069 #if ea_ldp6416_displays > 3
00070 char buffer3[256];
00071 #endif
00072
00073 void drv_paint() {
00074 uns8 count;
00075
00076 count = 0;
00077
00078 do {
00079 buffer0[count] = draw_buffer0[count];
00080 #if ea_ldp6416_displays > 1
00081 buffer1[count] = draw_buffer1[count];
00082 #endif;
00083 #if ea_ldp6416_displays > 2
00084 buffer2[count] = draw_buffer2[count];
00085 #endif
00086 #if ea_ldp6416_displays > 3
00087 buffer3[count] = draw_buffer3[count];
00088 #endif
00089 count++;
00090 } while (count !=0);
00091
00092 }
00093
00094 void drv_print_buffer() {
00095 uns8 count;
00096
00097 count = 0;
00098 do {
00099 serial_print_int(buffer0[count]);
00100 serial_print_spc();
00101 count++;
00102 } while (count != 0);
00103 serial_print_nl();
00104
00105 }
00106
00107
00108 void drv_set_display_brightness(uns8 brightness) {
00109 if (brightness < ea_ldp6416_max_brightness) {
00110 bright_level = brightness;
00111 } else {
00112 bright_level = ea_ldp6416_max_brightness;
00113 }
00114 }
00115
00116 void drv_refresh() {
00117
00118
00119 uns8 x;
00120 uns8 data;
00121
00122
00123 #if ea_ldp6416_max_brightness > 0
00124 bright_count++;
00125
00126 if (bright_count > bright_level) {
00127
00128 set_pin(ea_ldp6416_en_port, ea_ldp6416_en_pin);
00129 }
00130
00131 if (bright_count == ea_ldp6416_max_brightness) {
00132 bright_count = 255;
00133 #endif
00134
00135 for (x = 0; x < x_refresh; x++) {
00136 #if ea_ldp6416_displays == 1
00137 data = buffer0[buffer_position];
00138 #endif
00139
00140 #if ea_ldp6416_displays == 2 && ea_ldp6416_display_orientation == HORIZONTAL
00141 if (current_buffer == 0) {
00142 data = buffer0[buffer_position];
00143 } else {
00144 data = buffer1[buffer_position];
00145 }
00146 #endif
00147 #if ea_ldp6416_displays == 3 && ea_ldp6416_display_orientation == HORIZONTAL
00148 switch (current_buffer) {
00149 case 0: data = buffer0[buffer_position]; break;
00150 case 1: data = buffer1[buffer_position]; break;
00151 case 2: data = buffer2[buffer_position]; break;
00152 }
00153 #endif
00154 #if ea_ldp6416_displays == 4 && ea_ldp6416_display_orientation == HORIZONTAL
00155 switch (current_buffer) {
00156 case 0: data = buffer0[buffer_position]; break;
00157 case 1: data = buffer1[buffer_position]; break;
00158 case 2: data = buffer2[buffer_position]; break;
00159 case 3: data = buffer3[buffer_position]; break;
00160 }
00161 #endif
00162
00163 set_pins_r1_g1();
00164
00165 if (data.0) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00166 if (data.1) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00167
00168 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00169 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00170
00171 set_pins_r1_g1();
00172
00173 if (data.2) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00174 if (data.3) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00175
00176 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00177 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00178
00179 set_pins_r1_g1();
00180
00181 if (data.4) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00182 if (data.5) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00183
00184 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00185 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00186
00187 set_pins_r1_g1();
00188
00189 if (data.6) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00190 if (data.7) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00191
00192 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00193 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00194
00195 buffer_position++;
00196
00197 #if ea_ldp6416_displays > 1 && ea_ldp6416_display_orientation == HORIZONTAL
00198 if (buffer_position == 0) {
00199 current_buffer++;
00200 }
00201 #endif
00202 }
00203
00204 #if ea_ldp6416_displays == 2 && ea_ldp6416_display_orientation == VERTICAL
00205
00206 for (x = 0; x < x_refresh; x++) {
00207 data = buffer1[buffer_position1];
00208
00209 set_pins_r1_g1();
00210
00211 if (data_upper.0) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00212 if (data_upper.1) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00213
00214 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00215 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00216
00217 set_pins_r1_g1();
00218
00219 if (data_upper.2) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00220 if (data_upper.3) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00221
00222 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00223 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00224
00225 set_pins_r1_g1();
00226
00227 if (data_upper.4) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00228 if (data_upper.5) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00229
00230 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00231 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00232
00233 set_pins_r1_g1();
00234
00235 if (data_upper.6) { clear_pin(ea_ldp6416_r1_port, ea_ldp6416_r1_pin); }
00236 if (data_upper.7) { clear_pin(ea_ldp6416_g1_port, ea_ldp6416_g1_pin); }
00237
00238 clear_pin(ea_ldp6416_s_port, ea_ldp6416_s_pin);
00239 set_pin (ea_ldp6416_s_port, ea_ldp6416_s_pin);
00240
00241 buffer_position1++;
00242 }
00243
00244 #endif
00245
00246
00247 set_pin(ea_ldp6416_en_port, ea_ldp6416_en_pin);
00248
00249 clear_pin(ea_ldp6416_a_port, ea_ldp6416_a_pin);
00250 clear_pin(ea_ldp6416_b_port, ea_ldp6416_b_pin);
00251 clear_pin(ea_ldp6416_c_port, ea_ldp6416_c_pin);
00252 clear_pin(ea_ldp6416_d_port, ea_ldp6416_d_pin);
00253
00254 if (current_row.0) { set_pin(ea_ldp6416_a_port, ea_ldp6416_a_pin); }
00255 if (current_row.1) { set_pin(ea_ldp6416_b_port, ea_ldp6416_b_pin); }
00256 if (current_row.2) { set_pin(ea_ldp6416_c_port, ea_ldp6416_c_pin); }
00257 if (current_row.3) { set_pin(ea_ldp6416_d_port, ea_ldp6416_d_pin); }
00258
00259
00260 set_pin(ea_ldp6416_l_port, ea_ldp6416_l_pin);
00261 clear_pin(ea_ldp6416_l_port, ea_ldp6416_l_pin);
00262
00263
00264 clear_pin(ea_ldp6416_en_port, ea_ldp6416_en_pin);
00265
00266 current_row++;
00267 if (current_row == y_refresh) {
00268 current_buffer = 0;
00269 buffer_position = 0;
00270 current_row = 0;
00271 }
00272
00273 #if ea_ldp6416_max_brightness > 0
00274
00275 }
00276 #endif
00277
00278 }
00279 uns8 drv_get_pixel(uns8 x, uns8 y) {
00280
00281 }
00282
00283 void drv_setup_io() {
00284 ea_ldp6416_setup_io();
00285 }
00286
00287 void drv_init() {
00288 ea_ldp6416_init();
00289 }