资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
S ST TM M3 32 2- -V V5 5 开开发发板板 S ST Te em mW Wi in n 教教程程第第 1 1 页页 共共 7 7 页页 第31章 键盘输入(实体按键操作控件) 本期教程主要跟大家讲解键盘输入, 这里我们通过开发板上面带的按键进行相关的操作, 在后面会专门的做一期 PS2 键盘的教程。 31. 1 描述 31. 2 驱动层 API 31. 3 实体按键操作 31. 4 总结 31.1 描述 键盘输入设备使用 ASCII 字符编码,以便区分不同的字符。例如,键盘上只有一个“A”键,但大写的“A”与小写的“a”拥有不同的 ASCII 编码 (分别为 0x41 和 0x61) STemWin 预定义字符编码 STemWin 同时定义了其他“虚拟”键盘操作的字符编码。这些编码如下表所示,由 GUI.h 中的标识符表中定义。因此,在 emWin 中,字符编码可以是任意扩展 ASCII 字符值,也可以是任意下列预定 义的 emWin 值。 S ST TM M3 32 2- -V V5 5 开开发发板板 S ST Te em mW Wi in n 教教程程第第 2 2 页页 共共 7 7 页页 预定义的虚拟键盘码 描述 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() 把消息发送至指定键。 函数 GUI_StoreKeyMsg() 把消息数据(Key, PressedCnt)存进键盘缓冲器,Key 表示可以是任意扩展 ASCII 字符 (范围为 0x20至 0xFF)或者任意预定义的 emWin 字符编码。PressedCnt 表示松开或者未按下的状态。 该函数可从中断服务程序调用。STemWin 的键盘输入管理器含有一个 FIFO 缓冲器,默认情况下最多可以保存 10 个键盘事件。如果需要不同的尺寸,可以更改该值。 函数 GUI_SendKeyMsg() 把键盘数据发送到输入焦点所在窗口。如果没有窗口有输入焦点,则调用 GUI_StoreKeyMsg()函数将数据存储至输入缓冲器之中。该函数不可从中断服务程序调用。该函数的参数和上面函数的参数是一样的。 应用层的如下几个函数就先不做介绍了,使用到的时候再做介绍: S ST TM M3 32 2- -V V5 5 开开发发板板 S ST Te em mW Wi in n 教教程程第第 3 3 页页 共共 7 7 页页 31.3 实体按键操作 下面给大家讲解一下通过开发板上面带的按键来操作控件。 按键的驱动请看安富莱 STM32-V5 开发板_用户手册的第 20 章:按键 FIFO 教程。此工程主要分为两部分: 按键任务 STemWin 主任务 按键任务: /* * * 函 数 名: AppTaskUserIF * 功能说明: 此函数主要用于得到按键的键值。 * 形 参:p_arg 是在创建该任务时传递的形参 * 返 回 值: 无 优 先 级:2 * */ static void AppTaskUserIF(void *p_arg) uint8_t ucKeyCode; (void)p_arg; /* 避免编译器报警 */ while (1) bsp_KeyScan(); ucKeyCode = bsp_GetKey(); if(ucKeyCode != KEY_NONE) switch (ucKeyCode) case KEY_DOWN_K1: /* K1 键按下 实现截图*/ (1 1) BSP_OS_SemPost( break; case KEY_DOWN_K2: /* K2 键按下 实现 TAB 按键的功能*/ (2 2) GUI_SendKeyMsg(GUI_KEY_TAB, 1); break; case KEY_DOWN_K3: /* K3 键按下 实现 CANCEL 的功能 */ (3 3) GUI_SendKeyMsg(GUI_KEY_ESCAPE, 1); break; (4 4) case JOY_DOWN_U: /* 摇杆 UP 键按下 实现删除字符功能,注意和 BACKSPACE 回格的区别*/ GUI_SendKeyMsg(GUI_KEY_DELETE, 1); break; case JOY_DOWN_D: /* 摇杆 DOWN 键按下 实现删除字符 */ (5 5) S ST TM M3 32 2- -V V5 5 开开发发板板 S ST Te em mW Wi in n 教教程程第第 4 4 页页 共共 7 7 页页 GUI_SendKeyMsg(GUI_KEY_BACKSPACE, 1); break; case JOY_DOWN_L: /* 摇杆 LEFT 键按下 实现光标左移 */ (6 6) GUI_SendKeyMsg(GUI_KEY_LEFT, 1); break; case JOY_DOWN_R: /* 摇杆 RIGHT 键按下 实现光标右移 */ (7 7) GUI_SendKeyMsg(GUI_KEY_RIGHT, 1); break; case JOY_DOWN_OK: /* 摇杆 OK 键按下 实现 OK */ (8 8) GUI_SendKeyMsg(GUI_KEY_ENTER, 1); break; default: /* 其它的键值不处理 */ break; BSP_OS_TimeDlyMs(10); 1. 按下按键 1 实现截图功能。 2. 实现 TAB 按键的功能。 3. 实现 CANCEL 的功能 4. 实现删除字符的功能,注意和 BACKSPACE 回个的区别。 5. 实现删除字符 6. 实现光标左移。 7. 实现光标右移。 8. 实现 OK 键功能。 STemWin 主任务: #include “includes.h“ #include “MainTask.h“ /* * * 静态数据 * */ static const GUI_WIDGET_CREATE_INFO _aDialogCreate = FRAMEWIN_CreateIndirect, “Edit winmode“, 0, 90, 90, 140, 130, FRAMEWIN_CF_MOVEABLE, EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 10, 10, 110, 20, 0, 15, EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 10, 40, 110, 20, 0, 15, BUTTON_CreateIndirect, “Ok“, GUI_ID_OK, 10, 80, 50, 20 , BUTTON_CreateIndirect, “Cancel“, GUI_ID_CANCEL, 70, 80, 50, 20 , ; static char * _apExplain = S ST TM M3 32 2- -V V5 5 开开发发板板 S ST Te em mW Wi in n 教教程程第第 5 5 页页 共共 7 7 页页 “This sample shows how to use edit widgets with a“, “user defined callback function and how to set a“, “user defined AddKey function. It selects the“, “contents of the edit field on receiving the focus“, “and overwrites the contents if a key other than“, “a cursor key is pressed.“, ; /* * * 函 数 名: _cbDialog * 功能说明: 对话框的回调函数 * 形 参:pMsg 消息指针 * 返 回 值: 无 * */ static void _cbDialog(WM_MESSAGE * pMsg) int i; int NCode; int Id; WM_HWIN hDlg; WM_HWIN hItem; hDlg = pMsg-hWin; switch (pMsg-MsgId) case WM_INIT_DIALOG: FRAMEWIN_SetFont(pMsg-hWin, FRAMEWIN_S
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号