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
00041 #ifndef __draw_drv_ea_ldp6432_h
00042 #define __draw_drv_ea_ldp6432_h
00043
00044 #include "ea_ldp6432.h"
00045 #include "config.h"
00046 #include "draw\draw.h"
00047 #include "draw\draw_screen_buffer.h"
00048
00049 #define set_pins_r1_g1_r2_g2() \
00050 set_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin); \
00051 set_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin); \
00052 set_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin); \
00053 set_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin)
00054
00055 char buffer0[256];
00056 char buffer1[256];
00057 #if ea_ldp6432_displays == 2
00058 char buffer2[256];
00059 char buffer3[256];
00060 #endif
00061
00062 uns8 current_row =0;
00063
00064 uns8 bright_count = 0;
00065 uns8 bright_level = 3;
00066 uns8 buffer_position0 = 0;
00067 #if ea_ldp6432_displays == 2
00068 uns8 buffer_position1 = 0;
00069 #endif
00070
00071 #define MAX_BRIGHTNESS 3
00072
00073
00074 void drv_paint() {
00075 uns8 count;
00076
00077 count = 0;
00078
00079 do {
00080 buffer0[count] = draw_buffer0[count];
00081 buffer1[count] = draw_buffer1[count];
00082 #if ea_ldp6432_displays == 2
00083 buffer2[count] = draw_buffer2[count];
00084 buffer3[count] = draw_buffer3[count];
00085 #endif
00086 count++;
00087 } while (count !=0);
00088 }
00089
00090 void drv_set_display_brightness(uns8 brightness) {
00091 if (brightness < MAX_BRIGHTNESS) {
00092 bright_level = brightness;
00093 } else {
00094 bright_level = MAX_BRIGHTNESS;
00095 }
00096 }
00097
00098 void drv_refresh() {
00099
00100
00101 uns8 x;
00102 uns8 data_upper, data_lower;
00103
00104
00105 bright_count++;
00106
00107 if (bright_count > bright_level) {
00108
00109 set_pin(ea_ldp6432_en_port, ea_ldp6432_en_pin);
00110 }
00111
00112 if (bright_count == MAX_BRIGHTNESS) {
00113 bright_count = 255;
00114
00115
00116
00117 for (x = 0; x < 16; x++) {
00118 data_upper = buffer0[buffer_position0];
00119 data_lower = buffer1[buffer_position0];
00120
00121 set_pins_r1_g1_r2_g2();
00122
00123 if (data_upper.0) {
00124 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00125 }
00126 if (data_upper.1) {
00127 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00128 }
00129 if (data_lower.0) {
00130 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00131 }
00132 if (data_lower.1) {
00133 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00134 }
00135
00136 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00137 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00138
00139 set_pins_r1_g1_r2_g2();
00140
00141 if (data_upper.2) {
00142 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00143 }
00144 if (data_upper.3) {
00145 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00146 }
00147 if (data_lower.2) {
00148 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00149 }
00150 if (data_lower.3) {
00151 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00152 }
00153
00154 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00155 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00156
00157 set_pins_r1_g1_r2_g2();
00158
00159 if (data_upper.4) {
00160 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00161 }
00162 if (data_upper.5) {
00163 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00164 }
00165 if (data_lower.4) {
00166 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00167 }
00168 if (data_lower.5) {
00169 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00170 }
00171
00172 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00173 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00174
00175 set_pins_r1_g1_r2_g2();
00176
00177
00178 if (data_upper.6) {
00179 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00180 }
00181 if (data_upper.7) {
00182 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00183 }
00184 if (data_lower.6) {
00185 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00186 }
00187 if (data_lower.7) {
00188 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00189 }
00190
00191 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00192 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00193
00194 buffer_position0++;
00195 }
00196
00197 #if ea_ldp6432_displays == 2
00198 for (x = 0; x < 16; x++) {
00199 data_upper = buffer2[buffer_position1];
00200 data_lower = buffer3[buffer_position1];
00201
00202 set_pins_r1_g1_r2_g2();
00203
00204 if (data_upper.0) {
00205 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00206 }
00207 if (data_upper.1) {
00208 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00209 }
00210 if (data_lower.0) {
00211 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00212 }
00213 if (data_lower.1) {
00214 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00215 }
00216
00217 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00218 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00219
00220 set_pins_r1_g1_r2_g2();
00221
00222 if (data_upper.2) {
00223 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00224 }
00225 if (data_upper.3) {
00226 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00227 }
00228 if (data_lower.2) {
00229 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00230 }
00231 if (data_lower.3) {
00232 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00233 }
00234
00235 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00236 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00237
00238 set_pins_r1_g1_r2_g2();
00239
00240 if (data_upper.4) {
00241 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00242 }
00243 if (data_upper.5) {
00244 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00245 }
00246 if (data_lower.4) {
00247 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00248 }
00249 if (data_lower.5) {
00250 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00251 }
00252
00253 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00254 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00255
00256 set_pins_r1_g1_r2_g2();
00257
00258
00259 if (data_upper.6) {
00260 clear_pin(ea_ldp6432_r1_port, ea_ldp6432_r1_pin);
00261 }
00262 if (data_upper.7) {
00263 clear_pin(ea_ldp6432_g1_port, ea_ldp6432_g1_pin);
00264 }
00265 if (data_lower.6) {
00266 clear_pin(ea_ldp6432_r2_port, ea_ldp6432_r2_pin);
00267 }
00268 if (data_lower.7) {
00269 clear_pin(ea_ldp6432_g2_port, ea_ldp6432_g2_pin);
00270 }
00271
00272 clear_pin(ea_ldp6432_s_port, ea_ldp6432_s_pin);
00273 set_pin (ea_ldp6432_s_port, ea_ldp6432_s_pin);
00274
00275 buffer_position1++;
00276 }
00277
00278 #endif
00279
00280
00281 set_pin(ea_ldp6432_en_port, ea_ldp6432_en_pin);
00282
00283 clear_pin(ea_ldp6432_a_port, ea_ldp6432_a_pin);
00284 clear_pin(ea_ldp6432_b_port, ea_ldp6432_b_pin);
00285 clear_pin(ea_ldp6432_c_port, ea_ldp6432_c_pin);
00286 clear_pin(ea_ldp6432_d_port, ea_ldp6432_d_pin);
00287 if (current_row.0) { set_pin(ea_ldp6432_a_port, ea_ldp6432_a_pin); }
00288 if (current_row.1) { set_pin(ea_ldp6432_b_port, ea_ldp6432_b_pin); }
00289 if (current_row.2) { set_pin(ea_ldp6432_c_port, ea_ldp6432_c_pin); }
00290 if (current_row.3) { set_pin(ea_ldp6432_d_port, ea_ldp6432_d_pin); }
00291
00292
00293 set_pin(ea_ldp6432_l_port, ea_ldp6432_l_pin);
00294 clear_pin(ea_ldp6432_l_port, ea_ldp6432_l_pin);
00295
00296
00297 clear_pin(ea_ldp6432_en_port, ea_ldp6432_en_pin);
00298
00299 current_row++;
00300
00301 if (current_row == 16) {
00302 buffer_position0 = 0;
00303 #if ea_ldp6432_displays == 2
00304 buffer_position1 = 0;
00305 #endif
00306 current_row = 0;
00307 }
00308
00309 }
00310 }
00311
00312 void drv_print_buffer() {
00313 uns8 count;
00314
00315 count = 0;
00316 do {
00317 serial_print_int(buffer0[count]);
00318 serial_print_spc();
00319 count++;
00320 } while (count != 0);
00321 serial_print_nl();
00322
00323 }
00324
00325
00326
00327 uns8 drv_get_pixel(uns8 x, uns8 y) {
00328
00329 }
00330
00331 void drv_clear_screen() {
00332
00333 }
00334
00335 void drv_setup_io() {
00336 ea_ldp6432_setup_io();
00337 }
00338
00339 void drv_init() {
00340 ea_ldp6432_init();
00341 }
00342
00343 #endif