Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal! 

 

Boa tarde a todos! 

 

Estou desenvolvendo um programa no PIC16F887, mas estou tendo um problema ao tentar controlar um botão.

 

Utilizei um LCD 20x4 e coloquei mais outros botões para iniciar o projeto, queria ao menos conseguir ligar um LED com um destes botões, mas, por alguma razão, o LED não liga. Alguém poderia me ajudar a entender onde eu poderia estar errado ?

 

//=============================================================================
//              
//     Microcontrolador - PIC16F887 [ CLP / PIC 40 ]
//     Cristal Oscilador: HS, 8.0000 MHz
//     TRISB / PORTB ==> Utilizado para Controle do LCD 20x4; ( Configurar como saída )
//     TRISD / PORTD ==> Configurar como ENTRADA Digital;
//=============================================================================

//================= Configuração LCD =========================================
// LCD module connections

sbit LCD_RS at RB4_bit; // RS no RB4;
sbit LCD_EN at RB5_bit; // EN no RB5;
sbit LCD_D4 at RB0_bit; // D4 no RB0;
sbit LCD_D5 at RB1_bit; // D5 no RB1;
sbit LCD_D6 at RB2_bit; // D6 no RB2;
sbit LCD_D7 at RB3_bit; // D7 no RB3;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

//============= Fim da Configuração LCD =====================================
//============= Variáveis Globais ===========================================

#define Botao_1    RA1_bit
#define Botao_2    RA2_bit
#define LED1       RC1_bit


// ===================  PROGRAMA PRINCIPAL ====================================
void main()       // Inicio do Programa Principal
{
//==================== REGISTRADORES DO PIC ==================================
  ANSEL  = 0;            // Configurar ANALOG pinos como Digital;
  ANSELH = 0;
  C1ON_bit = 0;          // Desliga os Comparadores;
  C2ON_bit = 0;          // Desliga os Comparadores;
//=================== FIM DOS REGISTRADORES/COMPARADORES ======================

// ================= Configuração  dos Pinos I/O =============================

// ============ Configuração Botões ======
//       0b76543210
 TRISA = 0b00001110; // Configura TRISA 1; TRISA 2 e TRISA 3 como entrada;
 PORTA = 0b00001110; // Configura todo o PORTA para iniciar desligado;
//=============================
  TRISC = 0b00000010; // Configura TRISC1 como saída
  PORTC = 0b00000010; // Configura PORTC1 para iniciar desligado
//======= Registradores do LCD ==========
  TRISB = 0b00000000;   // Configura TRISB como saída;
  PORTB = 0b00000000;   // Configura PORTB para iniciar desligado;
//=======================================

//===================== Fim da Configuração ==================================

//=================== Configuração do LCD ====================================

  Lcd_Init();                        // Inicializa o LCD;

  Lcd_Cmd(_LCD_CLEAR);               // Limpa a Tela do Display;
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor OFF(Desligado);
  Lcd_Out(1,1,"Inicializando...");   // Escrever o texto;
  Lcd_Out(1,2,"...");
  delay_ms(1000);                    // Delay de 1000 Mili-Segundos;
  lcd_cmd(_LCD_CLEAR);               // Limpa a Tela do Display;
  //====================== Fim da configuração do LCD ==========================

   LED1    = 0;
   Botao_1 = 1;
   Botao_2 = 0;
   ENTER   = 0;

  if(Botao_1 == 0);
  {
    LED1 = 1;
  }


}  //=============  FIM DO PROGRAMA PRINCIPAL ==================================

 

  • Membro VIP
  • Solução
Postado

Claro amigo... Por sorte sua sou phd em pisca led pra mc's

4 horas atrás, Daniel Hermom de Oliveira disse:

#define LED1 RC1_bit

você se enganou.

4 horas atrás, Daniel Hermom de Oliveira disse:

TRISC = 0b00000010; // Configura TRISC1 como saída

TRIS em 1 é entrada

abç

  • Curtir 1
  • Obrigado 1
Postado

Muito obrigado pela ajuda. 

 

Fiz a correção, e atualmente  estou tentando fazer um valor de uma variável aparecer no Display Lcd, você saberia como fazer isso ? 

 

Seria algo parecido com isso que eu fiz?

    Lcd_Cmd(_LCD_CLEAR);             // Limpa a Tela do Display;
    Lcd_Out(3,1,"---Projeto---");    // Escrever texto;
    Lcd_Out(1,3," %u",Contadora);    // O Valor da Variável Contadora aparece na tela do Display;
    

 

  • Membro VIP
Postado

Quase. você vai ter que ver como funciona a função lcd_out, que argumentos ela permite e etc. Infelizmente não uso mikro c há muito tempo. você pode também fazer uma conversão de tipos. Estude a função itoa() ou sprintf(). Ela formata para texto e aí sim sua lcd_out é capaz de escrever.

 

Só pra constar, não uso estas funções pois tendem a ser comedoras de recursos. Mas como to com preguiça de te mostrar como escrever no display direto pelo hw, vá de sw mesmo... moleza.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!