16F628A + lcd

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

16F628A + lcd

Mensagempor welltom » 26 Jul 2009 08:03

Preciso da ajuda dos colegas, estou tentando ligar um lcd, usando os pinos disponivel da porta A, usando clock oscilador externo (cristal),mas não estou conseguindo desligar e configurar os pinos desta porta(desabilitar e desligar comparadores a/d), a display apenas acende.mas não apresenta os caracteres, abaixo parte do meu código.
Wellington

#include<16F628.h>
#use delay(clock=4000000) // MCU pinos xtal [13 e 14 ]
#fuses XT,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP
#use rs232(BAUD=19200, parity=N, BITS=8, XMIT=pin_B2, RCV=pin_B1)
#include <regs_16.h>




#define lcd_enable pin_a5
#define lcd_rs pin_a4
#define lcd_d4 pin_a3
#define lcd_d5 pin_a2
#define lcd_d6 pin_a1
#define lcd_d7 pin_a0
#include <mod_lcd.c>



void inicio1()
{
int pos;
pos=16;
while(pos>=0 && pos<=16 || pos>=256 && pos<=256)
{
lcd_pos_xy(1,1);
lcd_escreve(" ");
lcd_pos_xy(pos,1);
lcd_escreve(" KIT TEST 16F877A");
delay_ms(200);
pos=pos-1;
}
delay_ms(500);
return;
}

//-----//

void inicio2()
{
int pos;
pos=16;
while(pos>=0 && pos<=16 || pos>=256 && pos<=256)
{
lcd_pos_xy(1,2);
lcd_escreve(" ");
lcd_pos_xy(pos,2);
lcd_escreve(" VERSAO 01 BY-WA");
delay_ms(200);
pos=pos-1;
}
delay_ms(500);
return;
}

//-----//

void led_1()
{
output_high(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 01 PRESS");
lcd_escreve('\r');
lcd_escreve("LED 01 LIGADO");
delay_ms(15);
}

//-----//


void led_2()
{
output_low(pin_b7);
output_low(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 02 PRESS");
lcd_escreve('\r');
lcd_escreve("LED 02 LIGADO");
Delay_ms(15);
}

//-----

void led_3()
{
output_high(pin_b7);
output_low(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 03 PRESS");
lcd_escreve('\r');
lcd_escreve("LED 03 LIGADO");
delay_ms(15);
}

//---------

void led_4()
{
output_low(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 03 PRESS");
lcd_escreve('\r');
lcd_escreve("LED 03 LIGADO");
delay_ms(15);
}

//-----//


#int_rda
void Serial_Detecta_Car()
{
char ch;
ch = getc(); //Pega o caracter no registrador da UART.
{
if( ch == '1' )
{
output_high(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 01 ON");
lcd_escreve('\r');
lcd_escreve("LED 01 LIGADO");
delay_ms(15);
}
if( ch == '2' )
{
output_high(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 02 ON");
lcd_escreve('\r');
lcd_escreve("LED 02 LIGADO");
delay_ms(15);
}
if( ch == '3' )
{
output_high(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 03 ON");
lcd_escreve('\r');
lcd_escreve("LED 03 LIGADO");
delay_ms(15);
}
if( ch == '4' )
{
output_high(pin_b7);
output_high(pin_b6);
lcd_escreve('\f');
lcd_escreve("CHAVE 04 ON");
lcd_escreve('\r');
lcd_escreve("LED 04 LIGADO");
delay_ms(15);
}
}
}


//--------------------//
//Programa Principal.
//--------------------//


void main(void)
{
lcd_ini (); // inicializa display
enable_interrupts(int_rda); //Habilita interrupção de recebimento.
enable_interrupts(GLOBAL); //Habilita registrador de interrupção.

set_tris_b(0b00111011);
set_tris_a(0b10000000);
output_a(0b00000000);
lcd_escreve('\f');
inicio1();
inicio2();

while( true ) //Loop infinito.
{
if(input(pin_b0) == 0) led_1();
if(input(pin_b3) == 0) led_2();
if(input(pin_b4) == 0) led_3();
if(input(pin_b5) == 0) led_4();
}
}
welltom
Bit
 
Mensagens: 44
Registrado em: 30 Ago 2007 05:24

Mensagempor Alesandro F Zagui » 26 Jul 2009 12:47

welltom

O pino PORTA,5 nao pode ser usado como saida.

Para desligar o modulo comparador analogico voce deve colocar o valor 0x07 no registrador CMCON.
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Pic 16628

Mensagempor welltom » 26 Jul 2009 17:04

Alesando valeu, obrigado pela informação....
Wellington
welltom
Bit
 
Mensagens: 44
Registrado em: 30 Ago 2007 05:24


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x