⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keypad.c

📁 dsPIC30F4011 + 4*4 metrix Keypad(flexible pin I/O) + Timer0 service >> MPLAB Project files &
💻 C
字号:

#include  <p30f4011.h>  
#include  "..\h\keypad.h"

volatile struct keySTATUS Keypad;

extern  void initial_Keypad_port(void)
{
    TRIS_Row1 = 0;
    TRIS_Row2 = 0;
    TRIS_Row3 = 0;
    TRIS_Row4 = 0;

    Data_Row1 = 1;
    Data_Row2 = 1;
    Data_Row3 = 1;
    Data_Row4 = 1;

    TRIS_Colum1 = 1;
    TRIS_Colum2 = 1;
    TRIS_Colum3 = 1;
    TRIS_Colum4 = 1;
    Lat_Colum1 = 1;
    Lat_Colum2 = 1;
    Lat_Colum3 = 1;
    Lat_Colum4 = 1;
}

void row_Write(unsigned char dataOut)
{
    if(dataOut & 1) Data_Row1 = 1; else Data_Row1 = 0;
    if(dataOut & 2) Data_Row2 = 1; else Data_Row2 = 0;
    if(dataOut & 4) Data_Row3 = 1; else Data_Row3 = 0;
    if(dataOut & 8) Data_Row4 = 1; else Data_Row4 = 0;
}

unsigned char colum_Read(void)
{
    unsigned char retval;
    retval  = 0x00;
    retval |= (Data_Colum1<<0)|(Data_Colum2<<1)|(Data_Colum3<<2)|(Data_Colum4<<3); 
    return(retval); 
}

unsigned char decoder_KeyPAD(unsigned char keyIN)
{
    unsigned keyOut;

    return keyOut;
}

extern unsigned char scan_Key(void)
{
    // Used active low for read data , Pull-Up High all input(colum)PIN.
    const char row[4]={0x0E,0x0D,0x0B,0x07}; 
    unsigned char col;
    unsigned char tempVal;
    unsigned char count;

    col = 0;
    tempVal = 0;

    for(count=0;count<=3;count++)
    {
        row_Write(row[count]);
    	col  = colum_Read();     
        switch (col) 
        {
            case 0x0E : tempVal = tempVal+1; return tempVal;
            case 0x0D : tempVal = tempVal+2; return tempVal;
            case 0x0B : tempVal = tempVal+3; return tempVal;
            case 0x07 : tempVal = tempVal+4; return tempVal;
        }
        tempVal = tempVal+4;
    }
    row_Write(0x0F);
    return 0;
}

unsigned char KeyFlagCheck(unsigned char check)
{
    if(check==1){     // Check enable KeyFlag
        if(Keypad.keyFlag == 1) {Keypad.keyFlag = 0; return 1;}      
        if(Keypad.keyFlag == 0) return 0;      
    }
    // Set Disable KeyFlag
    if(check==0)  Keypad.keyFlag=0;

    return 0;
}

void Wait_LeaveKeypad(void)
{
   unsigned char  temp;
   do{ 
         while(!KeyFlagCheck(1));
         temp = scan_Key();
    }while(temp != 0);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -