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