gpt4 book ai didi

c - 9 键键盘打印 qwerty 键的逻辑

转载 作者:行者123 更新时间:2023-12-04 05:59:48 25 4
gpt4 key购买 nike

我有一个设备,它和普通手机一样有 9 个按键。我想使用这 9 个键来打印像 ABCD 这样的普通字母表,就像手机让你做的那样。

这是一个嵌入式系统编程项目。我无法弄清楚实现此功能的逻辑。

我通过轮询而不是中断来检测按键。

有人可以帮忙吗?如果您也能指出相关资源,我将不胜感激。

最佳答案

这里有一个小的键盘解码演示,可以让您顺利上手。您需要为您的硬件重写 key 扫描例程。此外,连续两次选择相同的数字将需要某种超时。您应该也不难弄清楚如何添加对大写、标点符号和元键的支持...

#include <stdio.h>

#define NUM_KEYS 10
#define NUM_PHASES 6

char KeyMap[NUM_KEYS][NUM_PHASES] =
{ { '0', 0, 0, 0, 0, 0 },
{ '1', 0, 0, 0, 0, 0 },
{ '2', 'A', 'B', 'C', 0, 0 },
{ '3', 'D', 'E', 'F', 0, 0 },
{ '4', 'G', 'H', 'I', 0, 0 },
{ '5', 'J', 'K', 'L', 0, 0 },
{ '6', 'M', 'N', 'O', 0, 0 },
{ '7', 'P', 'Q', 'R', 'S', 0 },
{ '8', 'T', 'U', 'V', 0, 0 },
{ '9', 'W', 'X', 'Y', 'Z', 0 } };

char KeyGet()
{
char key;

/* do whatever it takes to scan your
keyboard and return the _numeric_ digit. */

/* for this test simulate with console input */
key = getc(stdin);

if ((key >= '0') && (key <= '9'))
{
key -= 0x30;
}
else
{
key = 0;
}

return key;
}

char DecodeKey(char NewKey, char *pOldKey, int *pPhase)
{
char ch = 0;

/* Validate Phase */
if ((*pPhase < 0) || (*pPhase >= NUM_PHASES))
{
*pPhase = 0;
}

/* see if a different key was pressed than last time */
/* if it was then restart the phase counter */
if (NewKey != *pOldKey)
{
*pPhase = 0;
*pOldKey = NewKey;
}

/* Validate Key */
if ((NewKey >= 0) && (NewKey < NUM_KEYS))
{
ch = KeyMap[(int)NewKey][*pPhase];

/* if the phase position is NULL, just get the numeric digit */
if (ch == 0)
{
*pPhase = 0;
ch = KeyMap[(int)NewKey][*pPhase];
}

/* bump the phase */
++(*pPhase);

if (*pPhase >= NUM_PHASES)
{
*pPhase = 0;
}
}

return ch;
}

int main()
{
char nk; /* new key */
char ok = 0; /* old key */
char c; /* resulting character */
int phase = 0; /* tracks the key presses */

while (1)
{
/* get a key */
nk = KeyGet();

/* convert it to a character */
c = DecodeKey(nk, &ok, &phase);

if (c != 0)
{
printf("%c", c);
}
}

return 0;
}

关于c - 9 键键盘打印 qwerty 键的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com