Autor Tema: Voltimetro con Pic 12F675-Lcd y 74164  (Leído 1566 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado atmega8a

  • PIC10
  • *
  • Mensajes: 10
Voltimetro con Pic 12F675-Lcd y 74164
« en: 25 de Abril de 2015, 20:07:23 »

hola
compañeros del foro

deseo comentarle si me pueden dar una manito a un proyecto que estoy haciendo  usando Pic 12F675 y el compilador ccs y el 74c164, es un voltimero digital.

//Modificación de Flex_lcd por Duende_Azul y Akenafab
//Trabaja con 3 pines y 74VHC164
//8-Bit Serial-In, Parallel-Out Shift Register

//La LCD se usa en modo 4bits
//Revisar diagrama de conexion Adjunto

//No esta habilitada la lectura del LCD
//RW debe ir a gnd

//Definir pines antes de llamar libreria//
//#define LCD_E     PIN_A0
//#define LCD_CK    PIN_A1   
//#define LCD_DAT   PIN_A2

//========================================
int RS_bit;
#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
#include <12F675.h>

int8 const LCD_INIT_STRING[4] =
{
 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // 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_ms(15);
 output_low(LCD_E);
}

//-----------------------------------
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//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_ms(15);


output_low(LCD_E);

lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}

//----------------------------
void lcd_init(void)
{
int8 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(50);
   }

lcd_send_nibble(0x02,RS_bit);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING);

    delay_ms(50);
   
   }

}

//----------------------------

void lcd_gotoxy(int8 x, int8 y)
{
int8 address;

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c)
{
 switch(c)
   {
    case '\f':                //limpia pantalla
      lcd_send_byte(0,1);
      delay_ms(50);
      break;

    case '\n':                //cambio de linea
       lcd_gotoxy(1,2);
       break;

    case '\b':                //retrocede 1 caracter
       lcd_send_byte(0,0x10);
       break;

    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------

void lcd_setcursor_vb(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}

este es el programa, cuando lo voy a compilar me da el siguiente error envio el archivo adjunto, espero que me puedan colaborar es para un proyecto de electronica digital en la universidad.

gracias

jose luis


 

anything