专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
cortex-m0用外设4*4的键盘接入后按下键在cortex-m0的显示器显示
2019-07-16 09:20
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
嵌入式Linux
10348
3
995
本帖最后由 1563661808 于 2014-4-15 16:38 编辑
用外设4*4的键盘接入后按下键在cortex-m0的显示器显示相应按键信息
按键信息如下
**********
1 2 3 A
4 5 6 B
7 8 9 C
* 0 # D
*********
最好有代码,谢谢了,有急用!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
z00
1楼-- · 2019-07-16 11:31
3*3的键盘操作方式 参考一下吧
#include <lpc17xx.h>
#include "key.h"
#define KEY_ROW1_PIN 25
#define KEY_ROW2_PIN 24
#define KEY_ROW3_PIN 23
#define KEY_COL1_PIN 20
#define KEY_COL2_PIN 21
#define KEY_COL3_PIN 22
uint32_t key_count = 0;
KEY_STATE key_state = KEY_NULL;
KEY_STATE key_state_new = KEY_NULL;
KEY_STATE key_state_old = KEY_NULL;
/*----------------------------------------------------------------------------
read key Pins
*----------------------------------------------------------------------------*/
KEY_STATE readkey(void)
{
uint8_t KEY_H = 0, KEY_L = 0;
uint32_t key;
uint32_t i=0;
LPC_GPIO0->FIODIR &= ~((1<<20)|(1<<21)|(1<<22));
LPC_GPIO0->FIODIR |= (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);
LPC_GPIO0->FIOCLR |= (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);
for(i=0;i<200;i++);
key = LPC_GPIO0->FIOPIN & ((1<<20)|(1<<21)|(1<<22));
key = key >> 20;
if( key < 7 )
{
switch(key){
case 3:
KEY_H = 0;
break;
case 5:
KEY_H = 1;
break;
case 6:
KEY_H = 2;
break;
default:
KEY_H = 0;
break;
}
LPC_GPIO0->FIODIR &= ~((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
LPC_GPIO0->FIODIR |= (1<<20)|(1<<21)|(1<<22);
LPC_GPIO0->FIOCLR |= (1<<20)|(1<<21)|(1<<22);
for(i=0;i<200;i++);
key = LPC_GPIO0->FIOPIN &((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
key = key >> KEY_ROW3_PIN;
if( key < 7 )
{
switch(key){
case 3:
KEY_L = 1;
break;
case 5:
KEY_L = 4;
break;
case 6:
KEY_L = 7;
break;
default:
KEY_L = 0;
KEY_H = 0;
break;
}
}
key_state_new = (KEY_STATE)(KEY_H+KEY_L);
if( key_state_old != key_state_new)
{
key_count++;
if( key_count >= 10)
{
key_count = 0;
key_state_old = key_state_new;
key_state = key_state_new;
}
}
}
else
{
key_state_old = KEY_NULL;
}
return key_state;
}
void setkey(KEY_STATE state)
{
key_state = state;
}
复制代码
加载中...
youzizhile
2楼-- · 2019-07-16 12:26
相当于你给每一个按键都分配了一个功能,就是按键检查和串口显示问题,自己多多查查资料,可以解决的。扫描按键现在示例多得很。
加载中...
要学习的坏孩纸
3楼-- · 2019-07-16 13:41
z00 发表于 2014-4-15 20:25
3*3的键盘操作方式 参考一下吧
十分感谢了!我记下了谢谢您!
加载中...
一周热门
更多
>
相关问题
ARM 汇编,怎么这个export这么捣乱啊?
1 个回答
【ALIENTEK 战舰STM32开发板例程系列连载+教学】第五十八章 UCOSII实验1-任务调度
38 个回答
什么情况下会导致 自恢复保险丝 阻值出现异常?
1 个回答
【提问题,赢课程】反激开关电源设计、变压器设计及调试课程问题搜集
2 个回答
nand启动文件大于4KB,怎么解决
1 个回答
学习ARM选ARM几比较好呢?
2 个回答
这两个板到底选谁?【我决不是发广告的】
1 个回答
关于以太网IP地址如何修改?
1 个回答
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
IMX6UL裸机实现C语言按键输入实验
0个评论
如何编写一个工程文件夹下通用的Makefile
0个评论
Linux设备树专有名词及语法规则详解(下)
0个评论
嵌入式开发之GNU的汇编语法介绍
0个评论
嵌入式开发之Putty软件的安装和使用
0个评论
嵌入式开发之SecureCRT 软件安装和使用
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
嵌入式
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- #include <lpc17xx.h>
- #include "key.h"
- #define KEY_ROW1_PIN 25
- #define KEY_ROW2_PIN 24
- #define KEY_ROW3_PIN 23
- #define KEY_COL1_PIN 20
- #define KEY_COL2_PIN 21
- #define KEY_COL3_PIN 22
- uint32_t key_count = 0;
- KEY_STATE key_state = KEY_NULL;
- KEY_STATE key_state_new = KEY_NULL;
- KEY_STATE key_state_old = KEY_NULL;
- /*----------------------------------------------------------------------------
- read key Pins
- *----------------------------------------------------------------------------*/
- KEY_STATE readkey(void)
- {
- uint8_t KEY_H = 0, KEY_L = 0;
- uint32_t key;
- uint32_t i=0;
-
- LPC_GPIO0->FIODIR &= ~((1<<20)|(1<<21)|(1<<22));
- LPC_GPIO0->FIODIR |= (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);
- LPC_GPIO0->FIOCLR |= (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);
- for(i=0;i<200;i++);
- key = LPC_GPIO0->FIOPIN & ((1<<20)|(1<<21)|(1<<22));
- key = key >> 20;
- if( key < 7 )
- {
- switch(key){
- case 3:
- KEY_H = 0;
- break;
- case 5:
- KEY_H = 1;
- break;
- case 6:
- KEY_H = 2;
- break;
- default:
- KEY_H = 0;
- break;
- }
-
-
- LPC_GPIO0->FIODIR &= ~((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
- LPC_GPIO0->FIODIR |= (1<<20)|(1<<21)|(1<<22);
- LPC_GPIO0->FIOCLR |= (1<<20)|(1<<21)|(1<<22);
-
- for(i=0;i<200;i++);
-
- key = LPC_GPIO0->FIOPIN &((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
- key = key >> KEY_ROW3_PIN;
- if( key < 7 )
- {
- switch(key){
- case 3:
- KEY_L = 1;
- break;
- case 5:
- KEY_L = 4;
- break;
- case 6:
- KEY_L = 7;
- break;
- default:
- KEY_L = 0;
- KEY_H = 0;
- break;
- }
- }
-
- key_state_new = (KEY_STATE)(KEY_H+KEY_L);
-
- if( key_state_old != key_state_new)
- {
- key_count++;
- if( key_count >= 10)
- {
- key_count = 0;
- key_state_old = key_state_new;
- key_state = key_state_new;
- }
- }
- }
- else
- {
- key_state_old = KEY_NULL;
- }
-
- return key_state;
- }
- void setkey(KEY_STATE state)
- {
- key_state = state;
- }
复制代码十分感谢了!我记下了谢谢您!
一周热门 更多>