Cần giúp Tạo thư viện quét keypad 4x4 codevisionavr

CG1

Học sinh phổ thông
#1
hi các bác,
như tiêu đề e muốn tạo thư viện quét keypad để lần sau có thể sử dụng cho các project khác 1 cách dễ dàng hơn, bác nào biết hướng dẫn e, hay có link nào có chi tiết cụ thể cho e xin. tiện thể góp ý cho e chương trình quét keypad này luôn ạ

define cho input:
Mã:
#define COL1 PINA.4
#define COL2 PINA.5
#define COL3 PINA.6
#define COL4 PINA.7
khai báo biến toàn cục:
Mã:
unsigned char step=0, keyTime=0, key=16, keyTemp=16;
chương trình quét keypad:
Mã:
void KeyScan()
    {
        char i,j;
        switch(step)
        {
            case 0: key=16;
                    keyTemp=16;
                    for(i=0, j=0b11111110; i<4; i++)
                    {
                        PORTA=j; 
                        j=j<<1;
                        j++;
                        if(!COL1)
                        {
                            keyTemp=0+(4*i);  step=1; break;
                        }
                        else if(!COL2)
                        {
                            keyTemp=1+(4*i); step=1; break;
                        }
                        else if(!COL3)
                        {
                            keyTemp=2+(4*i);step=1; break;
                        }                   
                        else if(!COL4)
                        {
                            keyTemp=3+(4*i); step=1; break;
                        }
                    }
                    break;
            case 1: keyTime++;
                    if(keyTime>10)
                    {
                        for(i=0, j=0b11111110; i<4; i++)
                        {
                            PORTA=j;
                            j=j<<1;
                            j++;
                            if(!COL1)
                            {
                                keyTemp=0+(4*i); break;
                            }
                            else if(!COL2)
                            {
                                keyTemp=1+(4*i); break;
                            }
                            else if(!COL3)
                            {
                                keyTemp=2+(4*i); break;
                            }                   
                            else if(!COL4)
                            {
                                keyTemp=3+(4*i); break;
                            }
                        }
                        step=2; break;
                    }                     
                    break;
            case 2: step=3;
                    key=keyTemp;
                    break;
            case 3: keyTime++;
                    if(keyTime>250)
                    {
                        keyTime=0;
                        step=0;
                    } 
                    break;
        };   
    }
gọi chương trình quét keypad trong Timer 1 sau mỗi 2ms:
Mã:
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xA240 >> 8;
TCNT1L=0xA240 & 0xff;
// Place your code here
     QuetPhim();
}
khai báo IO:
Mã:
void main(void)
{
     DDRA=0x0f;
     PORTA=0xff;
     while(1)
    {

    }
}
CG1
 

Quảng cáo Google