Del sitio iearobotics.com hay un ejemplo para manejar LCD a 8bits, en este caso lo adapte para 4 bits.
#include <pic16f873a.h>
typedef unsigned int word;
word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;
//-- Pines de conexionado para el LCD
#define RW RA2
#define RS RA1
#define E RA0
//-- Valor inicial del timer0 para hacer una pausa de 10ms
//-- Divisor del prescar a 256
#define T_10ms 61
void timer0_delay(unsigned char t0ini)
{
//-- Dar valor inicial del timer
TMR0=t0ini;
//-- Flag de interrupcion a cero
T0IF=0;
//-- Esperar a que transcurra el tiempo indicado
while(T0IF==0);
}
/*******************************************************/
/* Pausa */
/* ENTRADA: duracion de la pausa en centesimas (10ms) */
/*******************************************************/
void delay(unsigned int duracion)
{
unsigned int i;
for (i=0; i<duracion; i++)
timer0_delay(T_10ms);
}
/*********************************************/
/* Habilitar el dato escrito en el puerto B */
/*********************************************/
void enable()
{
//-- Hay que garantizar un tiempo minimo de 500ns
//-- A 20Mhz, las instrucciones tardan 200ns.
//-- Por eso nos curamos en salud y repetimos la instruccion
//-- tres veces.
E=1; E=1; E=1;
E=0; E=0; E=0;
}
/**********************************/
/* Enviar un comando al LCD */
/**********************************/
void lcd_cmd(unsigned char cmd)
{
RS=0;
PORTB=cmd;
enable();
cmd<<=4;
PORTB=cmd;
enable();
delay(1);
}
/*********************************/
/* Escribir un dato en el lcd */
/*********************************/
void lcd_write(unsigned char car)
{
RS=1;
PORTB=car;
enable();
car<<=4;
PORTB=car;
enable();
delay(1);
}
void main(void)
{
TRISB=0b00000000;
TRISA=0b00000000;
ADCON1=0x06;
//-- Configurar temporizador para hacer pausas
T0CS=0; PSA=0;
//-- Configurar el prescaler (division entre 64)
PS2=1; PS1=1; PS0=1;
//-- Pausa inicial
delay(1);
//-- Inicializar lcd (para trabajar a 4 bits)
RW=0; E=0;
lcd_cmd(0b00101000);
//-- Modo de funcionamiento
lcd_cmd(0b00000110);
//-- Encender el LCD
lcd_cmd(0b00001110);
//-- Cursor a HOME
lcd_cmd(0b00000010);
//-- CLS
lcd_cmd(0b00000001);
//-- Enviar una cadena
lcd_write('H');
lcd_write('O');
lcd_write('L');
lcd_write('A');
lcd_write('!');
while(1);
}
domingo, 17 de enero de 2010
SDCC LCD a 4 bit's
Suscribirse a:
Enviar comentarios (Atom)
IRC
#freenode->#usljujuy
No hay comentarios:
Publicar un comentario