?? key.c
字號:
#include "key.h"
void KeyInit(void)
{
//設置引腳的輸入模式和輸出模式
keyInputPortInputMode;
keyInputPortPullUp;
keyOutputPortOutputMode;
keyOutputPortInit;
keyMask = 0xF0; //屏蔽碼,沒有按鍵時為0xF0
keyValue = 0x00; //初始化鍵值為0
keyState = 0x00; //初始化按鍵狀態為第0歌狀態
}
/************************************************
函數unsigned char FindKeyValue (void)用于查找鍵值
************************************************/
unsigned char FindKeyValue (void)
{
unsigned keyReturn; //返回的鍵值,并初始化為無鍵值
keyReturn = 0;
switch (keyState)
{
case keyState0:
keyOutput2 = 1; //第二行置高電平
keyOutput1 = 0; //第一行置低電平,掃描第一行
keyValue = keyInput & keyMask; //讀取鍵值
if(keyValue != keyMask) //如果有鍵按下,則進入狀態1
{
keyState = keyState1;
}
else //否則第一行置高電平,第二行置低電平,掃描第二行
{
keyOutput1 = 1;
keyOutput2 = 0;
keyValue = keyInput & keyMask; //讀取鍵值
if(keyValue != keyMask) //如果有鍵按下,則進入狀態1
{
keyState = keyState1;
}
else //否則第二行也置高電平
{
keyOutput2 = 1;
}
}
break;
case keyState1:
if (keyValue == (keyInput & keyMask)) //如果讀取的按鍵值和上次一樣,則進入狀態2,并判斷按鍵,否則進入狀態0
{
keyState = keyState2;
if (keyOutput1)
{
switch(keyValue)
{
case 0b11100000:
keyReturn = key1;
break;
case 0b11010000:
keyReturn = key2;
break;
case 0b10110000:
keyReturn = key3;
break;
case 0b01110000:
keyReturn = key4;
break;
};
}
else
{
switch(keyValue)
{
case 0b11100000:
keyReturn = key5;
break;
case 0b11010000:
keyReturn = key6;
break;
case 0b10110000:
keyReturn = key7;
break;
case 0b01110000:
keyReturn = key8;
break;
};
}
}
else
{
keyState = keyState0;
}
break;
case keyState2: //狀態2中判斷按鍵是否已經釋放,如果已經釋放則返回狀態0
keyOutput1 = 0;
keyOutput2 = 0;
if ((keyInput & keyMask) == keyMask)
{
keyState = keyState0;
}
break;
};
return keyReturn;//返回讀取的鍵值
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -