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