<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=22&amp;t=3115&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-10T18:05:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=3115&amp;mode</id>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2016-01-10T18:05:25+01:00</updated>
<published>2016-01-10T18:05:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150181#p150181</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150181#p150181"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150181#p150181"><![CDATA[
DZIĘKI.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 10 sty 2016, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2016-01-10T10:54:24+01:00</updated>
<published>2016-01-10T10:54:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150146#p150146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150146#p150146"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=150146#p150146"><![CDATA[
Witam a czy jest możliwość zrobienia takiej jak by przejściówki że mikrokontroler emuluje klawiaturę podłączoną do PC (podłączam mikrokontroler pod usb lub PS2 oczywiście przez jakąś przejściówką a komputer wykrywa to jako klawiaturę.)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 10 sty 2016, o 10:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-05-14T21:58:50+01:00</updated>
<published>2013-05-14T21:58:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36962#p36962</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36962#p36962"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36962#p36962"><![CDATA[
Co do zawieszenia się to chodzi oto że normalnie ona chodzi dobrze cały czas ale to zależy od programu w którym ona pracuje. Ja zamontowałem ja do odtwarzacza plików dźwiękowych wave. Z książki mirka do modulacji głosu to nie kiedy jak się coś źle nacisnęło za szybko czy jak to zacięła ale to może wina programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 14 maja 2013, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2013-05-14T21:37:51+01:00</updated>
<published>2013-05-14T21:37:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36958#p36958</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36958#p36958"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36958#p36958"><![CDATA[
JAk chcesz to STMA to jest na mojej stronie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 14 maja 2013, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-05-14T20:56:47+01:00</updated>
<published>2013-05-14T20:56:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36954#p36954</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36954#p36954"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36954#p36954"><![CDATA[
O jednej rzeczy tylko zapomniałem. Klawiatura musi posiadać złącze PS/2 ale dzięki przejściówce może podłączyć klawiaturę z USB sprawdzałem i działa.<br />I przy okazji udało mi się znaleźć schemat podłączeniowy klawiatury do uC. Chciałem zrobić schemat ale niestety jestem dopiero po formacie komputera i nie mam programu do tego. <!-- m --><a class="postlink" href="http://radzio.dxp.pl/pckeyboard/kbd_schemat.png" >http://radzio.dxp.pl/pckeyboard/kbd_schemat.png</a><!-- m -->  Dodam ze części mojej biblioteki nie pochodzą z tej strony <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 14 maja 2013, o 20:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kacperu2]]></name></author>
<updated>2013-05-14T20:40:37+01:00</updated>
<published>2013-05-14T20:40:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36951#p36951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36951#p36951"/>
<title type="html"><![CDATA[Re: Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36951#p36951"><![CDATA[
Tego właśnie szukałem... Dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1258">kacperu2</a> — 14 maja 2013, o 20:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-05-14T19:15:22+01:00</updated>
<published>2013-05-14T19:15:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36939#p36939</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36939#p36939"/>
<title type="html"><![CDATA[Klawiatura od PC do AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3115&amp;p=36939#p36939"><![CDATA[
Witam<br />Jest to mój pierwszy projekt który tu prezentuje wiec proszę o wyrozumiałość. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Kiedyś brakowało mi przycisków do sterowania atmegą więc akurat Pan mirek zrobił bibliotekę pod pilot RC5 było to strzał w 10, gdyż pilot posiada sporo przycisków. Jednak ja chciałem zrobić taki edytor na karcie teleVGA i chciałem tam wprowadzać tekst. Przeszukując internet natrafiłem na kilka bibliotek do obsługi klawiatury jednak w komentarzach pisało ze żadna nie działa a jeśli działa to kilka przycisków itp. Postanowiłem taką samemu zrobić. Korzystałem z internetu oraz z książki Pana mirka. Efektem mojej pracy jest w pełni działająca klawiatura która obsługuje klawiatury wraz z dodatkowymi przyciskami<br /><br />Biblioteka obsługuje wszystkie przyciski na klawiaturze, robiłem ją kiedyś więc nie ma w niej jeszcze callbacków.<br />Do programu dostajemy 2 zmienne oraz 2 funkcje ponieważ litery są zapisywane do jednej zmiennej a pozostałe przyciski do innej to ułatwia prace z programami. Dodatkowo jest to zmienna nieblokująca programu i szybka a jeśli ktoś by chciał zablokować program do czasu naciśnięcia przycisku to jest i taka funkcja. W pliku nagłówkowym .h mamy też możliwość ustalenia czy te zmienne maja się zerować czy nie. Polega to na tym że gdy wciskamy przycisk i ustawimy na zerowanie zmiennych to ta zmienna będzie miała wartość kodu ANSCi lub innych klawiszy funkcyjnych od momentu wciśnięcia klawisza aż do momentu zwolnienia klawisza. Jeśli ustawimy żeby zmienne się nie zerowały to wtedy w programie musimy ją zerować. Wygląda to na mętlik niepotrzebny ale mi to się przydaje. Nazwy klawiszy funkcyjnych są zdefiniowane nazwy w pliku .h<br />Biblioteka posiada oczywiście przyjazny wybór portu jednak !uwaga! program działa na INTx więc bibliotekę przystosowałem automatycznie do zmiany tego inta w pliku .h Gdy naciśniemy shift i jakąś literę to ta litera będzie duża a bez shifta mała, to samo dotyczy znaków &lt;,&gt;,:,&quot;, i pozostałe. Jest to automatycznie ustawiane oraz nie posiada polskich znaków. Od lini DATA jak i CLK należy dać rezystor do +5V ok 4,7kom<br />Jeśli coś by nie chciało chodzić to pisać chętnie odpowiem i pomogę.<br />Jeszcze takie 2 małe uwagi czasami klawiatura przestaje działać żaden przycisk nie chodzi, tego niestety nie wiem jak naprawić ale dzieję się to rzadko i w określonych sytuacjach np. gdy zmieniamy wartość zmiennej to może się zaciąć. Mi tylko wtedy się zacina. Kolejna uwaga to przed inicjalizacją biblioteki należy dać opóźnienie ok 2s może mniej. gdyż klawiatura nie zdąży się zainicjować.<br />A teraz biblioteka. Przykładowego programu nie podaję ale jeśli ktoś by miał kłopot to wtedy ewentualnie napiszę. biblioteka napisana na atmega32 i wewnętrzny oscylator 8Mhz. To chyba nie ma znaczenia bo timerów nie ma więc powinna chodzić przy wyższej częstotliwości<br />Powiem tyle że w warunku if sprawdzamy czy ta zmienna przyjmuje np. literę lub liczbę dla klawiszy funkcyjnych. A w main musimy tylko ja zainicjować i biblioteka jest gotowa do pracy<br />Jak widać nie jestem dobry w opisywaniu więc może ciężko to zrozumieć. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />  keyboard.c<br />[syntax=c]/*<br /> * keyboard.c<br /> *<br /> *  Created on: 2013-02-11<br /> *      Author: Janadamis<br /> *<br /> *  Biblioteka do obsługi klawiatury pod PS2 dla mikroprocesora AVR Atmega32.<br /> *  Biblioteka może odczytywać nadlatujące dane z klawiatury<br /> *  bez możliwości wysyłania danych do klawiatury.<br /> *  Do użytku w swoim programie udostępniono nastepujace parametry:<br /> *<br /> *  -Funkcje keyboardwait(); która zastopuje program do czasu naciśniecia<br /> *   przycisku znakowego.<br /> *  -Funkcja keyswitchwait(); która zastopuje program do czasu naciśnięcia<br /> *   przycisku funkcyjnego.<br /> *  -zmienna key_board przybierająca kod ASCII wciśnietego klawisza znakowego.<br /> *  -zmienna key_switch przybierająca numer(1-60) wciśniętego klawisza<br /> *   funkcyjnego podanego w pliku keyboard.h<br /> *  Źródło http://leon-instruments.blogspot.com/<br /> *  Wszelkie prawa zastrzeżone<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;keyboard.h&quot;<br /><br />// przerwanie jest wywoływane każdym zboczem opadającym<br />// na sygnale zegarowym generowanym przez klawiaturę.<br />// procedura obsługi przerwania zewnętrznego<br />#if PS2_CLK_BIT  == 2<br />  #define USE_INT0<br />  ISR(INT0_vect)<br />#elif PS2_CLK_BIT == 3<br />  #define USE_INT1<br />  ISR(INT1_vect)<br />#endif<br />{<br />static uint8_t nrbitu;<br />    static uint8_t shift;<br />    static uint8_t poprzedni;<br />    static uint8_t ignoruj;<br />    static uint8_t dane;<br /><br />    // Odczytywanie 8-bitowego scan-code<br />    if(nrbitu == 0) {            // bit startu ignorujemy<br />        nrbitu++;<br />        return;<br />    } else if(nrbitu &gt;= 1 &amp;&amp; nrbitu &lt;=8) { // bity od 1 do 8 to dane<br />        dane = dane &gt;&gt; 1;  //zaczynamy od bitu najmłodszego do najstarszego<br />        if(PS2_DATA_PIN &amp; (1&lt;&lt;PS2_DATA_BIT)) dane |= _BV(7);<br />        nrbitu++;<br />        return;<br />    } else if(nrbitu == 9) {    // bit parzystości ignorujemy<br />        nrbitu++;<br />        return;<br />    } else if(nrbitu &gt;= 10 ) {    // bit stopu<br />        nrbitu = 0;<br /><br />        // rozpoczęcie zmiany scancode przycisków na liczby<br />        if(poprzedni != 0xF0 &amp;&amp; (dane == 0x12 || dane == 0x59)) {   // shift<br />        shift = 1;<br />        poprzedni = dane;<br />        return;<br />        }<br /><br />        if(ignoruj) {//Ignorowanie kolejno nadlatujacych danych<br />            --ignoruj;<br />            dane = 0;<br />            poprzedni = 0;<br />            return;<br />        }<br /><br />        if(poprzedni == 0xF0) {     // Ignorowanie zwolnionego klawisza<br />            if(dane == 0x12 || dane == 0x59) {       // shift<br />                shift = 0;<br /><br />            }<br />            poprzedni = 0;<br />            return;<br />        }<br /><br />        if(dane == 0xF0) {             // sygnal zwolnienia klawisza<br />            poprzedni = dane;<br /><br />    #if Zeruj_key_board   == 1<br />            key_board=0;<br />    #endif<br />#if Zeruj_key_switch  == 1<br />            key_switch=0;<br />#endif<br /><br />            return;<br />        }<br /><br />   if( (poprzedni == 0xF0) &amp;&amp; (dane == 0x77) ) {<br />      // Samoistne zerowanie klawisza pause po odebraniu 2 ostatnich danych<br />        key_switch=0;<br />        poprzedni = 0;<br />            dane = 0;<br />            return;<br />        }<br />     if(dane == 0xE1) {<br />     // klawisz PAUSE przy użyciu tzeba wyzerować samemu w programie<br /> // albo odblokowac poprzenią funkcję<br />     // klawiatura wysyła E1,14,77,E1,F0,14,F0,77<br />     // rozpoznawany jest tylko pierwszy kod, 5 kolejnych jest ignorowane<br />     // po czym 2 ostatnie są rozpoznawane jako zwolnienie przycisku.<br />            key_switch = 13;<br />            ignoruj = 5;<br />            poprzedni = 0;<br />            dane = 0;<br />            return;<br />        }<br /><br />        if(dane == 0xE0) {        // sygnal poprzedzajacy klawisze funkcyjne<br />                   poprzedni = dane;<br />                   return;<br />           }<br /><br />        if(poprzedni == 0xE0 ) {<br />                   switch(dane) {<br />                       case 0x75: {key_switch = 14; break;}//Up    strzałki<br />                       case 0x6b: {key_switch = 15; break;}//Leftstrzałki<br />                       case 0x72: {key_switch = 16; break;}//downstrzałki<br />                       case 0x74: {key_switch = 17; break;}//rightstrzałki<br />                       case 0x5a: {key_switch = 18; break;}//enter numeryczna<br />                       case 0x4a: {key_board = '/'; return;}  //numeryczna<br />                       case 0x1f: {key_switch = 19; break;}//L gui<br />                       case 0x27: {key_switch = 20; break;}//P gui<br />                       case 0x14: {key_switch = 21; break;}//P ctrl<br />                       case 0x2f: {key_switch = 22; break;}//APPS<br />                       case 0x7c: {key_switch = 23; break;}//print screan<br />                       case 0x70: {key_switch = 24; break;}//insert<br />                       case 0x6c: {key_switch = 25; break;}//home<br />                       case 0x7d: {key_switch = 26; break;}//page up<br />                       case 0x11: {key_switch = 27; break;}//P alt<br />                       case 0x71: {key_switch = 28; break;}//delate<br />                       case 0x7a: {key_switch = 29; break;}//page down<br />                       case 0x69: {key_switch = 30; break;}//end<br />                       //Klawisze dodatkowe funkcyjne<br />                       case 0x32: {key_switch = 31; break;}//Volume up<br />                       case 0x21: {key_switch = 32; break;}//Volume down<br />                       case 0x34: {key_switch = 33; break;}//play/pause<br />                       case 0x3a: {key_switch = 34; break;}//www home<br />                       case 0x48: {key_switch = 35; break;}//email<br />                       case 0x3b: {key_switch = 36; break;}//stop<br />                       case 0x23: {key_switch = 37; break;}//mute<br />                       case 0x2b: {key_switch = 38; break;}//calkulator<br />                       case 0x40: {key_switch = 39; break;}//my computer<br />                       case 0x4d: {key_switch = 40; break;}//new track<br />                       case 0x15: {key_switch = 41; break;}//Previous Track<br />                       case 0x50: {key_switch = 42; break;}//media select<br />                       case 0x10: {key_switch = 43; break;}//WWW Search<br />                       case 0x38: {key_switch = 44; break;}//WWW Back<br />                       case 0x30: {key_switch = 45; break;}//WWW Forward<br />                       case 0x28: {key_switch = 46; break;}//WWW Stop<br />                       case 0x20: {key_switch = 47; break;}//WWW Refresh<br />                       case 0x18: {key_switch = 48; break;}//WWW Favorites<br />                       case 0x37: {key_switch = 49; break;}//Power<br />                       case 0x3f: {key_switch = 50; break;}//Sleep<br />                       case 0x5e: {key_switch = 51; break;}//Wake<br />                       default:   key_board = 0; key_switch = 0; return;<br />                   }<br />                   poprzedni = 0;<br />                   dane = 0;<br />                   return;<br />               }<br />        if(poprzedni != (0xE0||0xF0) )<br />        {<br />        switch(dane) // przetwarzanie scankodow klawiatury na ASCII<br />{<br />//klawisze funkcyjne<br />case 0x7e: {key_switch = 52; return;}        // scroll lock<br />case 0x77: {key_switch = 53; return;}        // numlock<br />case 0x14: {key_switch = 54; return;}        //L ctrl<br />case 0x11: {key_switch = 55; return;}        //L alt<br />case 0x58: {key_switch = 56; return;}        // caps lock<br />case 0x0d: {key_switch = 57; return;}        // tab<br />case 0x5a: {key_switch = 58; return;}        // enter<br />            case 0x76: {key_switch = 59; return;}        // escape<br />            case 0x66: {key_switch = 60; return;}        // backspace<br />            //Koniec klawiszy funkcyjnych<br />            case 0x1c:<br />                if(shift) {key_board = 'A'; return;}<br />                else {key_board = 'a'; return;}<br />            case 0x32:<br />                if(shift) {key_board = 'B'; return;}<br />                else {key_board = 'b'; return;}<br />            case 0x21:<br />                if(shift) {key_board = 'C'; return;}<br />                else {key_board = 'c'; return;}<br />            case 0x23:<br />                if(shift) {key_board = 'D'; return;}<br />                else {key_board = 'd'; return;}<br />            case 0x24:<br />                if(shift) {key_board = 'E'; return;}<br />                else {key_board = 'e'; return;}<br />            case 0x2b:<br />                if(shift) {key_board = 'F'; return;}<br />                else {key_board = 'f'; return;}<br />            case 0x34:<br />                if(shift) {key_board = 'G'; return;}<br />                else {key_board = 'g'; return;}<br />            case 0x33:<br />                if(shift) {key_board = 'H'; return;}<br />                else {key_board = 'h'; return;}<br />            case 0x43:<br />                if(shift) {key_board = 'I'; return;}<br />                else {key_board = 'i'; return;}<br />            case 0x3b:<br />                if(shift) {key_board = 'J'; return;}<br />                else {key_board = 'j'; return;}<br />            case 0x42:<br />                if(shift) {key_board = 'K'; return;}<br />                else {key_board = 'k'; return;}<br />            case 0x4b:<br />                if(shift) {key_board = 'L'; return;}<br />                else {key_board = 'l'; return;}<br />            case 0x3a:<br />                if(shift) {key_board = 'M'; return;}<br />                else {key_board = 'm'; return;}<br />            case 0x31:<br />                if(shift) {key_board = 'N'; return;}<br />                else {key_board = 'n'; return;}<br />            case 0x44:<br />                if(shift) {key_board = 'O'; return;}<br />                else {key_board = 'o'; return;}<br />            case 0x4d:<br />                if(shift) {key_board = 'P'; return;}<br />                else {key_board = 'p'; return;}<br />            case 0x15:<br />                if(shift) {key_board = 'Q'; return;}<br />                else {key_board = 'q'; return;}<br />            case 0x2d:<br />                if(shift) {key_board = 'R'; return;}<br />                else {key_board = 'r'; return;}<br />            case 0x1b:<br />                if(shift) {key_board = 'S'; return;}<br />                else {key_board = 's'; return;}<br />            case 0x2c:<br />                if(shift) {key_board = 'T'; return;}<br />                else {key_board = 't'; return;}<br />            case 0x3c:<br />                if(shift) {key_board = 'U'; return;}<br />                else {key_board = 'u'; return;}<br />            case 0x2a:<br />                if(shift) {key_board = 'V'; return;}<br />                else {key_board = 'v'; return;}<br />            case 0x1d:<br />                if(shift) {key_board = 'W'; return;}<br />                else {key_board = 'w'; return;}<br />            case 0x22:<br />                if(shift) {key_board = 'X'; return;}<br />                else {key_board = 'x'; return;}<br />            case 0x35:<br />                if(shift) {key_board = 'Y'; return;}<br />                else {key_board = 'y'; return;}<br />            case 0x1a:<br />                if(shift) {key_board = 'Z'; return;}<br />                else {key_board = 'z'; return;}<br /><br /><br />            case 0x16:<br />                if(shift) {key_board = '!'; return;}<br />                else {key_board = '1'; return;}<br />            case 0x1e:<br />                if(shift) {key_board = '@'; return;}<br />                else {key_board = '2'; return;}<br />            case 0x26:<br />                if(shift) {key_board = '#'; return;}<br />                else {key_board = '3'; return;}<br />            case 0x25:<br />                if(shift) {key_board = '$'; return;}<br />                else {key_board = '4'; return;}<br />            case 0x2e:<br />                if(shift) {key_board = '%'; return;}<br />                else {key_board = '5'; return;}<br />            case 0x36:<br />                if(shift) {key_board = '^'; return;}<br />                else {key_board = '6'; return;}<br />            case 0x3d:<br />                if(shift) {key_board = '&amp;'; return;}<br />                else {key_board = '7'; return;}<br />            case 0x3e:<br />                if(shift) {key_board = '*'; return;}<br />                else {key_board = '8'; return;}<br />            case 0x46:<br />                if(shift) {key_board = '('; return;}<br />                else {key_board = '9'; return;}<br />            case 0x45:<br />                if(shift) {key_board = ')'; return;}<br />                else {key_board = '0'; return;}<br />            case 0x4e:<br />                if(shift) {key_board = '_'; return;}<br />                else {key_board = '-'; return;}<br />            case 0x55:<br />                if(shift) {key_board = '+'; return;}<br />                else {key_board = '='; return;}<br />            case 0x5d:<br />                if(shift) {key_board = '|'; return;}<br />                else {key_board = 92; return;}<br />            case 0x54:<br />                if(shift) {key_board = '{'; return;}<br />                else {key_board = '&#91;'; return;}<br />            case 0x5b:<br />                if(shift) {key_board = '}'; return;}<br />                else {key_board = '&#93;'; return;}<br />            case 0x4c:<br />                if(shift) {key_board = ':'; return;}<br />                else {key_board = ';'; return;}<br />            case 0x52:<br />                if(shift) {key_board = '&quot;'; return;}<br />                else {key_board = 39; return;}<br />            case 0x41:<br />                if(shift) {key_board = '&lt;'; return;}<br />                else {key_board = ','; return;}<br />            case 0x49:<br />                if(shift) {key_board = '&gt;'; return;}<br />                else {key_board = '.'; return;}<br />            case 0x4a:<br />                if(shift) {key_board = '?'; return;}<br />                else {key_board = '/'; return;}<br />            case 0x0e:<br />                if(shift) {key_board = '~'; return;}<br />                else {key_board = '`'; return;}<br /><br />            case 0x29: key_board = ' '; return;<br />            case 0x70: key_board = 0; return;        // keypad<br />            case 0x69: key_board = 1; return;        // keypad<br />            case 0x72: key_board = 2; return;        // keypad<br />            case 0x7a: key_board = 3; return;        // keypad<br />            case 0x6b: key_board = 4; return;        // keypad<br />            case 0x73: key_board = 5; return;        // keypad<br />            case 0x74: key_board = 6; return;        // keypad<br />            case 0x6c: key_board = 7; return;        // keypad<br />            case 0x75: key_board = 8; return;        // keypad<br />            case 0x7d: key_board = 9; return;        // keypad<br />            case 0x71: key_board = '.'; return;      // keypad<br />            case 0x79: key_board = '+'; return;      // keypad<br />            case 0x7b: key_board = '-'; return;      // keypad<br />            case 0x7c: key_board = '*'; return;      // keypad<br /><br />            case 0x05: key_switch = 1; return;       // F1<br />            case 0x06: key_switch = 2; return;       // F2<br />            case 0x04: key_switch = 3; return;       // F3<br />            case 0x0c: key_switch = 4; return;       // F4<br />            case 0x03: key_switch = 5; return;       // F5<br />            case 0x0b: key_switch = 6; return;       // F6<br />            case 0x83: key_switch = 7; return;       // F7<br />            case 0x0a: key_switch = 8; return;       // F8<br />            case 0x01: key_switch = 9; return;       // F9<br />            case 0x09: key_switch = 10; return;      // F10<br />            case 0x78: key_switch = 11; return;      // F11<br />            case 0x07:  key_switch = 12; return;     // F12<br /><br />            default:   key_board = 0; key_switch = 0; return;<br />}<br />        }<br />}<br />}<br /><br />void initkeyboard(void) {// Inicjalizacja kalwiatury/ps2<br /><br />  PS2_DATA_DDR &amp;= ~(1&lt;&lt;PS2_DATA_BIT);  // kierunek pinu DATA jako wejście<br />    PS2_CLK_DDR &amp;= ~(1&lt;&lt;PS2_CLK_BIT);    // kierunek pinu CLK jako wejście<br /><br />      #ifdef USE_INT0<br />    GICR |= (1 &lt;&lt; INT0);  // zezwolenie na przerwanie INT0<br />    MCUCR |= (1 &lt;&lt; ISC01); // przerwanie INT0 wyzwalane zboczem opadającym<br />  #endif<br /><br />  #ifdef USE_INT1<br />    GICR |= (1 &lt;&lt; INT1);  // zezwolenie na przerwanie INT1<br />    MCUCR |= (1 &lt;&lt; ISC11); // przerwanie INT1 wyzwalane zboczem opadającym<br />  #endif<br /><br />  }<br /><br /><br /> uint8_t keyboardwait(void) {<br />     // funkcja czeka, aż użytkownik wciśnie jakiś klawisz znakowy,<br /> //czyli jak zmienna key_board przybierze inną wartość niż 0<br /><br />      uint8_t bufor;<br />      while(!(bufor=key_board));<br />      key_board = 0;<br />      return bufor;<br />  }<br /><br /> uint8_t keyswitchwait(void) {<br />     // funkcja czeka, aż użytkownik wciśnie jakiś klawisz funkcyjny,<br /> //czyli jak zmienna key_switch przybierze inną wartość niż 0<br /><br />      uint8_t bufor;<br />      while(!(bufor=key_switch));<br />      key_switch = 0;<br />      return bufor;<br />  }[/syntax]<br /><br /> keyboard.h<br />[syntax=c]/*<br /> * keyboard.h<br /> *<br /> *  Created on: 2013-02-11<br /> *      Author: Janadamis<br /> *<br /> *Biblioteka do obsługi klawiatury pod PS2 dla mikroprocesora AVR Atmega32.<br /> *  Biblioteka może odczytywać nadlatujące dane z klawiatury<br /> *  bez możliwości wysyłania danych do klawiatury.<br /> *  Do użytku w swoim programie udostępniono nastepujace parametry:<br /> *<br /> *  -Funkcje keyboardwait(); która zastopuje program do czasu naciśniecia<br /> *   przycisku znakowego.<br /> *  -Funkcja keyswitchwait(); która zastopuje program do czasu naciśnięcia<br /> *   przycisku funkcyjnego.<br /> *  -zmienna key_board przybierająca kod ASCII wciśnietego klawisza znakowego.<br /> *  -zmienna key_switch przybierająca numer(1-60) wciśniętego klawisza<br /> *   funkcyjnego podanego w pliku keyboard.h<br /> *  Źródło http://leon-instruments.blogspot.com/<br /> *  Wszelkie prawa zastrzeżone<br /> */<br /><br />#ifndef KEYBOARD_H_<br />#define KEYBOARD_H_<br /><br />//Zerowanie key_board, key_switch<br />//1 - zmienna sie zeruje<br />//0 -  zmienna nie jest zerowana<br />//  W przypadku 0 trzeba je zerować w swoim programie<br />#defineZeruj_key_board0<br />#defineZeruj_key_switch1<br /><br /><br />// definicje połączeń<br />#define PS2_DATA_DDR    DDRD<br />#define PS2_DATA_PORT    PORTD<br />#define PS2_DATA_PIN    PIND<br />#define PS2_DATA_BIT    4<br /><br />#define PS2_CLK_DDR        DDRD<br />#define PS2_CLK_PORT    PORTD<br />#define PS2_CLK_PIN        PIND<br />//#define PS2_CLK_BIT       2//INT0<br />#define PS2_CLK_BIT         3//INT1<br /><br /><br />//Zmienne globalne<br />volatile uint8_t key_board;//kody ASCII klawiszy znakowych<br />volatile uint8_t key_switch;//kody klawiszy funkcyjnych<br /><br /><br /> //Definicje stałych nazw klawiszy funkcyjnych<br />#defineF11// F1<br />#defineF22// F2<br />#defineF33// F3<br />#define F44       // F4<br />#define F55       // F5<br />#define F66       // F6<br />#define F77     // F7<br />#define F88      // F8<br />#define F99      // F9<br />#define F1010  // F10<br />#define F1111    // F11<br />#define F1212  // F12<br />#define PAUSE13// Pause<br />#defineUP14// Upstrzałki<br />#defineLEFT15// Leftstrzałki<br />#defineDOWN16// downstrzałki<br />#define RIGHT17      // Rightstrzałki<br />#define ENTERB18    // Enter numeryczna<br />#define LGUI19      //L gui<br />#define PGUI20     //P gui<br />#define PCTRL21      //P ctrl<br />#define APPS22     // APPS<br />#define PRT_SCR23  // Print screan<br />#define INSERT24    // Insert<br />#define HOME25  // Home<br />#define PAGE_UP26    // Page up<br />#define PALT27   // P alt<br />#defineDELETE28// Delate<br />#define PAGE_DOWN29      // Page down<br />#define END30      // End<br /><br /> //Klawisze dodatkowe funkcyjne<br />#define VOLUME_UP31      // Volume up<br />#define VOLUME_DOWN32      // Volume down<br />#define PLAY33     // Play/pause<br />#define WWWHOME34      // www home<br />#define EMAIL35      // Email<br />#define STOP36      // Stop<br />#define MUTE37      // Mute<br />#define CALCULATOR38      // Calculator<br />#define MY_COMPUTER 39      // My computer<br />#define NEW_TRACK40      // New track<br />#define PREVIOUS_TRACK41      // Previous Track<br />#define MEDIA_SELECT42      // Media select<br />#define WWWSEARCH43      // WWW Search<br />#defineWWWBACK44// WWW Back<br />#define WWWFORWARD45      // WWW Forward<br />#define WWWSTOP46      // WWW Stop<br />#defineWWWREFRESH47// WWW Refresh<br />#defineWWWFAVORITES48// WWW Favorites<br />#define POWER49    // Power<br />#define SLEEP50      // Sleep<br />#define WAKE51     // Wake<br />#defineSCROLL_LOCK52// Scroll lock<br />#defineNUMLOCK53// Numlock<br />#defineLCTRL54//L ctrl<br />#defineLALT55//L alt<br />#defineCAPSLOCK56// Caps lock<br />#defineTAB57// Tab<br />#defineENTERA58// Enter<br />#defineESC59// Escape<br />#defineBACKSPACE60// Backspace<br /><br />//definicje funkcji klawiatury<br />void initkeyboard(void);<br />uint8_t keyboardwait(void);<br />uint8_t keyswitchdwait(void);<br /><br />#endif /* KEYBOARD_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 14 maja 2013, o 19:15</p><hr />
]]></content>
</entry>
</feed>