【STemWin教程入门篇】第31章 键盘输入(实体按键操作控件)

标签:
ucos-iiiucguiemwindsp键盘输入 |
分类: emWin |
第31章
键盘输入(实体按键操作控件)
本期教程主要跟大家讲解键盘输入,这里我们通过开发板上面带的按键进行相关的操作,在后面会专门的做一期PS2键盘的教程。
31.
31.
31.
31.
31.1
描述
键盘输入设备使用ASCII字符编码,以便区分不同的字符。例如,键盘上只有一个“A”键,但大写的“A”与小写的“a”拥有不同的ASCII编码
STemWin预定义字符编码
STemWin
预定义的虚拟键盘码 |
描述 |
GUI_KEY_BACKSPACE |
退格键 |
GUI_KEY_TAB |
制表键 |
GUI_KEY_ENTER |
回车键 |
GUI_KEY_LEFT |
左箭头键 |
GUI_KEY_UP |
上箭头键 |
GUI_KEY_RIGHT |
右箭头键 |
GUI_KEY_DOWN |
下箭头键 |
GUI_KEY_HOME |
本位键(移至当前行的开头) |
GUI_KEY_END |
结束键(移至当前行的末尾) |
GUI_KEY_SHIFT |
换挡键 |
GUI_KEY_CONTROL |
控制键 |
GUI_KEY_ESCAPE |
换码键 |
GUI_KEY_INSERT |
插入键 |
GUI_KEY_DELETE |
删除键 |
31.2
驱动层API
键盘驱动层处理键盘消息函数。这些程序会在具体键
下表按字母顺序列出了驱动层键盘程序。详细描述
程序 |
描述 |
GUI_StoreKeyMsg() |
把消息存储于指定键 |
GUI_SendKeyMsg() |
把消息发送至指定键。 |
l
把消息数据(Key,
该函数可从中断服务程序调用。STemWin的键盘输入管理器含有一个FIFO缓冲器,默认情况下最多可以保存10个键盘事件。如果需要不同的尺寸,可以更改该值。
l
把键盘数据发送到输入焦点所在窗口。如果没有窗口有输入焦点,则调用GUI_StoreKeyMsg()函数将数据存储至输入缓冲器之中。该函数不可从中断服务程序调用。该函数的参数和上面函数的参数是一样的。
应用层的如下几个函数就先不做介绍了,使用到的时候再做介绍:
31.3
实体按键操作
下面给大家讲解一下通过开发板上面带的按键来操作控件。按键的驱动请看安富莱STM32-V5开发板_用户手册的第20章:按键FIFO教程。此工程主要分为两部分:
Ø
Ø
按键任务:
static
{
uint8_t
(void)p_arg;
while
{
bsp_KeyScan();
ucKeyCode
if(ucKeyCode
{
switch
{
case
BSP_OS_SemPost(&SEM_SYNCH);
break;
case
GUI_SendKeyMsg(GUI_KEY_TAB,
break;
case
GUI_SendKeyMsg(GUI_KEY_ESCAPE,
break;
(4)
case
GUI_SendKeyMsg(GUI_KEY_DELETE,
break;
case
GUI_SendKeyMsg(GUI_KEY_BACKSPACE,
break;
case
GUI_SendKeyMsg(GUI_KEY_LEFT,
break;
case
GUI_SendKeyMsg(GUI_KEY_RIGHT,
break;
case
GUI_SendKeyMsg(GUI_KEY_ENTER,
break;
default:
break;
}
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
STemWin主任务:
#include
#include
static
{
{
{
{
{
{
};
static
{
"This
"user
"user
"contents
"and
"a
};
static
{
int
int
int
WM_HWIN
WM_HWIN
hDlg
switch
{
case
FRAMEWIN_SetFont(pMsg->hWin,
FRAMEWIN_SetTextAlign(pMsg->hWin,
for
{
hItem
}
break;
case
case
Id
NCode
switch
{
case
if
{
GUI_EndDialog(hDlg,
}
if
{
GUI_EndDialog(hDlg,
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
static
{
unsigned
switch
{
case
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WIDGET_EditWinmode",
GUI_DispNextLine();
GUI_SetFont(GUI_DEFAULT_FONT);
GUI_DispNextLine();
for
{
GUI_DispStringHCenterAt(_apExplain[i],
GUI_DispNextLine();
}
break;
}
}
void
{
GUI_Init();
WM_SetCallback(WM_HBKWIN,
while(1)
{
GUI_ExecDialogBox(_aDialogCreate,
GUI_Delay(1000);
}
}
1.
2.
其余的按键功能比较简单,实际操作下就明白了,上面的代码中也有相应的注释。
尝试了一下自定义按键消息没有成功,后面再试试。
3.
实际的显示效果如下:
31.4
总结
本期教程就跟大家讲这么多,主要是想通过本期教程让大家对实体按键操作控件有一个了解。这个过程还需要大家对通信机制有所了解。在后面的教程中会跟大家详细讲解通信机制这块。