Tasten an PIC softwaretechnisch lösen...
Hallo,
ich habe an einem PIC16F84 einige Taster angeschlossen und möchte sie nun mit einigen Funktionen belegen.
Für den Anfang habe ich mir gedacht, an jeder Taste einen Ton auszugeben.
In etwa so:
Taste 1 -> ein X Piep
Taste 2 -> zwei X Piep usw bis Taste 4 entwprechend 4 X Piep.
Allerdings ist es nicht so einfach.
Bei einer Taste klappt es, aber sobald eine zweite ansteuern wird, fängt es an wild zu werden.
Nämlich, Taste 1 -> ein Piep, Taste 2 -> nicht zwei sondern mal 4 mal 6 mal 7 oder endlos.
Weiter unten findet man das Programm mit dem ich den PIC für diese Funktion betreiben möchte.
Vielleicht kann mir der eine oder andere einen Tipp geben oder vielleicht gibt es auch eine elegantere Lösung.
Vielen Dank
Sech
// --------------------------------------------------------------------------------------------------------------------------------------------
#include <c:\cc5\cc5xfree\16f84a.h>
#pragma config |= 0b.1111.1111.0010
/*--------------------------------------------------------------------*/
/* KonfigWort -> Bit 1,0: 11-RC, 10-HS, 01-XT, 00-LP
Bit 2: 1-Watchdog Ein, 0-Watchdog Aus
Bit 3: 0-Power up Tmer Ein, 1-Power up Timer Aus
Bit 4...13: 0-Leseschutz Ein, 1-Leseschutz Aus*/
/*--------------------------------------------------------------------*/
int i;
void pause(void)
{
OPTION=2;
TMR0=131;
while(TMR0);
}
//------------------------------------------------------------------------------------
void verzoegerugn(void)
{
i=250;
while (i)
{
pause();
pause();
pause();
pause();
i--;
}
}
//--------------------------------------------------------------------------------------
void piep(void)
{
bit beep @ PORTB.0;
i=100;
while (i)
{
beep=1;
pause();
beep=0;
pause();
i--;
}
}
//--------------------------------------------------------------------------------------
void main(void)
{
int a=1;
char Taste;
TRISB=0b.0000.0000;
PORTB=0;
piep();
while(a!=0)
{
//sprung:
Taste = PORTA & 0b.0000.1111;
switch(Taste)
{
case 0:{PORTB=0; break;}
case 1:{piep();verzoegerugn();
break;}
case 2:{ piep();verzoegerugn();
i=2;
while(i)
{ //piep();verzoegerugn();
i--;
piep();verzoegerugn();
}
break;
}
/*case 3:{
i=3;
while(i)
{ //piep();verzoegerugn();
i--;
piep();verzoegerugn();
}
break;
}
case 4:{
i=4;
while(i)
{ //piep();verzoegerugn();
i--;
piep();verzoegerugn();
}
break;
}*/
}
}
//goto sprung;
}
// --------------------------------------------------------------------------------------------------------------------------------------------