Tuesday, January 4, 2011

.:Projek PIC-LCD HD44780 siri 2:.

Ada beberapa email dan pertanyaan lisan saya terima bertanyakan bagaimana caranya untuk menggerakkan character dari kiri ke kanan atau kanan ke kiri. Saya sendiri pun tidak tahu lagi masa tu, so saya terbaca dalam data sheet. satu kaedah yang boleh dilakukan adalah dengan menggunakan shift function, pada pin LCD DB2. Saya telah cuba buat, namun tidak berhasil, mungkin cara atau pun kaedah yang saya gunakan tidak betul, jadi saya telah menggunakkan cara yang lain, iaitu dengan cara memanipulasi address character yang dimasukkan. LCd display JHD162A ini boleh memaparkan maksimum 16 character dalam satu-satu masa. Jadi, apa yang saya buat adalah dengan memanipulasi address, sebagai contoh perkataan SAYA; address pada 0x40 terisi huruf S, address 0x41 terisi huruf A, address 0x42 akan terisi huruf Y dan address 0x43 akan terisi huruf A, kaedahnya huruf A akan overwrite ataupun berpindah ke address 0x40, huruf Y akan overwrite huruf A, dan begitulah seterusnya. Secara mudah untuk menerangkannya ibarat ada 5 kotak, kotak kelima ada sebiji guli, guli itu di pindahkan ke kotak ke 4, kemudian ke 3, ke kotak 2 dan seterusnya. (Harap-harap faham)susah nak terangkan melalui penulisan ni). Hasilnya anda boleh lihat video dibawah :


Modifikasi pada programming perlu dibuat untuk menghasilkan character yang bergerak. Programming projek sebelum ini boleh lihat post saya bertajuk .:Projek PIC-LCD HD44780:.

Modifikasi yang perlu dibuat adalah dengan menambahkan satu lagi funsi/function,  function definition adalah seperti berikut :


  void lcd_puts(const char * s)
  {
  LCD_RS = 1;// write characters
  int i=0;
  while(*s && i <16)
  {
  lcd_write(*s++);
  i++;
  }
  }

Modifikasi pada function main juga perlu di ubah seperti dibawah :



  void main(void)
  {
  const char s[] =" http://robot-geek.blogspot.com;PENYELIA PROJEK : EN. HISYAMSANI; ";
  const char t[] ="PELAJAR:AZHAR;QAYYUM,NAZRI,AFIQ,REBITA & SUNTI";
  //lcd_init(); //initialise the LCD
  pic_init(); //initialize PIC
  lcd_init(); //initialize LCD
  char *b;
  char *c;
  int son=1;
  b=&s;
  c=&t;
  for(;;)
  {
  lcd_goto(0x40);// select first line
  lcd_puts(b);
  lcd_puts(c);
  lcd_goto(0x00);// Select second line
  lcd_puts("<--:ROBO-ROI:-->");
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  __delay_ms(39);
  if(*b)
  {
*b++; //scrolling to next char
  }
  else {
if(son)
   {
b=&s;
c=&t;
son=0;
   }
else
   {
b=&t;
c=&s;
son=1;
   }


}
  lcd_clear();
  }
  }

Disini ingin saya ingatkan, delay adalah untuk mempercepat atau melambatkan pergerakan character. Semakin banyak delay ditambah semakin perlahan pergerakannya. Selamat mencuba. Display kurang jelas, sebab bateri dah nak habis. Heh....heh..



No comments:

Post a Comment