Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Prueba cambiando estas partes de la cabecera en tu programa por esto...
#use delay (internal = 4000000)
#define use_portb_lcd true
#include <lcd.c>
Suerte.
Te falta inicializar la pantalla.Hola buen dia a todos, como verán acá vuelvo con otro problema con mis queridos pics
Esta vez me toco con un pic 16f877a, aclaro que el pic funciona joya, siempre y cuando sea una rutina normal ej prender leds ..., ahora el problema es cuando quiero utilizar un Display de 16x2, declaro todo para el manejo del display.
#include <16f877a.h>
#fuses NOBROWNOUT
#use delay(crystal = 4MHz)
#include "[B]lcd_prueba.c[/B]" // [B]Librería bajo prueba[/B]
#define LED PIN_B7
#define DELAY 500
void main()
{
lcd_init();
lcd_putc("\fhola");
while(true)
{
output_toggle(LED);
delay_ms(DELAY);
}
}
Te falta inicializar la pantalla.
Tampoco es necesario que declares el puerto D y los pines para la pantalla.
Esa configuración es la que usa por defecto el compilador para el 16F877A
En el código tampoco se ven los fuses, el periodo para DELAY, ni que pin escogiste para el LED.
Quizás obviaste esos detalles al subir tu programa, y sólo por probar tu librería compilé tu programa, pero simplificado.
Le cambié el nombre al archivo que subiste por lcd_prueba.c y lo coloqué dentro de la carpeta del proyecto.
Y físicamente funciona todo sin ningún problema.Código:#include <16f877a.h> #fuses NOBROWNOUT #use delay(crystal = 4MHz) #include "[B]lcd_prueba.c[/B]" // [B]Librería bajo prueba[/B] #define LED PIN_B7 #define DELAY 500 void main() { lcd_init(); lcd_putc("\fhola"); while(true) { output_toggle(LED); delay_ms(DELAY); } }
Agrega la instrucción lcd_init(); en el main del código para que funcione tu programa.
Suerte.
#include <main.h>
#define use_portD_lcd_TRUE
#include <lcd.c> // Librería bajo prueba
void main()
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"hola");
while(true)
{
output_toggle(pin_b1);
delay_ms(200);
}
}
#include <16F877A.h>
#device adc=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=4000000)
void escLCDProg(pos){
char texto[5];
texto[1]="1-texto1";
texto[2]="2-texto2";
texto[3]="3-texto3";
texto[4]="4-texto4";
lcd_init();
lcd_gotoxy(1,1); //Visualiza en el lcd
lcd_putc("\f");
printf(LCD_PUTC, "%s", texto[pos]);
}
printf(LCD_PUTC, "%s", texto[pos]);
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOPUT,NODEBUG,NOBROWNOUT,NOCPD,NOWRT
#use delay(clock=20000000)
#include <LCD.C>
#byte TRISA = 0x85
#byte PORTA = 0x05
#byte TRISB = 0x86
#byte PORTB = 0x06
INT FLAG=0, MEN=0x01, FLAG1=0;
void presentacion()
{
printf(lcd_putc,"\f CLASE ROBOTICA");
printf(lcd_putc,"\n SEXTO CONTROL");
}
void menu()
{
switch(MEN)
{
case 0x01: //1234567890123456
printf(lcd_putc,"\f MENU ");
printf(lcd_putc,"\n%c 1 LED D4 ",0x7E);
if (FLAG1==2)
{
PORTB=0b00001000;
FLAG1=0;
}
else FLAG1=1;
break;
case 0x02: //1234567890123456
printf(lcd_putc,"\f 1 LED D4 ");
printf(lcd_putc,"\n%c 2 LED D3 ",0x7E);
if (FLAG1==2)
{
PORTB=0b00000100;
FLAG1=0;
}
else FLAG1=1;
break;
case 0x03: //1234567890123456
printf(lcd_putc,"\f 2 LED D3 ");
printf(lcd_putc,"\n%c 3 LED D2 ",0x7E);
if (FLAG1==2)
{
PORTB=0b00000010;
FLAG1=0;
}
else FLAG1=1;
break;
case 0x04: //1234567890123456
printf(lcd_putc,"\f 3 LED D2 ");
printf(lcd_putc,"\n%c 4 LED D1 ",0x7E);
if (FLAG1==2)
{
PORTB=0b00000001;
FLAG1=0;
}
else FLAG1=1;
break;
}
}
void teclado(void)
{
switch((PORTA & 0x3C))
{
case 0x20:
if (FLAG==1)
{
FLAG=0;
if (FLAG1==1) FLAG1=2;
menu();
}
else FLAG=1;
break;
case 0x10:
if (FLAG==1)
{
FLAG=0;
if (MEN<5) MEN++;
else MEN=0x04;
menu();
}
else FLAG=1;
break;
case 0x08:
if (FLAG==1)
{
FLAG=0;
if (MEN<5) MEN--;
else MEN=0x01;
menu();
}
else FLAG=1;
break;
case 0x04:
if (FLAG==1)
{
FLAG=0;
presentacion();
PORTB=0b00000000;
}
else FLAG=1;
break;
}
if (FLAG==1) delay_ms(500);
}
void main(void)
{
lcd_init();
TRISA = 0b00111100;
TRISB = 0x00;
PORTB = 0b00000000;
presentacion();
WHILE(TRUE)
{
teclado();
}
}
La pantalla que estás usando, según la hoja de datos usa el controlador ST7066U-0A y el fabricante del controlador dice que es pin por pin compatible con el HD44780, el KS0066 y el SED1278.El controlador no sé si afecte el lcd que utilizo, es un AZ DISPLAYS modelo ACM2004D
También probé un lcd AMPIRE modelo 204A-QW e hizo lo mismo
Debes tener un problema con la palabra de configuración.Hola a todos,tengo un problema al simular en proteus , no me muestra ningún carácter que envió en la pantalla lcd 2x16 cuando trabajo con el pic 18f2550 ,pero con otros micros como el 16f877a si se muestra los caracteres que envío .
No se cual sera el problema .
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOMCLR
#use delay (clock=48000000)