Ir ao conteúdo

Posts recomendados

Postado

Opa pessoal, recentemente estou trabalhando e um projetinho, para isso eu desenvolvi uma biblioteca para um teclado 4x4, o funcionamento do mesmo para um digito funciona que e uma beleza, entre tanto, eu nao consegui elaborar um código que eu aplique mais de um digito como por exemplo o valor 563. Se alguém puder ajudar ficaria grato xD.

Segue o código abaixo.

 


//))))))))))))))))))))))))))))))))))))))))))

//))))))))))))))))))))))))))))))))))))))))))
//LCD module connections                  //
sbit LCD_RS at RD2_bit;                   //
sbit LCD_EN at RD3_bit;                   //
sbit LCD_D4 at RD4_bit;                   //
sbit LCD_D5 at RD5_bit;                   //
sbit LCD_D6 at RD6_bit;                   //
sbit LCD_D7 at RD7_bit;                   //
                                          //
sbit LCD_RS_Direction at TRISD2_bit;      //
sbit LCD_EN_Direction at TRISD3_bit;      //
sbit LCD_D4_Direction at TRISD4_bit;      //
sbit LCD_D5_Direction at TRISD5_bit;      //
sbit LCD_D6_Direction at TRISD6_bit;      //
sbit LCD_D7_Direction at TRISD7_bit;      //
// End LCD module connections             //
//))))))))))))))))))))))))))))))))))))))))))


//))))))))))))))))))))))))))))))))))))))))))
//TECLADO IO`s CONFIG                     //
//Definição para colunas  do teclado      //
#define Y1 RB0_bit                        //
#define Y2 RB1_bit                        //
#define Y3 RB2_bit                        //
#define Y4 RB3_bit                        //
                                          //
//Definições para linha do teclado        //
#define X1 RB4_bit                        //
#define X2 RB5_bit                        //
#define X3 RB6_bit                        //
#define X4 RB7_bit                        //
//END CONFIG IO`s                         //
//))))))))))))))))))))))))))))))))))))))))))

//))))))))))))))))))))))))))))))))))))))))))
//Variaveis globais                       //
char txt1[] = "REAL TIMER CLOCK";//LCD    //
char txt2[7];//LCD                        //
unsigned char digito;//TECLADO            //
unsigned char cen;//TECLADO               //
unsigned char dez;//TECLADO               //
unsigned char soma;                       //
//END                                     //
//))))))))))))))))))))))))))))))))))))))))))

//))))))))))))))))))))))))))))))))))))))))))
//PROTYPE                                 //
void teclado();                           //
//END                                     //
//))))))))))))))))))))))))))))))))))))))))))

//))))))))))))))))))))))))))))))))))))))))))
//VETOR INTERRUPT                         //
void digitos() iv 0x0008 ics ICS_AUTO     //
{                                         //
                                          //
                                          //
                                          //
}                                         //
//END                                     //
//))))))))))))))))))))))))))))))))))))))))))

                                          
//))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
//PROGRAMA PRINCIPAL

