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