1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
Ara
15th

CCS C ILE 3 PIN LCD KONTROL

3 pin lcd

Bu uygulamada  HD44780 uyumlu  2×16 LCD’ler için 74164 shift register entegresi ile 3 pin uygulaması yer almakta. İlgili sürücü dosyasını “driver” klasörüne atıldığında lcdnizi sadece 3 pin ile kontrol edebilirsiniz. Devrede;

LDE_E: Aktif etme pini

LCD_CK: Clock pulse için

LCD_DAT: en düşük değerlikli biti başta göndermek üzere data pini olarak kullanılmıştır.

// flex_lcd_3_pins.c
//Modificación de Flex_lcd por Duende_Azul y Akenafab
//Trabaja con 3 pines y 74VHC164
//8-Bit Serial-In, Parallel-Out Shift Register 
//La LCD se usa en modo 4bits
//Revisar diagrama de conexion Adjunto
//Se ha utilizado a una velocidad de @40MHz sin ningun problema 
//No esta habilitada la lectura del LCD
//RW debe ir a gnd 
//Definir pines antes de llamar libreria//
//#define LCD_E     PIN_A0
//#define LCD_CK    PIN_A1   
//#define LCD_DAT   PIN_A2 
//========================================
int RS_bit;
#define lcd_type 2        // 0=5×7, 1=5×10, 2=2 lines
#define lcd_line_two 0×40 // LCD RAM address for the 2nd line 
 
int8 const LCD_INIT_STRING[4] =
{
 0×20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5×8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // Increment cursor
 };
 
//————————————-
void lcd_send_nibble(int8 nibble, int rs_bit)
{
int x;
if(RS_bit==1)
   nibble=nibble|0×10;
for(x=0;x<5;x++){
         output_bit(LCD_DAT,shift_right(&nibble,1,0));
         delay_cycles(1);
         output_low(LCD_CK);
         delay_us(1);
         output_high(LCD_CK);}
 output_high(LCD_E);
 delay_us(2);
 output_low(LCD_E);
}
//———————————–
//—————————————-
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//output_low(LCD_RS);
RS_bit=0;
delay_us(100);
 
if(address)
   //output_high(LCD_RS);
   RS_bit=1;
else
   //output_low(LCD_RS);
   RS_bit=0;
 delay_cycles(1);
 
output_low(LCD_E);
lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}
//—————————-
void lcd_init(void)
{
int8 i;
//output_low(LCD_RS);
RS_bit=0;
output_low(LCD_E);
delay_ms(20);
for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0×03,RS_bit);
    delay_ms(5);
   }
lcd_send_nibble(0×02,RS_bit);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING[i]);
    delay_ms(5);

   }
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
   address = lcd_line_two;
else
   address=0;
address += x-1;
lcd_send_byte(0, 0×80 | address);
}
//—————————–
void lcd_putc(char c)
{
 switch(c)
   {
    case \f:                //limpia pantalla
      lcd_send_byte(0,1);
      delay_ms(8);
      break;
    case \n:                //cambio de linea
       lcd_gotoxy(1,2);
       break;
    case \b:                //retrocede 1 caracter
       lcd_send_byte(0,0×10);
       break;
    default:
       lcd_send_byte(1,c);
       break;
   }
}
//------------------------------
void lcd_setcursor_vb(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}

Yukarıdaki kodlar kütüphaneye uygun bir isimle kaydediniz.Aşağıda örnek uygulama yer almakta

#include <16F88.h> 
#FUSES INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,NOFCMEN,NOIESO
#use delay(Internal=8M)  
//———— Pines del LCD ———————//
#define LCD_E     PIN_A0
#define LCD_CK    PIN_A1   
#define LCD_DAT   PIN_A2
//————————————————–// #include “flex_lcd_3pins.c”            // Cargamos libreria del lcd  
void main(){ 
delay_ms(100);
            output_a(0);
            output_b(0);            lcd_init();              // inicializamos el LCD
            lcd_setcursor_vb(1,1);  //cursor visible,papadeo while(1){
         printf(lcd_putc,\f-LCD 3 pin Mode-\n* !.|.|..|.|.! *”);
         delay_ms(1000);
         printf(lcd_putc,\f* Duende_Azul  *\n *  Akenafab  *”);
         delay_ms(1000);

         }//end while

}//end main 

Örnekle ilgili bütün dosyalara www.micropic.es sitesinden ulaşabilirsiniz.

En Çok Okunanlar

Yorum yapın