Вы находитесь на странице: 1из 2

LCD con slo 3 pines

Lunes, 30 de Noviembre de 2009 12:03

Esta til librera permite gestionar un LCD 2x16 compatible HD44780 con slo 3 pines de tu
micro, utilizando un registro de desplazamiento.

Es una modificacin a la conocida Flex_LCD realizada por los amigos Akenafab y


Duende_Azul.

Los pines utilizados son:

LCD_E: seal de control Enable del LCD

LCD_CK: seal de reloj del registro de desplazamiento

LCD_DAT: salida del bit menos signficativo hacia el registro de desplazamiento

1/2

LCD con slo 3 pines

Lunes, 30 de Noviembre de 2009 12:03

Este
es
elLCD_DAT
cdigo
la
librera:
//
flex_lcd_3_pins.c//Modificacin
de
Flex_lcd
por
Duende_Azul
y Akenafab
//Trabaja
con
pines
yconexion
74VHC164
//8-Bit
Parallel-Out
Shift
Register//La
LCD
sedots
usa
en
4bits
//Revisar
diagrama
de
Adjunto
//Se
del
LCD
ha
utilizado
una
velocidad
de
@40MHz
sin
ningun
problema//No
esta habilitada la lectura
//RW
debe
ir a3gnd//Definir
antes
de22=2
llamar
libreria//
LCD_E
PIN_A0
LCD_CK
PIN_A1
//#define
PIN_A2//========================================
int
RS_bit;
lcd_type
//
0=5x7,
1=5x10,
lines
#define
lcd_line_two
0x40
//pines
LCD
RAM
address
for
the
2nd
linemodo
const
LCD_INIT_STRING[4]
=
{int8
0x20
|Serial-In,
(lcd_type
<<
2),
//display
Func
set:
4-bit,
lines,
5x8
0xc,
//de
Display
on
1,
Clear
6
//a2
Increment
cursor
};
//------------------------------------void
lcd_send_nibble(int8
nibble,
int
rs_bit)
{int
x;
if(RS_bit==1)

nibble=nibble|0x10;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.
lcd_send_byte(int8
address,
int8
n)
{/void
/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)
{i}//---------------------------nt8
i;//output_low(LCD_RS);
RS_bit=0;output_low(LCD_E);delay_ms(20);for(i=0
;i
<
3;
i++)
lcd_send_nibble(0x03,RS_bit);
delay_ms(5);
}lcd_send_nibble(0x02,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)
i}//------------------------------void
nt8
address;if(y
!=0x80
1)//limpia
address
= lcd_line_two;
else
+=| address);
x-1;
lcd_send_byte(0,
void
lcd_putc(char
c)
{}//----------------------------switch(c)

{address=0;address

case
'f':
pantalla
lcd_send_byte(0,1);
delay_ms(8);

break;
case
'n':
//cambio
de 1linea
lcd_gotoxy(1,2);
case
'b':
//retrocede
caracter
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);

break;
}este
lcd_setcursor_vb(short
visible,
short
blink)
{

lcd_send_byte(0,
0xC|(visible<<1)|blink);
}Y
un
cdigo
ejemplo
que
la
utiliza:
#include
OFCMEN,NOIESO
INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,N
<16F88.h>#FUSES
#use
delay(Internal=8M)
//-----------Pines
del
LCD
---------------------//
LCD_E
PIN_A0
LCD_CK
PIN_A1
#define
LCD_DAT
PIN_A2
//--------------------------------------------------//#include
del
lcd
"flex_lcd_3pins.c"
// Cargamos libreria
void
main(){
delay_ms(100);
output_a(0);
output_b(0);
lcd_init();
//
inicializamos
el
LCD

pin
Mode-n*
lcd_setcursor_vb(1,1);
!.|.|..|.|.!
*");
//cursor
visible,papadeowhile(1){
printf(lcd_putc,"f-LCD
3
printf(lcd_putc,"f*
Duende_Azul
*n
*
Akenafab
*");

delay_ms(1000);
while
}//end
main
descargar
aqu un arhivo ZIP que contiene:
cdigo
fuente
librera
esquemtico
-Puedes
simulacin
en Proteus.
Que
la}//end
disfrutes.

2/2

Вам также может понравиться