Página 1 de 1

Repitibilidade de uma tecla

MensagemEnviado: 02 Out 2007 21:08
por jrmanke
Olá a todos..

preciso fazer com que ao precionar um tecla ela incrementa um valor e mostre no LCD ( até ai tudo certo ), mas ao manter esta tecla precionada o incremento deste valor seja aumentado gradativamente ( parecido com a parametrização de inversor de frequencia ).
Alguem pode me orientar para resolver isso??

Att

Johnny

MensagemEnviado: 02 Out 2007 21:55
por wgc
Olha, basicamente o que voce tem que fazer é checar se o pino referente a tecla esta no estado inverso a posicao de repouso dele.

Por ex: Se a posicao normal dele é desligado (contato aberto)
Quando vc aperta-lo ele vai estar ligado (contato fechado) 5v.

Depois disso o uC tem que ter uma instrucao que verifique o estado do pino a cada 100ms por ex, dessa forma se vc mantelo precionado ele vai incrementar e incrementar ate vc solta o botao.


Agora como fazer o codigo para isso, ate tenho ideia mas no momento nao vou poder te ajuda pq to o dia todo tentando entender esses exemplos do livro da Wagner da Silva Zanco e ate agora nao funcionou. :(

MensagemEnviado: 02 Out 2007 22:33
por wgc
N é bem o que vc queria mas deve te ajudar.

//-----------------------------------------------------------------------------------
// Autor: Marcelo Gonçalves Damasceno
// Data: Abril/2006
// Compilador: CCS-C (PCW) ver. 3.150
//-----------------------------------------------------------------------------------
// *** Inclusão das bibliotecas ***
#include <16F628.h>
//-----------------------------------------------------------------------------------
// *** Configurações do Projeto ***
#use delay(clock=4000000) //informa ao sistema o frequência
//de clock, para temporização
#fuses NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,INTRC_IO //palavras de config.
//-----------------------------------------------------------------------------------
// *** Variáveis globais ***
int saida; //por ser global a variável pode ser acessada dentro de qualquer função
//-----------------------------------------------------------------------------------
// *** Funções ***
void up(void){

while (!input(PIN_a0)) ; //debounce da chave
shift_right(&saida,8,0); //muda o passo do pot
output_b(saida); //saida de bit de controle do pot
}

void down(void){

while(!input(PIN_a1)) ; //debounce da chave
if(!bit_test(saida,7)){ //verifica se o valor do pot está no mínimo
shift_left(&saida,8,1); //muda o passo do pot
output_b(saida); //saida de bit de controle do pot
}
}

//-----------------------------------------------------------------------------------
// *** Função principal ***
void main(void){
saida=0xff; //pot tem seu valor inicial mínimo
output_b(saida); //saida de bit de controle do pot
while(1){ //faz infinitamente
if(!input(PIN_a0)) up(); //chama a função para subir valor se acionada sw1
if(!input(PIN_a1)) down(); //chama a função para descer valor se acionada sw2
delay_ms(50);
}
}

//-----------------------------------------------------------------------------------
// *** Fim do código ***