Stránka 1 z 2

klavesnice

Napsal: 11 bře 2009, 08:15
od teo
Netušítě někdo jak se dá ovládat tato klávesnice?
http://www.ges.cz/?ipp=12&lang=cz&cur=C ... ES06503821

resp mám to připojené na Atmel a nevím jak zjistit že je něco zmačknuto . . .

Napsal: 11 bře 2009, 08:35
od GeorgeB
Tak zvaná maticová klávesnice.
Info ohledně snímání z klávesnice například zde: http://programujte.com/index.php?akce=clanek&cl=2007012602-obsluha-maticove-klavesnice-3x4-tlacitka-asm51-jednochipem nebo například zde: http://dhservis.cz/dalsi_1/klavesnice.htm

Napsal: 11 bře 2009, 08:42
od BOBOBO
Našel jsem toto .

Napsal: 11 bře 2009, 10:59
od Crifodo
teo píše:mám to připojené na Atmel a nevím jak zjistit že je něco zmačknuto . . .


nepřeskočil jsi nějakou vývojovou větev? :twisted:

Napsal: 11 bře 2009, 13:08
od teo
tak já mám klavesnici připojenou přímo na P1.0 až P1.6.šlo by to zprovoznit asi nějak takto?

Kód: Vybrat vše

int stisknuto;
P1=0x7F;
if(P1==0x6F){
                   stisknuto=3;
                   goto exit;
                   }
if(P1==0x5F){
                   stisknuto=6;
                   goto exit;
                   }

a tak dale by to pokracovalo podobne. . .

Napsal: 11 bře 2009, 14:11
od Andrea
teo píše:tak já mám klavesnici připojenou přímo na P1.0 až P1.6.šlo by to zprovoznit asi nějak takto?

Kód: Vybrat vše

int stisknuto;
P1=0x7F;
if(P1==0x6F){
                   stisknuto=3;
                   goto exit;
                   }
if(P1==0x5F){
                   stisknuto=6;
                   goto exit;
                   }

a tak dale by to pokracovalo podobne. . .

Nešlo.

Napsal: 11 bře 2009, 14:56
od bohous1
Pokud budete mit tu klavesnici na jednom jedinem portu (registry DDRx a portx), tak
nejdrive musite nastavit cast portu jako vstupni a druhou jako vystupni s popotazenim do H. Pak budete cist registr PINx a maskovat pouze prislusne vstupni porty a da vam to vysledek.

Nezapomenout osetrit zakmity.

Pohodlne se to resi u nekterych AVR osetrenim preruseni od zmeny stavu portu.

Napsal: 18 bře 2009, 23:30
od endthe
no ja bych tu klavesnici resil takto ( v mem pripade 4x4) na 4 portech se rotuje 0 a na dalsich 4 se snima vysledek:

Kód: Vybrat vše

//definice portu klavesnice

DDRE=0x0F;
PORTE=0x0F;
while(1)
{
            //prvni sloupec
                PORTE =0b00001110;

//1
                if (bit_is_clear(PINE, 4)) ;
//4
                if (bit_is_clear(PINE, 5)) ;
//7
                if (bit_is_clear(PINE, 6)) ;
//*
                if (bit_is_clear(PINE, 7)) ;


                //druhy sloupec

                PORTE =0b00001101;
//2
                if (bit_is_clear(PINE, 4)) ;
//5
                if (bit_is_clear(PINE, 5)) ;
//8
                if (bit_is_clear(PINE, 6)) ;
//0
                if (bit_is_clear(PINE, 7)) ;

                //treti sloupec

                PORTE =0b00001011;
//3
                if (bit_is_clear(PINE, 4)) ;
//6
                if (bit_is_clear(PINE, 5)) ;
//9
                if (bit_is_clear(PINE, 6)) ;
//#
                if (bit_is_clear(PINE, 7)) ;


                //ctvrty sloupec

                PORTE =0b00000111;
//ESC
                if (bit_is_clear(PINE, 4)) ;
//F1
                if (bit_is_clear(PINE, 5)) manual();
//F2
                if (bit_is_clear(PINE, 6)) ;
//ENTER
                if (bit_is_clear(PINE, 7)) ;
               
}

