Moderadores: andre_luis, 51, guest2003, Renie
unsigned int contadorBotao;
#define TEMPO_FUNCAO_01 10
#define TEMPO_FUNCAO_02 20
#define TEMPO_FUNCAO_03 30
#define TEMPO_FUNCAO_04 40
#define TEMPO_FUNCAO_05 50
//int timer com resolução de 100 ms, digamos....
void rti_timer(void){
if(contadorBotao<TEMPO_FUNCAO_05)
contadorBotao++;
}
void main(void){
unsigned char tecla;
tecla = le_teclado();
if(tecla==PRESSIONADA){
if(contadorBotao ==TEMPO_FUNCAO_05)
contadorBotao = 0x00;
if(contadorBotao ==TEMPO_FUNCAO_05){
funcao_05();
contadorBotao = TEMPO_FUNCAO_05-1;
}
if(contadorBotao == TEMPO_FUNCAO_04)
funcao_04();
if(contadorBotao == TEMPO_FUNCAO_03)
funcao_03();
if(contadorBotao == TEMPO_FUNCAO_02)
funcao_02();
if(contadorBotao == TEMPO_FUNCAO_01)
funcao_01();
}
}
#define botao RA0 //push buttom pro gnd. não esquecer do pullup
#define a RA1 //sua variável 'a' como led p.ex.
//static bit a //ou se preferir como variável mesmo.
unsigned char contadorBotao;
//int timer com resolução de 100 ms, digamos....
void rti_timer(void){
if (!botao) contadorBotao++;
else contadorBotao=0;
}
unsigned char le_tecla(void)
{
unsigned char b=0;
contadorBotao=0;
while(botao);//pressione
while ((!botao) && (contadorBotao<20)));//2 seg de tecla pressionada=enter
if (contadorBotao>=20)
{
a=1;//entrou no menu. Pode...
while(!botão);//...tirar o dedo do botão
contadorBotao=0; //pra garantir
while(contadorBotao<20)//2 seg de tecla pressionada=enter
{
while(botao);//pressione
while ((!botao) && (contadorBotao<20)));//2 seg de tecla pressionada=enter
b++;
}
}
a=0;//saiu
while(!botao);//tira o dedo do botão pow
return b; //numero de vezes de botão pressionado
}
void main(void)
{
unsigned char t;
...
for(;;)
{
t=le_tecla();
if (t==1) funcao1();
...
if (t==x) funcaox();
}
}
#include <16F877A.h>
#use delay (clock=4000000)
#fuses HS, NOLVP, NOWDT, PUT, BROWNOUT
#use fast_io(A)
#use fast_io(B)
#define botao PIN_A4 //push buttom pro gnd. não esquecer do pullup
#define led PIN_B0 //sua variável 'a' como led p.ex.
unsigned char a=0;
unsigned char contadorBotao; // VARIAVEL PARA CONTAGEM DO BOTAO
//int timer com resolução de 100 ms, digamos....
void rti_timer(void)
{ // FUNÇÃO INICIA PERSSIONAMENTO DO BOTAO
if (!input(botao)) contadorBotao++; // S/O BOT PRESS INCREM VARI CONTADOR BOTAO
else contadorBotao=0; // SE NAO O CONTADOR VAI A ZERO
}
unsigned char le_tecla(void) // FUNÇÃO LER A TECLA
{
unsigned char b=0; // CRIA VARIAVEL B=0
contadorBotao=0; //CONTADOR VAI A ZERO NOVAMENTE
while(input(botao)) //pressione
while (!input(botao) && contadorBotao<20) //2 seg de tecla pressionada=enter
if (contadorBotao>=20)
{
a=1;//entrou no menu. Pode...
output_bit(led,a);
while(!input(botao)) //...tirar o dedo do botão
contadorBotao=0; //pra garantir
while(contadorBotao<20) //2 seg de tecla pressionada=enter
{
while(input(botao)) //pressione
while (!input(botao) && contadorBotao<20) //2 seg de tecla pressionada=enter
b++;
}
}
a=0;//saiu
while(!input(botao)) //tira o dedo do botão pow
return b; //numero de vezes de botão pressionado
}
void main(void)
{
set_tris_B(0b00000000);
output_B(0b00000000);
set_tris_A(0b00010000);
{
unsigned char t;
for(;;)
{
t=le_tecla();
if (t==1) output_bit(pin_b2,1);//funcao1();
if (t==2) output_bit(pin_b3,1);//funcaox();
}
}
}
#define TECLA_MODO_PADRAO 1
#define TECLA_MODO_MENU ~TECLA_MODO_PADRAO
#define TEMPO_3_SEGUNDOS xxxx // xxxx definido empiricamente
char ModoOperacaoTecla = TECLA_MODO_PADRAO ;
int TempoDeAcionamento = 0 ;
char contLED = 0 ;
//////////////////////////////////////////////////////////////////////
void AnalisaTeclaPressionada ( void )
{
if (input(botao)) // ENQUANTO SEGURO O BOTÃO APENAS MEDE O TEMPO
{
TempoDeAcionamento++ ;
DelayMS ( 1 ) ; // DELAY DE ALGUNS MILISEGUNDOS PODE SER NECESSARIO, AVALIAR...
}
else // BOTAO FOI LIBERADO, DECIDE A FUNCAO SELECIONADA
{
if ( TempoDeAcionamento < TEMPO_3_SEGUNDOS )
{
switch ( ModoOperacaoTecla )
{
case TECLA_MODO_PADRAO :
LED8 = ~LED8 // Realiza toggle do LED
break ;
case TECLA_MODO_MENU :
switch ( contLED++ )
{
Case 1 : LED2 = 1 ; break ;
Case 2 : LED3 = 1 ; break ;
Case 3 : LED4 = 1 ; break ;
Case 4 : LED5 = 1 ; break ;
Case 5 : LED6 = 1 ; break ;
Case 6 : LED7 = 1 ; break ;
Case 7 : contLED = 0 ; LED7=0; LED6=0; LED5=0; LED4=0; LED3=0; LED2=0 ; break ;
}
break ;
}
}
else \\ TempoDeAcionamento >= TEMPO_3_SEGUNDOS
{
switch ( ModoOperacaoTecla )
{
case TECLA_MODO_PADRAO : LED1 = 1 ; break ;
case TECLA_MODO_MENU : LED1 = 0 ; break ;
}
ModoOperacaoTecla = ~ModoOperacaoTecla ; // Alterna modo de operação
}
TempoDeAcionamento = 0 ;
}
}
//////////////////////////////////////////////////////////////////////
void main()
{
set_tris_B(0b00000000);
output_B(0b00000000);
set_tris_A(0b00010000);
while(true)
{
AnalisaTeclaPressionada() ;
}
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante