jueves, 24 de junio de 2010

PROYECTO DEL CONTADOR CON LA LCD


#include <18f2550.h>#fuses INTRC,NOWDT,PUT,NOPROTECT#use delay(clock=8000000)#define use_portb_lcd TRUE#include
#define salida input(pin_c0)#define incr2 input(pin_a0)#define reset input(pin_a1)#define incre input(pin_a2)#define decre input(pin_a3)#define guardar input(pin_a4)#define mostrar input(pin_a5)
int con=0;
void main(){ setup_oscillator(osc_8MHz); lcd_init(); set_tris_a(0xff); set_tris_b(0x00); set_tris_c(0x00); lcd_gotoxy(1,1); // saludo inicial lcd_putc(" BIENVENIDOS "); lcd_gotoxy(1,2); lcd_putc(" SENA-SANTANDER "); delay_ms(2000);
lcd_gotoxy(1,1); lcd_putc(" C I M I "); lcd_gotoxy(1,2); lcd_putc(" GIRON "); delay_ms(2000);
lcd_gotoxy(1,1); lcd_putc("MTO. ELECTRONICO"); lcd_gotoxy(1,2); lcd_putc("INST. RICARDO C."); delay_ms(2000);
lcd_gotoxy(1,1); lcd_putc(" GRUPO 23216 "); lcd_gotoxy(1,2); lcd_putc(" APRENDICES : "); delay_ms(2000);
lcd_gotoxy(1,1); lcd_putc("CRISTIAN TORRES "); lcd_gotoxy(1,2); lcd_putc(" JHON BURITICA "); delay_ms(2000); printf(lcd_putc,"\f"); con=read_EEPROM(10); lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"Vlr.INICIAL %u ",con); output_high(pin_c1); inicio:
if (incre==1){ //PULSADOR PARA INCREMENTO delay_ms(400); con++; lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"INCREMENTO %u ",con); output_high(pin_c1); }if (decre==1){ //PULSADOR PARA DECREMENTO delay_ms(500); con--; lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"DECREMENTO %u ",con); output_high(pin_c1); }
if (reset==1){ //PULSADOR PARA RESET delay_ms(400); con=0; lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"RESET %u ",con); output_high(pin_c1);
}
if (guardar==1){ //PULSADOR PARA GUARDAR DATO delay_ms(500); write_eeprom(10,con); lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"GUARDADO %u ",con); }
if (mostrar==1){ //PULSADOR PARA MOSTRAR DATO delay_ms(400); con=read_EEPROM(10); lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"Vlr. INICIAL %u ",con); output_high(pin_c1); }
IF(salida==1){//PULSOS GENERADOS POR EL SENSOR delay_ms(500); con--; lcd_gotoxy(1,2); printf(lcd_putc,"Vlr.ACTUAL %u ",con); if(con==0){ con=1; output_low(pin_c1); lcd_gotoxy(1,1); lcd_putc(" FIN DE PROCESO "); } } if (incr2==1){ //PULSADOR PARA INCREMENTO delay_ms(500); con=con+10; lcd_gotoxy(1,1); printf(lcd_putc,"\f"); printf(lcd_putc,"INCREMENTO %u ",con); output_high(pin_c1); }
goto inicio;}




//lcd.h//Programa de cabecera para controlar una LCD 2x16//Este archivo debe incluirse dentro del programa que uilice lcd//mediante el comando #include //Juan Carlos Merchan Mejia
#ifndef lcd_enable#define lcd_enable pin_c7 //Configuración pines Lcd para el control #define lcd_write pin_c6#define lcd_rs pin_c2#endif
short bits_8_4;
#define LCD_LINEA2 0xc0 // direccion de memoria para la segunda linea#define LCD_DATO 1 // valor de rs para enviar datos a lcd#define LCD_COMANDO 0 // valor de rs para enviar comandos a lcd
//instruccion de inicializacion
#define LCD_CLEAR 0X01 // comando para limpiar pantalla#define LCD_HOME 0X02 // comando para poner el cursor en el inicio
//opciones para el display
#define LCD_DISPLAY_OFF 0x08 // comando que apaga la lcd#define LCD_DISPLAY_ON 0x0c // comando que enciende la lcd#define LCD_CURSOR_ON 0x0e // Encender cursor#define LCD_CURSOR_BLINK 0x0f // parpadeo del cursor
//OPCIONES ESPECIALES DEL CURSOR
#define LCD_CURSOR_SHIFT_RIGHT 0x10 // corrimiento del cursor hacia la derecha#define LCD_CURSOR_SHIFT_LEFT 0x14 // corrimiento del cursor hacia la izquierda#define LCD_DISPLAY_SHIFT_RIGHT 0x18 // desplazamiento del texto#define LCD_DISPLAY_SHIFT_LEFT 0x1c
//CONFIGURA EL HARDWARE
#define LCD_DISPLAY_8_BITS 0x38 //configura el bus de datos para la recepcion de ordenes#define LCD_DISPLAY_4_BITS 0x28
void lcd_enviar(int dir, int valor) //Subrutina que sirve para enviar comandos o datos para visualizar en la LCD{ int buffer; buffer=valor; if(bits_8_4==1) //comunicacion a 8 bits { if(dir==0) { output_low(lcd_write); output_low(lcd_rs); output_high(lcd_enable); output_b(valor); // **se puede cambiar el hardware BUS de DATOS delay_us(560); output_low(lcd_enable); delay_us(560); } else { output_low(lcd_write); output_high(lcd_rs); output_high(lcd_enable); output_b(valor); // **se puede cambiar el hardware BUS de DATOS delay_us(560); output_low(lcd_enable); delay_us(560); } }}
void lcd_init() //Subrutina para Inicializar la LCD { int dir,valor; bits_8_4=1; dir=LCD_COMANDO; valor=LCD_DISPLAY_8_BITS; //0X38 inicia el modulo a 8 bits lcd_enviar(dir,valor); valor=LCD_DISPLAY_ON; //0x0c activa el display lcd_enviar (dir,valor); valor=LCD_CLEAR; //0x01 borra display delay_us(560); lcd_enviar (dir,valor); valor=0x06; //selecciona mensaje fijo lcd_enviar(dir,valor); }
void lcd_gotoxy(byte x, byte y) //subrutina para posicionar la LCD { byte dir;
if(y!=1) dir=LCD_LINEA2; else dir=0; dir+=x-1; lcd_enviar(LCD_COMANDO,0x80dir); }
void lcd_putc(char c) // subrutina para escribir mensajes o realizar funciones especiales{ switch(c) { case'\f': lcd_enviar(LCD_COMANDO,0x01); delay_ms(2); break;
case'\n': lcd_gotoxy(1,2); break;
case'\b': lcd_enviar(LCD_COMANDO,0x10); break;
default: lcd_enviar(LCD_DATO,c); break; }}

No hay comentarios:

Publicar un comentario