Karakteres LCD vertical scroll

Pal Lukacs ekegep at yahoo.com
Sat Sep 30 18:38:28 CEST 2006


charles hoss <dexter at bekesnet.hu> wrote: 

a digaram szerint hozzaferheto - akkoriban a diagram nem volt 
hozzaferheto :)
annak idejen csak ugy kiserleteztem es probalgattam ertelmet adni a 
regisztereknek - kozben futottam bele

bye
dexter

Vegulis akkor hozzaferheto?
   
 SIkerult leprogramoznia 'scroll' -t!
 Laza:-)
   
 Itt a C fv. avr-re
   
 //vertical scroll (C) P. Lukacs
   
 typedef uint8_t matrix[8][8];
 /* 
 *lcd_vertical_scroll
 * __custom_chars: custom chars array
 * __NUM: number of chars
 * __x_delay_ms: vertical and horizontal delay
 * __clear: 1: set CGRAM clear mode; 0: no CGRAM clear 
 */
 void
 lcd_vertical_scroll (matrix __custom_chars, uint8_t __NUM,
              uint16_t __verti_delay_ms,uint16_t __horiz_delay_ms, uint8_t __clear)
 {
   register uint8_t i, j, n;
   uint8_t cgram_addr = 0x00;
   uint8_t d, block_line = 7;
   
   __clear ? lcd_clear_CRGAM () : 0; 
   
   for (n = 1; n <= 8; n++)
     {
       for (i = 0; i < __NUM; i++)
     {            //CGRAM cimbeallitas
       lcd_set_CGRAM_addr (cgram_addr + block_line);
       for (j = 0; j < n; j++)
         {
           lcd_putch (__custom_chars[i][j]);    //irunk cgramba n byteot
         }
       cgram_addr = (i + 1) * 8;    //kov. 8byte cime a GCRAMban
       //megjelenitjuk a CGRAM tartalmat:
       lcd_set_DDRAM_addr (LCD_SECND_LN_ADDR + i);
       lcd_putch (i);  
       lcd_delay_ms(__horiz_delay_ms);
     }
       cgram_addr = 0x00;
       block_line--;
       //varunk:
        lcd_delay_ms(__verti_delay_ms);
     }
 }
 //use : lcd_vertical_scroll (array2d, ROWS, 15,0 /*delay ms */ , 1);
   
   
 Alabbi modon probaltam idoosztassal osszehozni egy mozgo figurat es a scrollt.Addig animal is
 amig a scrollozas el nem kezdodik.
 Ha torles modban hivom a scrollt,akkor nyilvan letorli az animaciot,
 ha meg nem torles modban hivomakkor ott marad az utolso poziciojaba,de nem animal.
 Pedig ket scroll kozott lenne ra 'lehetosege',direkt jo nagy idokozt hagytam..
 Erdekes...eskudni mertem volna ra,hogy igy idoosztassal a ketto egyszerre mukodik.
 Ebben a formaban tobb animaciot mar mukodtettem es OK.  
 Nem ertem, mi lehet..?
 .....
 //cnt1,2 kuszobertekei
 #define  CNT1_THRESHOLD  80
 #define  CNT2_THRESHOLD  7
 .....main loop....
 for (;;)
     {
       if (cnt1 == CNT1_THRESHOLD)
     {
       cnt1 = 0;
       /* 
        * array2d: custom chars array
        * ROWS: number of chars
        * 15: delay
        * 1: set CGRAM clear mode; 0: no CGRAM clear 
        */
       //nem clear modban erdekes hatast kelt;-)
       lcd_vertical_scroll (array2d, ROWS, /*vdelay*/15,/*hdelay*/0 /*delay ms */ , 1);
     }
   
     
       if (cnt2 == CNT2_THRESHOLD)
     {
       cnt2 = 0;
       if (i > 1)
         {
           i = 0;
         }
         //7. karakter helye a CGRAMban
       lcd_put_custom_char (7, man[i++]);
       lcd_set_DDRAM_addr (LCD_FIRST_LN_ADDR + 6);//itt jelenitjuk meg
       lcd_putch (0x07); //ezt.
     }
   
     }
   
 Udv mindenkinek aki foglalkozott ezzel a temaval!
 

 		
---------------------------------
Do you Yahoo!?
 Everyone is raving about the  all-new Yahoo! Mail.


More information about the Elektro mailing list