Napsal: 24 bře 2009, 12:06
od teo
já jsem to naprogramoval podobně,ale nefunguje to.Rotuju taky 0 a pak testuju.

Kód: Vybrat vše

kl_start:
//1radek
P1=0x0E;
a=P1;
if(a==0xEE)
            {
              stisknuto=7;
              goto exit;
            }
if(a==0xDE)
            {
            stisknuto=8;
            goto exit;
            }
if(a==0xBE)
            {
            stisknuto=9;
            goto exit;
            }
//2radek
P1=0x0D;
a=P1;
if(a==0xED)
            {
            stisknuto=4;
            goto exit;
            }
if(a==0xDD)
            {
            stisknuto=5;
            goto exit;
            }
if(a==0xBD)
            {
            stisknuto=6;
            goto exit;
            }
//3radek
P1=0x0B;
a=P1;
if(a==0xEB)
            {
            stisknuto=1;
            goto exit;
            }
if(a==0xDB)
            {
            stisknuto=2;
            goto exit;
            }
if(a==0xBB)
            {
            stisknuto=3;
            goto exit;
            }
//4radek
P1=0x07;
a=P1;
if(a==0xE7)
            {
            stisknuto=11;//shift
            goto exit;
            }
if(a==0xD7)
            {
            stisknuto=0;
            goto exit;
            }
if(a==0xB7)
            {
            stisknuto=12;//ok
            goto exit;
            }
goto kl_start;
exit:

Napsal: 02 čer 2009, 12:49
od jano80
nieco jednoduchsie (menej pisania) =)

Kód: Vybrat vše

/*

klavesnica 3x4 tl.


PD0-------|
PD1----|  |
PD2-|  |  |
    |  |  |
    |  |  |
PD3-1--2--3
PD4-4--5--6
PD5-7--8--9
PD6-10-11-12

*/

#include <avr/io.h>
#include <util/delay.h>

unsigned char r,s;
unsigned char klavesa;



int main()
{

DDRB = 0XFF;   //PORTB nastaveny ako vystup
while(1)

{
   DDRD = 0X07; // DDRD 0,1,2 nastavene ako vystup v (log "0)
   PORTD = 0X78;// k PORTD 3,4,5,6 pripojene pull up
   
   if (bit_is_clear(PIND,3)) r=1;
   if (bit_is_clear(PIND,4)) r=4;
   if (bit_is_clear(PIND,5)) r=7;
   if (bit_is_clear(PIND,6)) r=10;
   
   _delay_us(50);//ustalenie portu

   DDRD = 0X78;// DDRD 3,4,5,6 nastavene ako vystup v (log "0")
   PORTD = 0X07;// k PORTD 0,1,2 pripojene pull up
   if (bit_is_clear(PIND,0)) s=2;
   if (bit_is_clear(PIND,1)) s=1;
   if (bit_is_clear(PIND,2)) s=0;
   
   
   klavesa = s+r; //spocita riadok + stlpec
   PORTB = klavesa;// vystup na port


}

};

Napsal: 02 čer 2009, 12:55
od Andrea
jano80 píše:nieco jednoduchsie (menej pisania) =)

A k čemu je tam tahle řádka?

Kód: Vybrat vše

   _delay_us(50);//ustalenie portu 

Napsal: 02 čer 2009, 13:00
od jano80
50 us ustalenie portu (bez toho to blbne zrejeme pomaly port)

Napsal: 02 čer 2009, 13:02
od Andrea
jano80 píše:50 us ustalenie portu (bez toho to blbne zrejeme pomaly port)

A kterého portu?

Napsal: 02 čer 2009, 13:04
od jano80
PORTD, vid. priklad...

Napsal: 02 čer 2009, 13:21
od Andrea
A jaký to má smysl, čekat 50us na ustálení portu, když se jeho stav následujícím příkazem mění?