#include "keyboard.h"
unsigned char keySta[] = {1,1,1,1,1,1,1};//按鍵狀態
unsigned int keyTime[] = {0,0};
unsigned char keyCnt[] = {0,0};
extern void CheckKey(unsigned char key);
void ScanKey()
{
static unsigned char keyBuff[] = {0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F};//保存按鍵狀態
unsigned char i;
keyBuff[0] = (keyBuff[0] << 1)|Key0;//讀取按鍵狀態
keyBuff[1] = (keyBuff[1] << 1)|Key1;//讀取按鍵狀態
keyBuff[2] = (keyBuff[2] << 1)|Key2;//讀取按鍵狀態
keyBuff[3] = (keyBuff[3] << 1)|Key3;//讀取按鍵狀態
keyBuff[4] = (keyBuff[4] << 1)|Key4;//讀取按鍵狀態
keyBuff[5] = (keyBuff[5] << 1)|Key5;//讀取按鍵狀態
keyBuff[6] = (keyBuff[6] << 1)|Key6;//讀取按鍵狀態
for(i = 0;i < 7;i++)
{
if((keyBuff[i]&0x0F) == 0x0F)//判斷按鍵是不是彈起
{
keySta[i] = 1;
if(i == 2)
{
keyCnt[0] = 0;
keyTime[0] = 0;
}
else if(i == 3)
{
keyCnt[1] = 0;
keyTime[1] = 0;
}
}
else if((keyBuff[i]&0x0F) == 0x00)//判斷按鍵是不是按下
{
keySta[i] = 0;
if(i == 2)
{
keyCnt[0]++;
if(keyCnt[0] >= 200)
{
keyCnt[0] = 0;
keyTime[0]++;//為長按鍵輸入加
}
}
else if(i == 3)
{
keyCnt[1]++;
if(keyCnt[1] >= 200)
{
keyCnt[1] = 0;
keyTime[1]++;//為長按鍵輸入減
}
}
}
}
}
void KeyDrive()
{
static unsigned char keyBack[] = {1,1,1,1,1,1,1};//保存更改后的按鍵
static unsigned int keyTim[] = {3,3};//第一次大于600毫秒才長按輸入,以后每200毫秒輸入一次
unsigned char i;
for(i = 0;i < 7;i++)
{
if((keyBack[i] != keySta[i]))//如果按鍵狀態更改
{
if(keySta[i] == 0)//如果是按下了某個按鍵
{
CheckKey(i);
}
keyBack[i] = keySta[i];
}
}
if(keyTime[0] > 0)//長按加
{
if(keyTime[0] > keyTim[0])
{
CheckKey(2);
keyTim[0]++;
}
}
else
{
keyTim[0] = 3;
}
if(keyTime[1] > 0)//長按減
{
if(keyTime[1] > keyTim[1])
{
CheckKey(3);
keyTim[1]++;
}
}
else
{
keyTim[1] = 3;
}
}
|