Új hozzászólás Aktív témák

  • don_peter

    senior tag

    Hölgyek, Urak segítséget szeretnék kérni alfanumerikus 4x4-es keypad programjának megírásához.
    Angol ABC és 0-9-ig számok lennének kb. mint a telefonnál vagy hasonlóan gondoltam kivitelezni.
    Tudtok segíteni elméletben vagy akár gyakorlatban?
    Hogyan lehet ezt legegyszerűbben megírni?
    P18F4550-es mikrokontroller fogja feldolgozni az adatokat.
    Ilyen lenne a keypad:

    A sima 16 gomb kezelésére írtam már programot, talán ebből ki lehetne indulni csak nem tudom, hogy miként vagy milyen irányban haladjak tovább..
    A megírt kódom most így néz ki:

    #include <delays.h>

    #define SOROK LATD //Sorok
    #define oszlop1 PORT_B4 //Oszlopok bemenet
    #define oszlop2 PORT_B5
    #define oszlop3 PORT_B6
    #define oszlop4 PORT_B7
    #define MAGAS 1
    #define ALACSONY 0

    /*----- Prototípus --------*/
    unsigned char get_key();

    unsigned int bill_ertek; //Globális változó

    void main(void){

    unsigned int i,k=0;

    ADCON1 = 7; //Analóg portok digitálisra állítva
    TRISB = 0xf0; //B port felső 4 bit (nagyobb helyi értéken 7:4) bemenet
    //alsó 4 bit (kisebb helyi értéken 3:0) kimenet
    //0b11110000

    while(1){

    bill_ertek = get_key();

    Delay10TCYx(10);
    }//while()
    }//main()

    //Függvények
    unsigned char get_key(){
    unsigned int i, k=0;
    for(i=0; i<4; i++){
    SOROK = (0x08>>i); //Léptetjük a sorok szintjét
    k++;
    if(oszlop1 == MAGAS){
    while(oszlop1==MAGAS); //Várakozunk a gomb felengedéséig
    return k;
    }
    k++;
    if(oszlop2 == MAGAS){
    while(oszlop2==MAGAS); //Várakozunk a gomb felengedéséig
    return k;
    }
    k++;
    if(oszlop3 == MAGAS){
    while(oszlop3==MAGAS); //Várakozunk a gomb felengedéséig
    return k;
    }
    k++;
    if(oszlop4 == MAGAS){
    while(oszlop4==MAGAS); //Várakozunk a gomb felengedéséig
    return k;
    }
    if(i>0){ //Ha a második lefutásnál sincs találat
    k=(i+1)*4;
    }else if(i==3){ //Ha az utolsó is lepörgött nulláztuk k-t
    k=0;
    }else{ //Első lefutás után a k értéke 4 lesz
    k=4;
    }
    }
    return ALACSONY;
    }

    Minden ötletet szívesen fogadok.

Új hozzászólás Aktív témák

Hirdetés