专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
STM32F103C8 USB键盘 numLock capLock 灯如何实现
2019-07-20 22:45
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5209
32
1274
STM32F103C8 USB键盘 numLock capLock 灯如何实现? 最近研究了一下 STM32 USB键盘程序,从论坛下载了几个例程.基本上可以实现普通的键盘功能.只差LED了.USB 报告描述符已经是正确的.有05 08的LED宣告.例程是一个鼠标程序.目前找不到LED的报告事件或者函数.知道的朋友请指点一下.谢谢..
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
xfcjava3
1楼-- · 2019-07-21 03:35
请看我用过的USB HID键盘描述符c文件:(也是用原来的Joystick描述符,修改过用的)
usb_desc.rar
(2.34 KB, 下载次数: 605)
2017-2-11 20:41 上传 点击文件名下载附件
加载中...
正点原子
2楼-- · 2019-07-21 08:07
帮顶
加载中...
xfcjava3
3楼-- · 2019-07-21 09:56
精彩回答 2 元偷偷看……
加载中...
xfcjava3
4楼-- · 2019-07-21 14:29
请看我曾经用过的程序实现:【注:已用到实际的应用中,请放心参考使用!】
typedef struct tag_caps_find{
u8 caps_row;
u8 caps_col;
u8 caps_chk;
}CAPS_FIND_ST;
CAPS_FIND_ST caps_find;
/****************************************************************************
* 功 能: 查找模式按键是否具备,分析其键的位置
*---------------------------------------------------------------------------*
* 入口参数: pdata A pointer to parameter passed to task.
* 出口参数: None
****************************************************************************/
void Find_ModeKey_Function(void)
{
//...............................
//........矩阵键盘扫描{
if(keycode==KC_LCAP){ //Caps Lock按键按下
caps_find.caps_row=i; //USB键盘中---Caps按键所在的行位置数值
caps_find.caps_col=j; //USB键盘中---Caps按键所在的行位置数值
if(caps_find.caps_chk==0){ //Caps按键没有按下
caps_find.caps_chk=1; //识别Caps按键按下
}
}
if(keycode==KC_LSFT){ //左SHIT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RSFT){ //右SHIT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LCTL){ //左CTRL按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RCTL){ //右CTRL按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LGUI){ //左GUI按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RGUI){ //右GUI按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LALT){ //左ALT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RALT){ //右ALT按键
//.................................
//.................................
//.................................
}
} //........矩阵键盘扫描
}
/****************************************************************************
* 功 能: 模式按键---模式功能查找执行任务
*---------------------------------------------------------------------------*
* 入口参数: pdata A pointer to parameter passed to task.
* 出口参数: None
****************************************************************************/
void Task_ModeKey_Find(void *pdata)
{
u8 i;
pdata = pdata;
while(1)
{
Find_ModeKey_Function();
//.................................
//.................................
//.................................
//.................................
switch(caps_find.caps_chk){
case 0:
break;
case 1: //找到caps按键键位
if(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00){ //如果caps按键按下
flag_caps_press=1;
caps_find.caps_chk=2; //按下caps按键---转换状态
CAPS_LED_ON(); //点亮CAPS指示灯
CoOS_ENTER_CRITICAL();
Buffer0_Scan[0] |=0x02; //输出为大写状态
CoOS_EXIT_CRITICAL();
do{
CoTickDelay(100);
}while(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00);//等待caps按键抬起
}
break;
case 2: //Caps按键按下过后----直到Caps按键释放
if(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00){ //如果caps按键按下
flag_caps_press=0;
caps_find.caps_chk=1; //回复初始状态
CAPS_LED_OFF(); //熄灭CAPS指示灯
CoOS_ENTER_CRITICAL();
Buffer0_Scan[0] &=~0x02; //输出为小写状态
CoOS_EXIT_CRITICAL();
do{
CoTickDelay(100);
}while(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00);//等待caps按键抬起
}
break;
} //end:switch(caps_find.caps_chk)
//.................................
//.................................
//.................................
//.................................
CoTickDelay(100);
}//end: while(1)
}
加载中...
xfcjava3
5楼-- · 2019-07-21 16:16
精彩回答 2 元偷偷看……
加载中...
xfcjava3
6楼-- · 2019-07-21 19:29
请看:
usb键盘固件升级_使用说明:
加载中...
1
2
3
4
5
6
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
typedef struct tag_caps_find{
u8 caps_row;
u8 caps_col;
u8 caps_chk;
}CAPS_FIND_ST;
CAPS_FIND_ST caps_find;
/****************************************************************************
* 功 能: 查找模式按键是否具备,分析其键的位置
*---------------------------------------------------------------------------*
* 入口参数: pdata A pointer to parameter passed to task.
* 出口参数: None
****************************************************************************/
void Find_ModeKey_Function(void)
{
//...............................
//........矩阵键盘扫描{
if(keycode==KC_LCAP){ //Caps Lock按键按下
caps_find.caps_row=i; //USB键盘中---Caps按键所在的行位置数值
caps_find.caps_col=j; //USB键盘中---Caps按键所在的行位置数值
if(caps_find.caps_chk==0){ //Caps按键没有按下
caps_find.caps_chk=1; //识别Caps按键按下
}
}
if(keycode==KC_LSFT){ //左SHIT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RSFT){ //右SHIT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LCTL){ //左CTRL按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RCTL){ //右CTRL按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LGUI){ //左GUI按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RGUI){ //右GUI按键
//.................................
//.................................
//.................................
}
if(keycode==KC_LALT){ //左ALT按键
//.................................
//.................................
//.................................
}
if(keycode==KC_RALT){ //右ALT按键
//.................................
//.................................
//.................................
}
} //........矩阵键盘扫描
}
/****************************************************************************
* 功 能: 模式按键---模式功能查找执行任务
*---------------------------------------------------------------------------*
* 入口参数: pdata A pointer to parameter passed to task.
* 出口参数: None
****************************************************************************/
void Task_ModeKey_Find(void *pdata)
{
u8 i;
pdata = pdata;
while(1)
{
Find_ModeKey_Function();
//.................................
//.................................
//.................................
//.................................
switch(caps_find.caps_chk){
case 0:
break;
case 1: //找到caps按键键位
if(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00){ //如果caps按键按下
flag_caps_press=1;
caps_find.caps_chk=2; //按下caps按键---转换状态
CAPS_LED_ON(); //点亮CAPS指示灯
CoOS_ENTER_CRITICAL();
Buffer0_Scan[0] |=0x02; //输出为大写状态
CoOS_EXIT_CRITICAL();
do{
CoTickDelay(100);
}while(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00);//等待caps按键抬起
}
break;
case 2: //Caps按键按下过后----直到Caps按键释放
if(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00){ //如果caps按键按下
flag_caps_press=0;
caps_find.caps_chk=1; //回复初始状态
CAPS_LED_OFF(); //熄灭CAPS指示灯
CoOS_ENTER_CRITICAL();
Buffer0_Scan[0] &=~0x02; //输出为小写状态
CoOS_EXIT_CRITICAL();
do{
CoTickDelay(100);
}while(key_matrix[caps_find.caps_row][caps_find.caps_col] == 0x00);//等待caps按键抬起
}
break;
} //end:switch(caps_find.caps_chk)
//.................................
//.................................
//.................................
//.................................
CoTickDelay(100);
}//end: while(1)
}
usb键盘固件升级_使用说明:
一周热门 更多>