Ir ao conteúdo
  • Cadastre-se

HERMINIO RODRIGUES JUNIOR

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Bom dia, estou tentando fazer uma chave seletora digital de 9 posições utilizando relés para chavear a posição que for selecionada, poderiam me dar dicas para fazer essa programação no mplab. A chave vai funcionar assim: com 3 botões touch, um para incrementar, outro para decrementar e um como enter, selecionando a posição desejada, dou o comando de enter e o relé referente á essa posição vai acionar algum componente ou operação em uma máquina. <> #include<P18F4550.h> #include<delays.h> // Configurações #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // Pinos do PORTB começam como //digitais #pragma config LVP = OFF // Desabilita gravação em baixa //tensão #pragma config DEBUG = ON // Habilita debug // Definições de hardware #define INC PORTBbits.RB0 // Botão incrementa #define DEC PORTBbits.RB1 // Botão decrementa #define TRV PORTBbits.RB2 // Chave libera trava "um pulso // por toque" #define DISP2 PORTEbits.RE0 // DISP2 #define DISP1 PORTEbits.RE2 // DISP1 #define DISPLAY PORTD // Segmentos do display ligados em PORTD void main(void){ int i = 0, valor; unsigned char dezena, unidade, aux0=0, aux1=0, aux=0; unsigned char tempo = 70; // tabela de dígitos do display - matriz de segmentos char table[] = {0b11110011, // P }; char table2[] = {0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111, // 9 }; // *** Inicialização ADCON1 = 0x0F; // Procurar no datasheet DDRD = 0x00; // Configura port D como saída DDREbits.RE0 = 0; // Configura RE0 como saída (DISP2) DDREbits.RE2 = 0; // Configura RE2 como saída (DISP1) DDRBbits.RB0 = 1; // Configura RB0 como entrada (INC) DDRBbits.RB1 = 1; // Configura RB0 como entrada (DEC) DDRBbits.RB2 = 1; // Configura RB0 como entrada (TRV) DISP1 = 0; // DISP1 desligado DISP2 = 1; // DISP2 desligado INTCON2bits.RBPU = 0; // Ativa pull-ups do portB for(;;){ if(!INC && !aux0){ // Incrementa i if(i < i++; if(TRV) aux0=1; // Para incremento de "um em um" } if(INC) aux0=0; if(!DEC && !aux1){ // Decrementa i if(i > 0) i--; if(TRV) aux1=1; // Para decremento de "um em um" } if(DEC) aux1=0; valor = i; // Transferindo i para a variável valor // Separando o valor em dígitos dezena = valor / 10; // Separa inteiro da dezena unidade = valor % 10; // Recupera resto da dezena // que é a unidade DISPLAY = table[dezena]; // Transfere para o display (PORT D) DISP1 = 0; // DISP1 desligado DISP2 = 1; // DISP2 ligado Delay1KTCYx(tempo); // Tempo que o display fica aceso DISP2 = 0; // DISP2 desligado DISPLAY = table2[unidade]; // Transfere para o display (PORT D) DISP1 = 1; // DISP1 ligado DISP2 = 0; // DISP2 desligado Delay1KTCYx(tempo); // Tempo que o display fica aceso DISP1 = 0; // DISP1 desligado } }

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...