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