void main()//START MAIN
{
 //PIC START
 
 //INTCON: INTERRUPT CONTROL REGISTER
 GIE_bit = 1;//DESABILITA TODAS INTRRUPCOES MASCARADAS
 GIEH_bit = 1;// HABILITA TODAS INTTERRUPCOES DE ALTA PRIORIDADE
 PEIE_bit = 1;//Enables all unmasked peripheral interrupts
 GIEL_bit = 0;//Disables all low-priority peripheral interrupts

 //TECLADO FUNC
 teclado();//TECLADO START
 
 //LCD FUNC
 Lcd_Init(); // LCD START
 Lcd_Cmd(_LCD_CLEAR);// Clear display
 Lcd_Cmd(_LCD_CURSOR_OFF);// Cursor off
 Lcd_Out(1,1,txt1);//ESCREVE NO LCD PRIMEIRA LINHA
 
 //I2C FUNC
 I2C1_Init(100000);//Start I2C communication
 
 
 //CONFIGURATION DIGITAL OR ANALOGIC PORTS
 PCFG0_bit = 1;                     //ALL PORTS DIGITAL
 PCFG1_bit = 1;                     //ALL PORTS DIGITAL
 PCFG2_bit = 1;                     //ALL PORTS DIGITAL
 PCFG3_bit = 1;                     //ALL PORTS DIGITAL

 //CONFIG INPUT OR OUTPUT, OBS Nao habilitar todos PORTE como entrada ja que um do mesmo e o reset
 TRISE0_bit = 1;
 TRISE1_bit = 1;
 TRISE2_bit = 1;
 TRISD0_bit = 0;

while(1)//ROTINA PRINCIPAL
{
    teclado();


    
    IntToStr(digito,txt2);// CONVERTE VARIAVEL PARA STRING, PARA O LCD
    Lcd_Out(2,1,txt2);//ESCREVE NO LCD SEGUNDA LINHA
    
}// END ROTINA PRINCIPAL
 


}//END MAIN

//))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))


//))))))))))))))))))))))))))))))))))))))))))
//TRATAMENTO DE FUNCOES                   //
                                          //
//))))))))))))))))))))))))))))))))))))))))))
//TECLADO                                 //
void teclado()                             //
{                                         //
        //START                           //
        int valor[10];                    //
        TRISB = 0b11110000;               //
                                          //
        //DIGITO 15                       //
        Y1 = 1;                           //
        delay_us(1);                      //
        if(X1 == 1 && Y1 == 1)            //
        {                                 //
            digito = 15;                  //
        }                                 //
        Y1 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 14                       //
        Y2 = 1;                           //
        delay_us(1);                      //
        if(X1 == 1 && Y2 == 1)            //
        {                                 //
            digito = 14;                  //
        }                                 //
        Y2 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 13                       //
         Y3 = 1;                          //
        delay_us(1);                      //
        if(X1 == 1 && Y3 == 1)            //
        {                                 //
            digito = 13;                  //
        }                                 //
        Y3 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 12                       //
        Y4 = 1;                           //
        delay_us(1);                      //
        if(X1 == 1 && Y4 == 1)            //
        {                                 //
            digito = 12;                  //
        }                                 //
        Y4 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 11                       //
        Y1 = 1;                           //
        delay_us(1);                      //
        if(X2 == 1 && Y1 == 1)            //
        {                                 //
            digito = 11;                  //
        }                                 //
        Y1 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 10                       //
        Y2 = 1;                           //
        delay_us(1);                      //
        if(X2 == 1 && Y2 == 1)            //
        {                                 //
            digito = 10;                  //
        }                                 //
        Y2 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 9                        //
        Y3 = 1;                           //
        delay_us(1);                      //
        if(X2 == 1 && Y3 == 1)            //
        {                                 //
            digito = 9;                   //
            cen = 900;                    //
            dez = 90;                     //
        }                                 //
        Y3 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 8                        //
        Y4 = 1;                           //
        delay_us(1);                      //
        if(X2 == 1 && Y4 == 1)            //
        {                                 //
            digito = 8;                   //
            cen = 800;                    //
            dez = 80;                     //
        }                                 //
        Y4 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 7                        //
        Y1 = 1;                           //
        delay_us(1);                      //
        if(X3 == 1 && Y1 == 1)            //
        {                                 //
            digito = 7;                   //
            cen = 700;                    //
            dez = 70;                     //
        }                                 //
        Y1 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 6                        //
        Y2 = 1;                           //
        delay_us(1);                      //
        if(X3 == 1 && Y2 == 1)            //
        {                                 //
            digito = 6;                   //
            cen = 600;                    //
            dez = 60;                     //
                                          //
        }                                 //
        Y2 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 5                        //
        Y3 = 1;                           //
        delay_us(1);                      //
        if(X3 == 1 && Y3 == 1)            //
        {                                 //
            digito = 5;                   //
            cen = 500;                    //
            dez = 50;                     //
        }                                 //
        Y3 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 4                        //
        Y4 = 1;                           //
        delay_us(1);                      //
        if(X3 == 1 && Y4 == 1)            //
        {                                 //
            digito = 4;                   //
            cen = 400;                    //
            dez = 40;                     //
        }                                 //
        Y4 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 3                        //
        Y1 = 1;                           //
        delay_us(1);                      //
        if(X4 == 1 && Y1 == 1)            //
        {                                 //
            digito = 3;                   //
            cen = 300;                    //
            dez = 30;                     //
        }                                 //
        Y1 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 2                        //
        Y2 = 1;                           //
        delay_us(1);                      //
        if(X4 == 1 && Y2 == 1)            //
        {                                 //
            digito = 2;                   //
            cen = 200;                    //
            dez = 10;                     //
        }                                 //
        Y2 = 0;                           //
        delay_us(1);                      //
                                          //
        //DIGITO 1                        //
        Y3 = 1;                           //
        delay_us(1);                      //
        if(X4 == 1 && Y3 == 1)            //
        {                                 //
            digito = 1;                   //
            cen = 100;                    //
            dez = 10;                     //
        }                                 //
        Y3 = 0;                           //
        delay_us(1);                      //
                                          //
         //DIGITO 0                       //
        Y4 = 1;                           //
        delay_us(1);                      //
        if(X4 == 1 && Y4 == 1)            //
        {                                 //
            digito = 0;                   //
        }                                 //
        Y4 = 0;                           //
        delay_us(1);                      //
}//END                                    //
                                          //
