📄 keypad.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 + -