00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <avr/io.h>
00013 #include "rprintf.h"
00014 #include <math.h>
00015 #include <avr/interrupt.h>
00016
00017 #define FOSC 16000000// Clock Speed
00018 #define BAUD 57600
00019 #define MYUBRR FOSC/16/BAUD-1
00020
00021 #define WR 0 //PC0
00022 #define RD 1 //PC1
00023 #define CE 2 //PC2
00024 #define CD 3 //PC3
00025 #define HALT 4 //PC4
00026 #define RST 5 //PC5
00027
00028 #define BL_EN 2 //PB2
00029
00030 #define X_ENDPOINT 159
00031 #define Y_ENDPOINT 127
00032
00033
00034
00035
00036 void ioinit(void);
00037 void delay_ms(uint16_t x);
00038 void delay(void);
00039 void delay_us(uint8_t x);
00040 void USART_Init( unsigned int ubrr);
00041 void put_char(char byte);
00042 int rnd(float number);
00043
00044 void set_data(char data);
00045 char read(char D_S);
00046 void write(char D_C, char byte);
00047 void display_init(void);
00048
00049
00050 void clear_screen(void);
00051
00052 void print_char(char S_R, char txt);
00053 void del_char(char endpoint);
00054 void pixel(char S_R, char x, char y);
00055 void line(char S_R, char x1, char y1, char x2, char y2);
00056 void circle(char S_R, int x, int y, int r);
00057 void demo(void);
00058
00059 void erase_block(char x1, char y1, char x2, char y2);
00060 void box(char x1, char y1, char x2, char y2);
00061
00062
00063 char x_offset = 0;
00064 char y_offset = 127;
00065
00066 unsigned char RX_array[256];
00067 volatile unsigned short RX_in = 0;
00068 unsigned short RX_read = 0;
00069
00070 static char logo[30] = {0x01,0xC0,0x03,0x80,0x03,0x80,0x01,0xD0,
00071 0x01,0xF8,0x0C,0xF8,0x18,0xF8,0x1F,0xF8,
00072 0x1F,0xF8,0x1F,0xF0,0x1F,0xE0,0x1F,0xC0,
00073 0x1C,0x00,0x18,0x00,0x10,0x00};
00074
00075
00076 static char text_array[475] = {0x00,0x00,0x00,0x00,0x00,
00077 0x00,0xF6,0xF6,0x00,0x00,
00078 0x00,0xE0,0x00,0xE0,0x00,
00079 0x28,0xFE,0x28,0xFE,0x28,
00080 0x00,0x64,0xD6,0x54,0x08,
00081 0xC2,0xCC,0x10,0x26,0xC6,
00082 0x4C,0xB2,0x92,0x6C,0x0A,
00083 0x00,0x00,0xE0,0x00,0x00,
00084 0x00,0x38,0x44,0x82,0x00,
00085 0x00,0x82,0x44,0x38,0x00,
00086 0x88,0x50,0xF8,0x50,0x88,
00087 0x08,0x08,0x3E,0x08,0x08,
00088 0x00,0x00,0x05,0x06,0x00,
00089 0x08,0x08,0x08,0x08,0x08,
00090 0x00,0x00,0x06,0x06,0x00,
00091 0x02,0x0C,0x10,0x60,0x80,
00092
00093 0x00,0x42,0xFE,0x02,0x00,
00094 0x42,0x86,0x8A,0x92,0x62,
00095 0x44,0x82,0x92,0x92,0x6C,
00096 0x10,0x30,0x50,0xFE,0x10,
00097 0xE4,0xA2,0xA2,0xA2,0x9C,
00098 0x3C,0x52,0x92,0x92,0x0C,
00099 0x80,0x86,0x98,0xE0,0x80,
00100 0x6C,0x92,0x92,0x92,0x6C,
00101 0x60,0x92,0x92,0x94,0x78,
00102 0x00,0x00,0x36,0x36,0x00,
00103 0x00,0x00,0x35,0x36,0x00,
00104 0x10,0x28,0x44,0x82,0x00,
00105 0x28,0x28,0x28,0x28,0x28,
00106 0x00,0x82,0x44,0x28,0x10,
00107 0x40,0x80,0x8A,0x90,0x60,
00108 0x7C,0x82,0xBA,0xBA,0x62,
00109 0x3E,0x48,0x88,0x48,0x3E,
00110 0xFE,0x92,0x92,0x92,0x6C,
00111 0x7C,0x82,0x82,0x82,0x44,
00112 0xFE,0x82,0x82,0x82,0x7C,
00113 0xFE,0x92,0x92,0x92,0x82,
00114 0xFE,0x90,0x90,0x90,0x80,
00115 0x7C,0x82,0x82,0x8A,0x4E,
00116 0xFE,0x10,0x10,0x10,0xFE,
00117 0x82,0x82,0xFE,0x82,0x82,
00118 0x84,0x82,0xFC,0x80,0x80,
00119 0xFE,0x10,0x28,0x44,0x82,
00120 0xFE,0x02,0x02,0x02,0x02,
00121 0xFE,0x40,0x20,0x40,0xFE,
00122 0xFE,0x60,0x10,0x0C,0xFE,
00123 0x7C,0x82,0x82,0x82,0x7C,
00124 0xFE,0x90,0x90,0x90,0x60,
00125 0x7C,0x82,0x82,0x86,0x7E,
00126 0xFE,0x90,0x98,0x94,0x62,
00127 0x64,0x92,0x92,0x92,0x4C,
00128 0x80,0x80,0xFE,0x80,0x80,
00129 0xFC,0x02,0x02,0x02,0xFC,
00130 0xF8,0x04,0x02,0x04,0xF8,
00131 0xFC,0x02,0x0C,0x02,0xFC,
00132 0xC6,0x28,0x10,0x28,0xC6,
00133 0xC0,0x20,0x1E,0x20,0xC0,
00134 0x86,0x8A,0x92,0xA2,0xC2,
00135 0x00,0x00,0xFE,0x82,0x00,
00136 0x80,0x60,0x10,0x0C,0x02,
00137 0x80,0x60,0x10,0x0C,0x02,
00138 0x20,0x40,0x80,0x40,0x20,
00139 0x01,0x01,0x01,0x01,0x01,
00140 0x80,0x40,0x20,0x00,0x00,
00141 0x04,0x2A,0x2A,0x2A,0x1E,
00142 0xFE,0x12,0x22,0x22,0x1C,
00143 0x1C,0x22,0x22,0x22,0x14,
00144 0x1C,0x22,0x22,0x12,0xFE,
00145 0x1C,0x2A,0x2A,0x2A,0x18,
00146 0x10,0x7E,0x90,0x80,0x40,
00147 0x18,0x25,0x25,0x25,0x1E,
00148 0xFE,0x10,0x10,0x10,0x0E,
00149 0x00,0x12,0x5E,0x02,0x00,
00150 0x02,0x01,0x01,0x11,0x5E,
00151 0xFE,0x08,0x08,0x14,0x22,
00152 0x00,0x82,0xFE,0x02,0x00,
00153 0x3E,0x20,0x1C,0x20,0x1E,
00154 0x3E,0x20,0x20,0x20,0x1E,
00155 0x1C,0x22,0x22,0x22,0x1C,
00156 0x3F,0x24,0x24,0x24,0x18,
00157 0x18,0x24,0x24,0x3F,0x01,
00158 0x3E,0x10,0x20,0x20,0x10,
00159 0x12,0x2A,0x2A,0x2A,0x04,
00160 0x00,0x10,0x3C,0x12,0x04,
00161 0x3C,0x02,0x02,0x02,0x3E,
00162 0x30,0x0C,0x02,0x0C,0x30,
00163 0x38,0x06,0x18,0x06,0x38,
00164 0x22,0x14,0x08,0x14,0x22,
00165 0x38,0x05,0x05,0x05,0x3E,
00166 0x22,0x26,0x2A,0x32,0x22,
00167 0x00,0x10,0x6C,0x82,0x82,
00168
00169 0x04,0x02,0xFF,0x02,0x04,
00170 0x82,0x82,0x6C,0x10,0x00,
00171 0x08,0x10,0x18,0x08,0x10};
00172
00173
00174
00175 ISR (SIG_USART_RECV)
00176 {
00177 cli();
00178 RX_array[RX_in] = UDR0;
00179
00180 RX_in++;
00181
00182 if (RX_in >= 256) RX_in = 0;
00183
00184 sei();
00185
00186 }
00187
00188
00189 int main (void)
00190 {
00191 char x, y, a;
00192
00193 ioinit();
00194 USART_Init( MYUBRR);
00195 rprintf_devopen(put_char);
00196
00197
00198 delay_ms(1);
00199 PORTC |= (1<<RST);
00200
00201
00202 display_init();
00203
00204 clear_screen();
00205
00206
00207 PORTB &= (~(1<<BL_EN));
00208
00209 while(1)
00210 {
00211 if(RX_in != RX_read)
00212 {
00213 x = RX_array[RX_read];
00214 RX_read++;
00215 if(RX_read >= 256) RX_read = 0;
00216
00217
00218 if(x == 8) del_char(0);
00219
00220
00221 else if (x == 124)
00222 {
00223
00224 while(RX_in == RX_read);
00225
00226
00227 if(RX_array[RX_read] == 0)
00228 {
00229 clear_screen();
00230 RX_read++;
00231 if(RX_read >= 256) RX_read = 0;
00232 }
00233
00234
00235
00236 else if(RX_array[RX_read] == 2)
00237 {
00238 y = PINB;
00239 if (y & (1<<BL_EN)) PORTB &= (~(1<<BL_EN));
00240 else PORTB |= (1<<BL_EN);
00241 RX_read++;
00242 }
00243
00244
00245 else if(RX_array[RX_read] == 4)
00246 {
00247 RX_in = 0, RX_read = 0;
00248 demo();
00249 clear_screen();
00250 RX_in = 0;
00251 }
00252
00253 else
00254 {
00255
00256 if((RX_array[RX_read] == 24) | (RX_array[RX_read] == 25))
00257 {
00258 RX_read++;
00259 if(RX_read >= 256) RX_read = 0;
00260 while(RX_in == RX_read);
00261 if (RX_array[RX_read-1] == 24) x_offset = RX_array[RX_read];
00262 else if (RX_array[RX_read-1] == 25) y_offset = RX_array[RX_read];
00263
00264 RX_read++;
00265 if(RX_read >= 256) RX_read = 0;
00266
00267 if (x_offset > 159) x_offset = 159;
00268 if (y_offset > 127) y_offset = 127;
00269
00270 }
00271
00272
00273 if (RX_array[RX_read] == 16)
00274 {
00275
00276 for (y = 0; y < 3; y++)
00277 {
00278 RX_read++;
00279 if(RX_read >= 256) RX_read = 0;
00280 while(RX_in == RX_read);
00281 }
00282
00283 pixel(RX_array[RX_read], RX_array[RX_read-2], RX_array[RX_read-1]);
00284
00285 RX_read++;
00286 if(RX_read >= 256) RX_read = 0;
00287
00288 }
00289
00290
00291 if(RX_array[RX_read] == 3)
00292 {
00293
00294 for (y = 0; y < 4; y++)
00295 {
00296 RX_read++;
00297 if(RX_read >= 256) RX_read = 0;
00298 while(RX_in == RX_read);
00299 }
00300
00301 circle(RX_array[RX_read], RX_array[RX_read-3], RX_array[RX_read-2], RX_array[RX_read-1]);
00302
00303 RX_read++;
00304 if(RX_read >= 256) RX_read = 0;
00305 }
00306
00307
00308
00309 if(RX_array[RX_read] == 5)
00310 {
00311
00312 for (y = 0; y < 4; y++)
00313 {
00314 RX_read++;
00315 if(RX_read >= 256) RX_read = 0;
00316 while(RX_in == RX_read);
00317 }
00318
00319 erase_block(RX_array[RX_read-3], RX_array[RX_read-2], RX_array[RX_read-1], RX_array[RX_read]);
00320
00321 RX_read++;
00322 if(RX_read >= 256) RX_read = 0;
00323 }
00324
00325
00326
00327 if(RX_array[RX_read] == 15)
00328 {
00329
00330 for (y = 0; y < 4; y++)
00331 {
00332 RX_read++;
00333 if(RX_read >= 256) RX_read = 0;
00334 while(RX_in == RX_read);
00335 }
00336
00337 box(RX_array[RX_read-3], RX_array[RX_read-2], RX_array[RX_read-1], RX_array[RX_read]);
00338
00339 RX_read++;
00340 if(RX_read >= 256) RX_read = 0;
00341 }
00342
00343
00344
00345 else if (RX_array[RX_read] == 12)
00346 {
00347
00348 for (y = 0; y < 5; y++)
00349 {
00350 RX_read++;
00351 if(RX_read >= 256) RX_read = 0;
00352 while(RX_in == RX_read);
00353 }
00354
00355 line(RX_array[RX_read], RX_array[RX_read-4], RX_array[RX_read-3], RX_array[RX_read-2], RX_array[RX_read+-1]);
00356 RX_read++;
00357 if(RX_read >= 256) RX_read = 0;
00358 }
00359
00360
00361 }
00362
00363 }
00364
00365
00366 else
00367 {
00368 del_char(1);
00369 print_char(1, x);
00370 }
00371 }
00372
00373 }
00374
00375
00376
00377 }
00378
00379 void ioinit (void)
00380 {
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393 PORTB |= (1<<BL_EN);
00394 DDRB |= (1<<BL_EN);
00395
00396 PORTC = ((1<<WR) | (1<<RD) | (1<<CE) | (1<<CD) | (1<<HALT));
00397 PORTC &= (~(1<<RST));
00398 DDRC = ((1<<WR) | (1<<RD) | (1<<CE) | (1<<CD) | (1<<HALT) | (1<<RST));
00399
00400
00401 TCCR2B = (1<<CS21);
00402
00403
00404 }
00405
00406
00407 void delay_ms(uint16_t x)
00408 {
00409 for (; x > 0 ; x--)
00410 {
00411 delay_us(250);
00412 delay_us(250);
00413 delay_us(250);
00414 delay_us(250);
00415 }
00416
00417 }
00418
00419
00420 void delay_us(uint8_t x)
00421 {
00422 char temp;
00423
00424 if (x == 0) temp = 1;
00425 else temp = x;
00426
00427 TIFR2 |= 0x01;
00428
00429 TCNT2 = 256 - temp;
00430
00431 while(!(TIFR2 & 0x01));
00432
00433 if (x == 0) return;
00434
00435
00436 TIFR2 |= 0x01;
00437
00438 TCNT2 = 256 - temp;
00439
00440 while(!(TIFR2 & 0x01));
00441
00442 }
00443
00444 void USART_Init( unsigned int ubrr)
00445 {
00446
00447 UBRR0H = (unsigned char)(ubrr>>8);
00448 UBRR0L = (unsigned char)ubrr;
00449
00450
00451 UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
00452
00453 UCSR0C = (1<<UCSZ00)|(1<<UCSZ01);
00454 sei();
00455 }
00456
00457 void put_char(char byte)
00458 {
00459
00460 while ( !( UCSR0A & (1<<UDRE0)) );
00461
00462 UDR0 = byte;
00463 }
00464
00465
00466 void delay(void)
00467 {
00468 char y;
00469
00470 for(y = 0; y < 20; y++)
00471 {
00472 asm volatile ("nop");
00473
00474 }
00475
00476 }
00477
00478
00479 void set_data(char data)
00480 {
00481
00482
00483
00484
00485 PORTB &= 0xFC;
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495 PORTD &= 0x03;
00496
00497 PORTB |= (data & 0x03);
00498 PORTD |= (data & 0xFC);
00499
00500 }
00501
00502
00503
00504
00505
00506 char read(char D_S)
00507 {
00508 char data1 = 0, data2 = 0;
00509
00510 DDRB &= 0xFC;
00511 DDRD &= 0x02;
00512
00513 PORTC &= ~((1 << RD) | (1 << CE));
00514 if (D_S == 1) PORTC &= ~(1 << CD);
00515
00516 delay_us(0);
00517
00518 data1 = PINB;
00519 data1 &= 0x03;
00520
00521 data2 = PIND;
00522 data2 &= 0xFC;
00523
00524 data1 |= data2;
00525
00526 PORTC |= ((1 << CD) | (1 << RD) | (1 << CE));
00527
00528 delay_us(0);
00529
00530 return data1;
00531
00532 }
00533
00534
00535
00536 void write(char D_C, char byte)
00537 {
00538 DDRB |= 0x03;
00539 DDRD |= 0xFC;
00540
00541 set_data(byte);
00542
00543 if (D_C == 1) PORTC &= ~((1 << WR) | (1 << CE) | (1 << CD));
00544 else PORTC &= ~((1 << WR) | (1 << CE));
00545
00546 delay_us(0);
00547 PORTC |= ((1 << CD) | (1 << WR) | (1 << CE));
00548 delay();
00549 DDRB &= 0xFC;
00550 DDRD &= 0x02;
00551
00552 delay_us(0);
00553
00554 }
00555
00556
00557
00558 void display_init(void)
00559 {
00560
00561 while(!(read(0) & 3));
00562 write(1, 0);
00563 while(!(read(0) & 3));
00564 write(1, 0);
00565 while(!(read(0) & 3));
00566 write(0, 0x42);
00567
00568
00569 while(!(read(0) & 3));
00570 write(1, 20);
00571 while(!(read(0) & 3));
00572 write(1, 0);
00573 while(!(read(0) & 3));
00574 write(0, 0x43);
00575
00576
00577 while(!(read(0) & 3));
00578 write(0, 0x80);
00579
00580
00581 while(!(read(0) & 3));
00582 write(0, 0x98);
00583
00584 }
00585
00586
00587
00588
00589
00590 void clear_screen(void)
00591 {
00592 int x;
00593
00594
00595 while(!(read(0) & 3));
00596 write(1, 0);
00597 while(!(read(0) & 3));
00598 write(1, 0);
00599 while(!(read(0) & 3));
00600 write(0, 0x24);
00601
00602 for(x = 0; x < 0xA00; x++)
00603 {
00604 while(!(read(0) & 3));
00605 write(1, 0);
00606 while(!(read(0) & 3));
00607 write(0, 0xC0);
00608 }
00609
00610 x_offset = 0;
00611 y_offset = 127;
00612 }
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628 void pixel(char S_R, char x, char y)
00629 {
00630 short address = 0;
00631 char byte = 0;
00632
00633
00634 if (x > 159) return;
00635 if (y > 127) return;
00636
00637 address = ((127-y) * 20) + (x / 8);
00638
00639
00640 while(!(read(0) & 3));
00641 byte = (char)(address & 0xFF);
00642
00643 write(1, byte);
00644
00645 while(!(read(0) & 3));
00646 byte = (char)((address & 0xFF00) >> 8);
00647
00648 write(1, byte);
00649
00650 while(!(read(0) & 3));
00651 write(0, 0x24);
00652
00653 byte = ~(x % 8);
00654
00655 byte |= 0xF8;
00656 if (S_R == 0) byte &= 0xF7;
00657
00658
00659 while(!(read(0) & 3));
00660 write(0, byte);
00661
00662 }
00663
00664
00665
00666 void line(char S_R, char x1, char y1, char x2, char y2)
00667 {
00668 float m, q;
00669 int x_dif, y_dif;
00670 int a, b, c;
00671
00672 if ((x1 > X_ENDPOINT) | (x2 > X_ENDPOINT)) return;
00673
00674 if ((y1 > Y_ENDPOINT) | (y2 > Y_ENDPOINT)) return;
00675
00676
00677 x_dif = x2 - x1;
00678 y_dif = y2 - y1;
00679 if (y_dif < 0) y_dif *= (-1);
00680
00681
00682 m = (float)(y2 - y1) / (float)(x2 - x1);
00683
00684 b = y1-(m*x1);
00685
00686 if(x_dif >= y_dif)
00687 {
00688 for (a = x1; a <= x2; a++)
00689 {
00690 pixel(S_R, (char)a, (char)((m*a)+b));
00691
00692 }
00693 }
00694
00695 else
00696 {
00697 if (y2 > y1)
00698 {
00699 for (a = y1; a <= y2; a++)
00700 {
00701 if (x_dif == 0) c = x1;
00702 else
00703 {
00704 q = (((float)(a-b))/m);
00705 c = rnd(q);
00706 }
00707
00708 pixel(S_R, (char)c, (char)a);
00709
00710 }
00711 }
00712
00713 else if (y1 > y2)
00714 {
00715 for (a = y1; a >= y2; a--)
00716 {
00717 if (x_dif == 0) c = x1;
00718 else
00719 {
00720 q = (((float)(a-b))/m);
00721 c = rnd(q);
00722 }
00723
00724 pixel(S_R, (char)c, (char)a);
00725
00726 }
00727 }
00728 }
00729
00730 }
00731
00732
00733
00734 void circle(char S_R, int x, int y, int r)
00735 {
00736 int x1 = 0, x2 = 0;
00737 int x_line = 0, y_line = 0;
00738 int temp_y;
00739 int temp_x;
00740
00741
00742 x1 = x - r;
00743 x2 = x + r;
00744
00745 for (temp_x = x1; temp_x <= x2; temp_x++)
00746 {
00747 temp_y = ((sqrt((r*r) - ((temp_x - x)*(temp_x - x)))) - y);
00748
00749 temp_y *= (-1);
00750
00751 if (temp_x > x1)
00752 {
00753 line(S_R, (char)x_line, (char)y_line, (char)temp_x, (char)temp_y);
00754 line(S_R, (char)x_line, (char)(2*y - y_line), (char)temp_x, (char)(2*y - temp_y));
00755 }
00756
00757 else
00758 {
00759 pixel(S_R, (char)temp_x, (char)temp_y);
00760 pixel(S_R, (char)temp_x, (char)(y + y - temp_y));
00761 }
00762
00763 x_line = temp_x;
00764 y_line = temp_y;
00765
00766
00767
00768
00769 }
00770
00771
00772 }
00773
00774
00775 int rnd(float number)
00776 {
00777 int a;
00778 float b;
00779
00780 a = number / 1;
00781 b = number - a;
00782
00783 if (b >= 0.5) a++;
00784
00785 return a;
00786
00787 }
00788
00789
00790 void print_char(char S_R, char txt)
00791 {
00792 short text_array_offset = (txt - 32)*5, j;
00793 char x, k;
00794
00795
00796 for (j = text_array_offset; j < text_array_offset+5; j++)
00797 {
00798
00799
00800 k = text_array[j];
00801
00802 for (x = 0; x < 8; x++)
00803 {
00804 if(k & 0x80) pixel(S_R, x_offset, y_offset - x);
00805 k <<= 1;
00806 }
00807
00808
00809
00810
00811 x_offset++;
00812
00813 }
00814
00815 x_offset++;
00816
00817 if ((x_offset + 6) > 159)
00818 {
00819 x_offset = 0;
00820 if (y_offset <= 7) y_offset = 127;
00821 else y_offset -= 8;
00822
00823 }
00824
00825 }
00826
00827
00828 void demo(void)
00829 {
00830 char x, y, temp;
00831 int q = 0;
00832
00833 while(1)
00834 {
00835 x_offset = 0;
00836 y_offset = 127;
00837
00838 for (y = 0; y < 5; y++)
00839 {
00840 for (x = 32; x < 123; x++)
00841 {
00842 del_char(1);
00843 print_char(1, x);
00844 if (RX_in > 0) return;
00845 }
00846 }
00847
00848 clear_screen();
00849
00850 for (y = 0; y < 5; y++)
00851 {
00852 for (x = 32; x < 123; x++)
00853 {
00854
00855 y_offset -= 6;
00856 if (y_offset <= 8) y_offset = 127;
00857 del_char(1);
00858 print_char(1, x);
00859 if (RX_in > 0) return;
00860 }
00861 }
00862
00863 clear_screen();
00864
00865
00866 for (x = 5; x < 120; x += 5)
00867 {
00868 circle(1,80,64,x);
00869 if (RX_in > 0) return;
00870 }
00871
00872
00873
00874 y = Y_ENDPOINT;
00875
00876 for (x = 0; x < X_ENDPOINT; x += 20)
00877 {
00878 line(1,0,y,x,0);
00879 y -= 16;
00880 }
00881
00882 y = 0;
00883
00884 for (x = 0; x < X_ENDPOINT; x += 20)
00885 {
00886 line(1,x,0,X_ENDPOINT,y);
00887 y += 16;
00888 }
00889
00890 y = Y_ENDPOINT;
00891
00892 for (x = 0; x < X_ENDPOINT; x += 20)
00893 {
00894 line(1,x,Y_ENDPOINT,X_ENDPOINT,y);
00895 y -= 16;
00896 }
00897
00898 y = 0;
00899
00900 for (x = 0; x < X_ENDPOINT; x += 20)
00901 {
00902 line(1,0,y,x,Y_ENDPOINT);
00903 y += 16;
00904 }
00905
00906
00907
00908 for (x = 5; x < 120; x += 5)
00909 {
00910 circle(0,80,64,x);
00911 if (RX_in > 0) return;
00912 }
00913
00914
00915 y = Y_ENDPOINT;
00916
00917 for (x = 0; x < X_ENDPOINT; x += 20)
00918 {
00919 line(0,0,y,x,0);
00920 y -= 16;
00921 }
00922
00923 y = 0;
00924
00925 for (x = 0; x < X_ENDPOINT; x += 20)
00926 {
00927 line(0,x,0,X_ENDPOINT,y);
00928 y += 16;
00929 }
00930
00931 y = Y_ENDPOINT;
00932
00933 for (x = 0; x < X_ENDPOINT; x += 20)
00934 {
00935 line(0,x,Y_ENDPOINT,X_ENDPOINT,y);
00936 y -= 16;
00937 }
00938
00939 y = 0;
00940
00941 for (x = 0; x < X_ENDPOINT; x += 20)
00942 {
00943 line(0,0,y,x,Y_ENDPOINT);
00944 y += 16;
00945 }
00946
00947 if (RX_in > 0) return;
00948
00949
00950 y = 111;
00951 for (x = 0; x <= 140; x += 10)
00952 {
00953 erase_block(x, y, x+16, y+16);
00954 box(x, y, x+16, y+16);
00955 y -= 7;
00956 }
00957
00958
00959
00960 y = 28;
00961
00962 q = 0;
00963 while(q < 30)
00964 {
00965 temp = logo[q];
00966 for (x = 140; x < 148; x++)
00967 {
00968 if (temp & 0x80) pixel(1,x,y);
00969
00970 temp <<= 1;
00971 }
00972 q++;
00973 temp = logo[q];
00974 for (x = 148; x < 156; x++)
00975 {
00976 if (temp & 0x80) pixel(1,x,y);
00977
00978 temp <<= 1;
00979 }
00980 y--;
00981 q++;
00982 }
00983
00984 delay_ms(3000);
00985 clear_screen();
00986
00987 }
00988
00989
00990 }
00991
00992
00993
00994 void del_char(char endpoint)
00995 {
00996 char a, y;
00997
00998 if (endpoint == 0)
00999 {
01000 if (x_offset <= 5)
01001 {
01002
01003
01004
01005
01006 x_offset += 152;
01007 y_offset += 8;
01008
01009 if (y_offset > 127) y_offset -= 128;
01010 }
01011
01012 else x_offset -= 6;
01013 }
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025 for (a = x_offset; a < x_offset + 6; a++)
01026 {
01027 for (y = y_offset - 7; y <= y_offset; y++)
01028 {
01029 pixel(0, a, y);
01030
01031 }
01032 }
01033
01034 }
01035
01036
01037 void erase_block(char x1, char y1, char x2, char y2)
01038 {
01039 static char temp_x = 0, temp_y = 0;
01040
01041 for (temp_y = y2; temp_y >= y1; temp_y--)
01042 {
01043 for (temp_x = x1; temp_x <= x2; temp_x++)
01044 {
01045 pixel(0, temp_x, temp_y);
01046
01047
01048
01049
01050
01051 }
01052 }
01053
01054
01055
01056 }
01057
01058 void box(char x1, char y1, char x2, char y2)
01059 {
01060
01061
01062 line(1, x1, y1, x1, y2);
01063 line(1, x1, y1, x2, y1);
01064 line(1, x2, y1, x2, y2);
01065 line(1, x1, y2, x2, y2);
01066
01067 }
01068
01069
01070
01071
01072