Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 5 → Rev 6

/schemata/prenos/letadlo/SW/vysilac/posledni_funkcni_verze/keybord.c
0,0 → 1,134
//#DEFINE PL PIN_B3 // ovladani klavesnice
//#DEFINE STROBE_LED PIN_C0
//#DEFINE STROBE_KL PIN_C1
//#DEFINE DATA_OUT PIN_C2
//#DEFINE CP PIN_C3
//#DEFINE DATA_IN PIN_C4
 
#DEFINE znak_0 14
#DEFINE znak_1 10
#DEFINE znak_2 11
#DEFINE znak_3 12
#DEFINE znak_4 20
#DEFINE znak_5 21
#DEFINE znak_6 22
#DEFINE znak_7 04
#DEFINE znak_8 05
#DEFINE znak_9 06
#DEFINE znak_R 15
#DEFINE znak_F 16
#DEFINE znak_C 27
#DEFINE nic 80
 
 
void KL_init()
{
int8 i;
output_high(STROBE_KL);
output_high(STROBE_LED);
 
for (i=0;i<=7;i++)
{
output_low(DATA_IN);
output_high(CP);
output_low(CP);
}
output_low(STROBE_KL);
output_low(STROBE_LED);
output_high(CP);
output_high(PL);
}
 
void KL_CP(j)
{
int8 i;
for (i=0;i<=j;i++)
{
output_high(CP);
output_low(CP);
}
}
 
void LED(int8 LED) //rosviti LED 1-7
{
int i;
output_low(CP);
output_low(STROBE_LED);
for (i=0;i<=7;i++)
{
output_bit(DATA_IN,bit_test(LED,i));
output_high(CP);
output_low(CP);
};
output_high(STROBE_LED);
output_low(STROBE_LED);
}
 
int8 klavesa() //vrati cislo klavesy
{
int8 i;
int8 sloupec;
 
for(sloupec=0; sloupec<=7; sloupec++)
{
output_low(STROBE_KL);
output_low(DATA_IN);
for (i=0;i<=7;i++)
{ //nulovani sloupcu
output_high(CP);
output_low(CP);
}
 
output_high(DATA_IN);
output_high(CP); //zavedeni 1 do registru sloupcu
output_low(CP);
 
output_low(DATA_IN);
for (i=0;i<sloupec;i++) //nastaveni sloupce
{
output_high(CP);
output_low(CP);
}
 
output_high(STROBE_KL);
output_low(PL);
output_high(PL);
 
for (i=0;i<5;i++) //posunuti cteciho registru
{
output_high(CP);
output_low(CP);
}
 
/* if (1==input(DATA_OUT)) return(sloupec); // pokud je 4. radek
output_high(CP);
output_low(CP);
if (1==input(DATA_OUT)) return(sloupec); // pokud je 3. radek
output_high(CP);
output_low(CP);*/
if (1==input(DATA_OUT)) return(sloupec); // pokud je 0. radek
output_high(CP);
output_low(CP);
if (1==input(DATA_OUT)) return(0b1000 | sloupec); // pokud je 1. radek
output_high(CP);
output_low(CP);
if (1==input(DATA_OUT)) return(0b10000 | sloupec); // pokud je 2. radek
 
 
}
return(0x80); // nastavy nejvissi bit, ze neni nic zmacknuto
}
 
boolean read_KL(char *klv)
{
const char prev_tabulka[24]={'i','z','m','u','7','8','9','.','1','2','3','b','0','r','f','k','4','5','6','s',' ',' ','t','c'};
 
*klv = klavesa();
if (0x80==*klv) return(false);
else
{
*klv = prev_tabulka[*klv];
return(true);
}
}