//END_FUNC                                //
//))))))))))))))))))))))))))))))))))))))))))

Sem título.png

  • Membro VIP
Postado

Não analisei o programa mas a opção de mostrar 456 no display é algo como a cada pressionada desloque a posição de impressão no display. Algo como (chute)
 

//...
unsigned char i=1;
//...
Lcd_Out(2,i++,txt2);//ESCREVE NO LCD SEGUNDA LINHA

Consulte o help da sua função lcd_out pra ver a função dos argumentos

  • Curtir 1
Postado
Em 08/09/2017 às 09:08, Isadora Ferraz disse:

Não analisei o programa mas a opção de mostrar 456 no display é algo como a cada pressionada desloque a posição de impressão no display. Algo como (chute)
 


//...
unsigned char i=1;
//...
Lcd_Out(2,i++,txt2);//ESCREVE NO LCD SEGUNDA LINHA

Consulte o help da sua função lcd_out pra ver a função dos argumentos

Muito obrigado ajudou muito, achei duas soluções para o problema, a primeira foi da maneira que você falou, vai atribuindo valores e pula para segunda coluna, sendo assim depois desse processo basta ler o LCD através do microcontrolador, habilitando o modo leitura do LCD. O segundo método, nao precisa ter um LCD para atribuir os dígitos sequencialmente, basta  usar um laço while e atribuir cada digito em uma posição do vetor e depois juntar ambas partes veja:

 

while(RE1_bit == 0)
     {
     char txt1[] = "PRIMEIRO DIGITO";
     Lcd_Out(1,1,txt1);//ESCREVE NO LCD PRIMEIRA LINHA
     teclado();
     soma[0] = digito*10;
     }
     
     delay_ms(500);
     Lcd_Cmd(_LCD_CLEAR);// Clear display
     delay_ms(500);
     
     while(RE1_bit == 0)
     {
     char txt1[] = "SEGUNDO DIGITO";
     Lcd_Out(1,1,txt1);//ESCREVE NO LCD PRIMEIRA LINHA
     teclado();
     soma[1] = digito;
     }
     delay_ms(500);
     valor = soma[0] + soma[1];
     delay_ms(500);

     }

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!