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