# 16f877 con lcd en c



## juantxo182 (Ene 24, 2006)

hola a todos, tengo un problema, tengo que conectar un pic 16f877 con una lcd y me esta resultando un infierno, alguno sabe como hacerlo?? estoy programando en lenguaje c, partiendo de un programa en asm. si fueseis tan amables de ayudarme lo agradeceria. un saludo.


----------



## maunix (Ene 26, 2006)

juantxo182 dijo:
			
		

> hola a todos, tengo un problema, tengo que conectar un pic 16f877 con una lcd y me esta resultando un infierno, alguno sabe como hacerlo?? estoy programando en lenguaje c, partiendo de un programa en asm. si fueseis tan amables de ayudarme lo agradeceria. un saludo.



SI he conectado varios, podrias postear un esquemático de lo que estas haciendo?  

Empecemos por el esquemático si eso va bien, revisaremos el código, te parece?


----------



## juantxo182 (Ene 29, 2006)

gracias, en cuanto pueda te coloco el esquematico, va con mas elementos para las demas funciones, te coloco el entero o prefieres solo el esquema de la lcd??
en principio el puerto d entero es el bus de datos de la pantalla.
puerto c 0,1 y 2 son el enable el rw y el rs, luego colocada la retroiluminacion a 5v y despues el contraste directamente a masa.
GRACIAS POR TU TIEMPO.


----------



## maunix (Ene 29, 2006)

juantxo182 dijo:
			
		

> gracias, en cuanto pueda te coloco el esquematico, va con mas elementos para las demas funciones, te coloco el entero o prefieres solo el esquema de la lcd??
> en principio el puerto d entero es el bus de datos de la pantalla.
> puerto c 0,1 y 2 son el enable el rw y el rs, luego colocada la retroiluminacion a 5v y despues el contraste directamente a masa.
> GRACIAS POR TU TIEMPO.



Postea todo lo que vaya al LCD y si pones mas detalle (de conexiones de otros pines) pues mejor.

Saludos


----------



## juantxo182 (Ene 30, 2006)

gracias por todo, pero ya he hecho que funcione la lcd, el problema debia de ser la placa, ya que lo monte en una board para probar y me funciono a la primera. ahora el problema lo tengo con el reloj PCF8583, sabes algo al respecto?


----------



## lethus2004 (Ene 22, 2007)

Es la primera vez q escribo en este foro, disculparme di cometo algun error.

Llevo poco tiempo con microcontroladores, bueno en realidad con electrónica. El caso es que estoy utilizando un 16F877 y no consigo hacer funcionar un LCD, me descargue un codigo fuentye que utilizaba el puerto A (RA0, RA1....) pero el problema es q yo tengo todos los pines de A y B utilizados por lo que opte por conectarlo al C. Pero no funciona.

El LCD se enciende y la primera linea se me ponen todos los caracteres en negro, se q algo he hecho mal pero no se el que.

Sabeis donde puedo conseguir un codigo del programa comentado o algo. Llevo ya tiempo mirandolo y estoy a punto de tirar la toalla no por fala de ganas si no por no encontrar soluciones.

Espero q podais ayudarme. Gracias de antemano


----------



## yamazaky1984 (Ene 23, 2007)

Hay ui codigo fuente en la pagina de todopic (la direccion exacta no le se, pero si buscas en google la encuentras) donde esta una libreria llamada flex lcd, la que te permite manejar una lcd por cualquier puerto...respscto a la linea que mencionas que aparece en negro, debes revisar que el minel de contraste de la lcd es correcto.. puede que tu circuito y el programa esten bien, pero el alto (o bajo) contraste no t edeja ver losc caracteres.. revisa primero el contraste y despues busca la libreria que te digo. Suerte


----------



## jorkera (Jun 4, 2007)

hola a todos: 

necesito programar en CCS el pic 16F877A. 

la siguiente secuencia: 
01010101 
10101010 

En forma repetitiva; 
la partida comienza al presionar boton 1 y la detensión al presionar boton 2 

he hecho un programa, haber si esta bueno.

	/* Tarea Led´s Intermitentes*/

#include	"C:\Archivos de programa\PICC\Devices\16F874A.h"	/*PIC a Utilizar*/
#use delay  (clock=10.000000)									/* Defino el Reloj*/
#byte		puerto_b=06											/* Direccion del puerto B*/

void	main(void)
{
	set_trib_b(0x00);
	puerto_b=0;

	#if (!input(PIN_B0=0));
		goto Aca;
	#end if 

	#if (!input(PIN_B1=0));
		SLEEP();
    #end if

Aca		output_c	(aa);
		Delay		(500);
		output_c	(55);
		Delay		(500);
		goto 		Aca;
}


yo soy un principiante en esto asi que necesito la mayor ayuda posible. 
de antemano muchas gracias 

 [/b]


----------



## Diederick (May 19, 2008)

Hola gente qué tal sucede que estoy montando un programa donde *necesito visualizar el incremento de una variable en LCD*, he hecho todo aparentemente bien, pero en la lcd me muestra números incoherentes, alguno de ustedes sabe como mostrar esto de forma correcta, aquí les muestro la parte clave del programa que pienso está mal :

char c;
int número=0;
*
*
*  
   if(c=='A'){
      número++;
            lcd_gotoxy(7,2);
          printf(lcd_putc,"%i",número);
      //lcd_putc(c);//////////////////////////PERO AQUI VISUALIZA UNA CADENA DE TRES CARACTERES QUE NO CORRESPONDEN AL NUMERO
      }


----------



## ingdenis1 (Feb 18, 2010)

seria bueno conseguir una libreria lcd para el puerto b ya que el 18f2525 no tiene puerto d y el puerto c esta utilizado para la comunicacion serieal rs232 en los pines c6 y c7 y quiero conectar una lcd y a la ves usar el rs232 del pic gracias por cualquier ayuda!


----------



## miguelangeldavid (Mar 29, 2010)

hola que tal soy nuevo en este foro y necesito tada la ayuda que se pueda acerca de la programacion del lcd, pues se me dejo una tarea de con el lcd que trata; con ayuda de un teclado matricial el pic 16f876 y el lcd, la tecla que preciones te la muestre en un display de 7 segmentos y te lo muestre en el lcd. ademas si precionas mas que 10 numeros te aparesca error etc.


----------



## cosmefulanito04 (Mar 29, 2010)

Te recomiendo usar matrices, por ej si tengo este teclado:


```
1  2  3
4  5  6
7  8  9
*  0  #
```

Creas esta matriz en forma global (o en forma local en una funcion que se encargue de transformar la tecla presionada en el caracter):


```
....
unsigned char teclas[4][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};
....
```

Despues resulta sencillo convertir a partir de obtener la lectura + scan code.

La misma matriz, la haces para el 7 segmentos, obviamente dependera de tu conexion.


----------



## miguelangeldavid (Mar 31, 2010)

hace dias mi profe dio la explicacion de como funciona un lcd, y no hablo de pantallas sino de las pantallitas que usaremos en la programacion, y la pregunta es alguien sabe como funcionan estas pantallas, como se conectan y si tienen la simulacion en proteous para como conectarlos con el pic 16f876


----------



## ElTox (May 10, 2010)

hola, hace unos días conseguí mi primer lcd -w-, bueno, la cosa es, hice un pequeño programita para utilizar el adc del pic16f877a y desplegar la información en el lcd, pero al conectarla a la alimentación no da muestras de vida alguna, no se inicializa ni nada, también probé a conectar el led del backlight directamente con una resistencia de 220 y +5v, tampoco nada, sucede que al medir tensión entre terminales de mi fuente me da algo así como 1.25v, ¿será que el pic y el lcd juntos consumen demasiada corriente y mi fuente no es suficiente?, cabe aclarar que este es mi primer proyecto con pic

las caracteristicas a la salida de mi fuente son: +5V y 500mA

si alguién puede ayudarme de antemano muchas gracias ^^


----------



## isiltari (May 29, 2010)

necesito el codigo par visualizar en lcd lo que escribo con un teclado matricial de 3*4


----------



## victormanuel12 (Sep 13, 2010)

Hola buenas. quiero conectar un pic16f876 a un lcd (todo para simularlo con el compilador c ccs y simulador proteus. Se trata de un ejercicio de un libro de Eduardo Garcia. El tema es que cuando simulo, el archivo LCD.c me da errores. He leido que en un principio el LCD por defecto trabaja con el puerto D, pero que de todos modos tengo que cambiar algunas lineas de codigo, en concreto estas:

#if defined use_portb_lcd
   //#locate lcd = getenv("sfrORTB")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf81
   #else
    #locate lcd = 6
   #endif
   #define set_tris_lcd(x) set_tris_b(x)
#else
   //#locate lcd = getenv("sfrORTD")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf83
   #else
    #locate lcd = 8
   #endif
   #define set_tris_lcd(x) set_tris_d(x)
#endif

Lo compilo asi y me sigue dando error. Aguien tiene idea de como lo puedo hacer? Ya no me quedan ideas que intentar. Gracias


----------

