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
00040 #ifndef __draw_drv_ea_ldp8008_h
00041 #define __draw_drv_ea_ldp8008_h
00042
00043 #include "ea_ldp8008.h"
00044 #include "config.h"
00045 #include "draw\draw.h"
00046 #include "draw\draw_screen_buffer.h"
00047
00048 #define set_pins_r_g() \
00049 set_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin); \
00050 set_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00051
00052 uns8 current_row =0;
00053
00054 uns8 bright_count = 0;
00055 uns8 bright_level = 3;
00056 uns8 buffer_position0 = 0;
00057 #define MAX_BRIGHTNESS 3
00058
00059
00060
00061 char buffer0[256];
00062 #if ea_ldp8008_displays > 1
00063 char buffer1[256];
00064 #endif
00065 #if ea_ldp8008_displays > 2
00066 char buffer2[256];
00067 #endif
00068 #if ea_ldp8008_displays > 3
00069 char buffer3[256];
00070 #endif
00071
00072 void drv_paint() {
00073 uns8 count;
00074 start_crit_sec();
00075 count = 0;
00076
00077 do {
00078 buffer0[count] = draw_buffer0[count];
00079 #if ea_ldp8008_displays == 2
00080 buffer1[count] = draw_buffer1[count];
00081 #endif;
00082 #if ea_ldp8008_displays == 3
00083 buffer2[count] = draw_buffer2[count];
00084 #endif
00085 #if ea_ldp8008_displays == 4
00086 buffer3[count] = draw_buffer3[count];
00087 #endif
00088 count++;
00089 } while (count !=160);
00090 end_crit_sec();
00091 }
00092
00093 void drv_print_buffer() {
00094 uns8 count;
00095
00096 count = 0;
00097 do {
00098 serial_print_int(buffer0[count]);
00099 serial_print_spc();
00100 count++;
00101 } while (count != 0);
00102 serial_print_nl();
00103
00104 }
00105
00106
00107 void drv_set_display_brightness(uns8 brightness) {
00108 if (brightness < MAX_BRIGHTNESS) {
00109 bright_level = brightness;
00110 } else {
00111 bright_level = MAX_BRIGHTNESS;
00112 }
00113 }
00114
00115 void drv_refresh() {
00116
00117
00118 uns8 x;
00119 uns8 data;
00120
00121 bright_count++;
00122
00123 if (bright_count > bright_level) {
00124
00125 clear_pin(ea_ldp8008_en_port, ea_ldp8008_en_pin);
00126 }
00127
00128
00129
00130 if (bright_count == MAX_BRIGHTNESS) {
00131 bright_count = 255;
00132
00133
00134
00135
00136
00137 #if ea_ldp8008_displays == 2
00138 #warning "This doesn't work!!"
00139
00140
00141
00142
00143 #endif
00144
00145 for (x = 0; x < 20; x++) {
00146 data = buffer0[buffer_position0];
00147
00148 set_pins_r_g();
00149
00150 if (data.0) {
00151 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00152 }
00153 if (data.1) {
00154 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00155 }
00156
00157 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00158 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00159
00160 set_pins_r_g();
00161
00162 if (data.2) {
00163 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00164 }
00165 if (data.3) {
00166 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00167 }
00168
00169 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00170 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00171
00172 set_pins_r_g();
00173
00174 if (data.4) {
00175 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00176 }
00177 if (data.5) {
00178 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00179 }
00180
00181 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00182 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00183
00184 set_pins_r_g();
00185
00186
00187 if (data.6) {
00188 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00189 }
00190 if (data.7) {
00191 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00192 }
00193
00194 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00195 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00196
00197 buffer_position0++;
00198 }
00199
00200 #if ea_ldp8008_displays == 2
00201 #warning "need to work on this"
00202 for (x = 0; x < 16; x++) {
00203 data_upper = buffer2[count_byte_disp2];
00204 data_lower = buffer3[count_byte_disp2];
00205
00206 set_pins_r_g();
00207
00208 if (data_upper.0) {
00209 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00210 }
00211 if (data_upper.1) {
00212 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00213 }
00214
00215 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00216 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00217
00218 set_pins_r_g();
00219
00220 if (data_upper.2) {
00221 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00222 }
00223 if (data_upper.3) {
00224 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00225 }
00226
00227 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00228 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00229
00230 set_pins_r_g();
00231
00232 if (data_upper.4) {
00233 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00234 }
00235 if (data_upper.5) {
00236 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00237 }
00238
00239 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00240 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00241
00242 set_pins_r_g();
00243
00244
00245 if (data_upper.6) {
00246 clear_pin(ea_ldp8008_r_port, ea_ldp8008_r_pin);
00247 }
00248 if (data_upper.7) {
00249 clear_pin(ea_ldp8008_g_port, ea_ldp8008_g_pin);
00250 }
00251
00252 clear_pin(ea_ldp8008_s_port, ea_ldp8008_s_pin);
00253 set_pin (ea_ldp8008_s_port, ea_ldp8008_s_pin);
00254
00255 count_byte_disp2++;
00256 }
00257
00258 #endif
00259
00260
00261 clear_pin(ea_ldp8008_en_port, ea_ldp8008_en_pin);
00262
00263 clear_pin(ea_ldp8008_a_port, ea_ldp8008_a_pin);
00264 clear_pin(ea_ldp8008_b_port, ea_ldp8008_b_pin);
00265 clear_pin(ea_ldp8008_c_port, ea_ldp8008_c_pin);
00266 if (current_row.0) {
00267 set_pin(ea_ldp8008_a_port, ea_ldp8008_a_pin);
00268 }
00269 if (current_row.1) {
00270 set_pin(ea_ldp8008_b_port, ea_ldp8008_b_pin);
00271 }
00272 if (current_row.2) {
00273 set_pin(ea_ldp8008_c_port, ea_ldp8008_c_pin);
00274 }
00275
00276 set_pin(ea_ldp8008_l_port, ea_ldp8008_l_pin);
00277 clear_pin(ea_ldp8008_l_port, ea_ldp8008_l_pin);
00278
00279
00280 set_pin(ea_ldp8008_en_port, ea_ldp8008_en_pin);
00281
00282 current_row++;
00283 if (current_row == 8) {
00284 buffer_position0 = 0;
00285 current_row = 0;
00286 }
00287 }
00288
00289 }
00290 uns8 drv_get_pixel(uns8 x, uns8 y) {
00291
00292 }
00293
00294 void drv_setup_io() {
00295 ea_ldp8008_setup_io();
00296 }
00297
00298 void drv_init() {
00299 ea_ldp8008_init();
00300 }
00301
00302 #endif