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