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 #include "sure_2416.h"
00041 #include "pic_serial.h"
00042
00043 void sure_2416_setup() {
00044
00045
00046
00047 make_output(sure_2416_cs1_port, sure_2416_cs1_pin);
00048 make_output(sure_2416_data_port, sure_2416_data_pin);
00049 make_output(sure_2416_wr_port, sure_2416_wr_pin);
00050 make_output(sure_2416_rd_port, sure_2416_rd_pin);
00051
00052 set_pin(sure_2416_wr_port, sure_2416_wr_pin);
00053 set_pin(sure_2416_rd_port, sure_2416_rd_pin);
00054 set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00055
00056 }
00057
00058 void sure_2416_init() {
00059
00060 sure_2416_send_command(SURE_2416_CMD_SYS_DISABLE);
00061 sure_2416_send_command(SURE_2416_CMD_PMOS_16_COMMON);
00062
00063 sure_2416_send_command(SURE_2416_CMD_CLK_MASTER_MODE);
00064 sure_2416_send_command(SURE_2416_CMD_SYS_ENABLE);
00065 sure_2416_send_command(SURE_2416_CMD_LEDS_ON);
00066 }
00067
00068 void sure_2416_send_command(uns8 command) {
00069
00070 uns8 count;
00071
00072 clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00073
00074
00075
00076 set_pin (sure_2416_data_port, sure_2416_data_pin);
00077
00078 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00079 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00080
00081
00082 clear_pin (sure_2416_data_port, sure_2416_data_pin);
00083
00084 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00085 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00086
00087
00088 clear_pin (sure_2416_data_port, sure_2416_data_pin);
00089
00090 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00091 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00092
00093
00094 for(count = 0 ; count < 8 ; count++) {
00095
00096 if (test_bit(command, 7)) {
00097 set_pin(sure_2416_data_port, sure_2416_data_pin);
00098 } else {
00099 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00100 }
00101
00102
00103 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00104 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00105
00106 command = command << 1;
00107 }
00108
00109
00110
00111 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00112 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00113
00114
00115
00116
00117
00118
00119
00120
00121 set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00122 }
00123
00124 void sure_2416_write(uns8 mem_addr, uns8 data) {
00125
00126 uns8 count;
00127
00128 clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00129
00130
00131
00132
00133 set_pin (sure_2416_data_port, sure_2416_data_pin);
00134
00135 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00136 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00137
00138
00139 clear_pin (sure_2416_data_port, sure_2416_data_pin);
00140
00141 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00142 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00143
00144
00145 set_pin (sure_2416_data_port, sure_2416_data_pin);
00146
00147 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00148 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00149
00150
00151 for(count = 0 ; count < 7 ; count++) {
00152 if (test_bit(mem_addr, 6)) {
00153 set_pin(sure_2416_data_port, sure_2416_data_pin);
00154 } else {
00155 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00156 }
00157
00158
00159
00160 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00161 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00162
00163 mem_addr = mem_addr << 1;
00164 }
00165
00166
00167 for(count = 0 ; count < 4 ; count++) {
00168 change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(data, 0));
00169
00170 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00171 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00172
00173 data = data >> 1;
00174 }
00175
00176
00177
00178
00179
00180 set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00181
00182
00183 }
00184
00185
00186
00187
00188 void sure_2416_set_brightness(uns8 brightness) {
00189
00190 sure_2416_send_command(0b10100000 | (brightness & 0b00001111));
00191 }
00192
00193 void sure_2416_set_pixel(uns8 x, uns8 y, uns8 colour) {
00194
00195 uns8 common, panel, led_in_panel, inverted_x, out, mem_addr, bit_in_mem_addr, count, data;
00196
00197
00198
00199
00200
00201 common = 15 - y;
00202
00203
00204
00205
00206
00207
00208
00209
00210 bit_in_mem_addr = common & 0b00000011;
00211
00212
00213 mem_addr = x * 4 + common / 4;
00214
00215
00216 clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00217
00218
00219
00220
00221 set_pin (sure_2416_data_port, sure_2416_data_pin);
00222
00223 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00224 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00225
00226
00227 clear_pin (sure_2416_data_port, sure_2416_data_pin);
00228
00229 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00230 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00231
00232
00233 set_pin (sure_2416_data_port, sure_2416_data_pin);
00234
00235 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00236 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00237
00238
00239 for(count = 0 ; count < 7 ; count++) {
00240 if (test_bit(mem_addr, 6)) {
00241 set_pin(sure_2416_data_port, sure_2416_data_pin);
00242 } else {
00243 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00244 }
00245
00246
00247
00248 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00249 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00250
00251
00252 mem_addr = mem_addr << 1;
00253 }
00254
00255
00256
00257
00258 make_input(sure_2416_data_port, sure_2416_data_pin);
00259
00260 for(count = 0 ; count < 4 ; count++) {
00261
00262 clear_pin(sure_2416_rd_port, sure_2416_rd_pin);
00263
00264 data = data >> 1;
00265 data.3 = test_pin(sure_2416_data_port, sure_2416_data_pin);
00266
00267 set_pin (sure_2416_rd_port, sure_2416_rd_pin);
00268
00269 }
00270
00271 make_output(sure_2416_data_port, sure_2416_data_pin);
00272
00273
00274 if (colour) {
00275 set_bit(data, bit_in_mem_addr);
00276 } else {
00277 clear_bit(data, bit_in_mem_addr);
00278 }
00279
00280
00281
00282
00283 for(count = 0 ; count < 4 ; count++) {
00284
00285 if (test_bit(data, 0)) {
00286 set_pin(sure_2416_data_port, sure_2416_data_pin);
00287 } else {
00288 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00289 }
00290
00291
00292 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00293 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00294
00295 data = data >> 1;
00296 }
00297
00298
00299
00300
00301
00302
00303 set_pin (sure_2416_cs1_port, sure_2416_cs1_pin);
00304
00305
00306 }
00307
00308 void sure_2416_fill(uns8 colour) {
00309 uns8 mem_address;
00310 uns8 fill;
00311
00312 if (colour) {
00313 fill = 0b00001111;
00314 } else {
00315 fill = 0b00000000;
00316 }
00317
00318 for(mem_address = 0 ; mem_address < 96 ; mem_address++) {
00319 sure_2416_write(mem_address, fill);
00320 }
00321 }
00322
00323 void sure_2416_fill2(uns8 colour) {
00324
00325 uns16 count;
00326 sure_2416_send_command(SURE_2416_CMD_LEDS_OFF);
00327 clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00328
00329
00330
00331
00332 set_pin (sure_2416_data_port, sure_2416_data_pin);
00333
00334 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00335 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00336
00337
00338 clear_pin (sure_2416_data_port, sure_2416_data_pin);
00339
00340 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00341 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00342
00343
00344 set_pin (sure_2416_data_port, sure_2416_data_pin);
00345
00346 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00347 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00348
00349
00350 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00351
00352
00353 for(count = 0 ; count < 7 ; count++) {
00354
00355
00356
00357 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00358 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00359
00360
00361 }
00362 if (colour) {
00363 set_pin(sure_2416_data_port, sure_2416_data_pin);
00364 } else {
00365 clear_pin(sure_2416_data_port, sure_2416_data_pin);
00366 }
00367
00368
00369 for(count = 0 ; count < 384 ; count++) {
00370
00371 clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00372 set_pin (sure_2416_wr_port, sure_2416_wr_pin);
00373
00374
00375 }
00376
00377
00378 set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00379 sure_2416_send_command(SURE_2416_CMD_LEDS_ON);
00380
00381
00382 }
00383