本期教程主要跟大家讲解键盘输入,这里我们通过开发板上面带的按键进行相关的操作,在后面会专门的做一期PS2键盘的教程。
描述
键盘输入设备使用ASCII字符编码,以便区分不同的字符。例如,键盘上只有一个“A”键,但大写的“A”与小写的“a”拥有不同的ASCII编码 (分别为0x41和0x61)
STemWin预定义字符编码
STemWin 同时定义了其他“虚拟”键盘操作的字符编码。这些编码如下表所示,由GUI.h中的标识符表中定义。因此,在emWin中,字符编码可以是任意扩展ASCII字符值,也可以是任意下列预定义的emWin值。
预定义的虚拟键盘码 | 描述 |
---|---|
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 | 删除键 |
驱动层API
键盘驱动层处理键盘消息函数。这些程序会在具体键 (或组合键)被按下或松开时通知窗口管理器。
下表按字母顺序列出了驱动层键盘程序。
详细描述
程序 | 描述 |
---|---|
GUI_StoreKeyMsg() | 把消息存储于指定键 |
GUI_SendKeyMsg() | 把消息发送至指定键。 |
函数GUI_StoreKeyMsg()
把消息数据(Key, PressedCnt)存进键盘缓冲器,Key表示可以是任意扩展ASCII字符 (范围为0x20至0xFF)或者任意预定义的emWin字符编码。PressedCnt表示松开或者未按下的状态。
该函数可从中断服务程序调用。STemWin的键盘输入管理器含有一个FIFO缓冲器,默认情况下最多可以保存10个键盘事件。如果需要不同的尺寸,可以更改该值。
函数GUI_SendKeyMsg()
把键盘数据发送到输入焦点所在窗口。如果没有窗口有输入焦点,则调用GUI_StoreKeyMsg()函数将数据存储至输入缓冲器之中。该函数不可从中断服务程序调用。该函数的参数和上面函数的参数是一样的。
应用层的如下几个函数就先不做介绍了,使用到的时候再做介绍:
实体按键操作
下面给大家讲解一下通过开发板上面带的按键来操作控件。按键的驱动请看安富莱STM32-V5开发板_用户手册的第20章:按键FIFO教程。此工程主要分为两部分:
Ø 按键任务
Ø STemWin主任务
按键任务:
|
|
-
按下按键1实现截图功能。
-
实现TAB按键的功能。
-
实现CANCEL的功能
-
实现删除字符的功能,注意和BACKSPACE回个的区别。
-
实现删除字符
-
实现光标左移。
-
实现光标右移。
-
实现OK键功能。
### STemWin主任务:
|
|
-
上面的程序比较简单,主要是在对话框上面显示一个编辑框(初学的不要担心,后面教程会有这些控件的讲解)。
-
K1按键实现的是TAB键的功能,主要是实现对话框上面控件的聚焦切换。
其余的按键功能比较简单,实际操作下就明白了,上面的代码中也有相应的注释。
尝试了一下自定义按键消息没有成功,后面再试试。
- 按键具体的通讯机制会在后面的教程中再跟大家讲解。
实际的显示效果如下:
总结
本期教程就跟大家讲这么多,主要是想通过本期教程让大家对实体按键操作控件有一个了解。这个过程还需要大家对通信机制有所了解。在后面的教程中会跟大家详细讲解通信机制这块。