打印

请问如何获取键盘的值

[复制链接]
4501|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
binsea|  楼主 | 2011-2-8 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 binsea 于 2011-2-9 15:56 编辑

单片机的键盘扫描程序网上很多,我找了一个用。
现在的问题是:我要把两次按键的值赋给一个变量供其他程序使用。

举个例子:我按下8和9后,把8和9取得,组合成89,然后赋给变量key怎么弄?

while(1)
{
if (当按键被按下)
  {
  执行键扫描;
  把得到的键值赋给key;
  }
}

键扫描程序不分第几次按键,按一次有一次的值。我现在就是不知道怎么把两次按键的值取出来,然后组合?



***********************************************************

我用了个计数器来判断第几次按键,但是最后得到的数据是错的。
k=0;
if (当按键被按下)
{
      k=k+1;
        if (k==1表示第一次按键)
            {
                 执行键扫描;
           把得到的键值赋给key1;
             }
          if (k==2第二次按键)
             {
               键扫描;
          把得到的值赋给key2;
              }
}

这样把两次按键所得到的值赋给key1和key2好像不对,但是矩阵键盘扫描程序没办法区分并得到两次按键的值。

相关帖子

沙发
mcuisp| | 2011-2-8 16:48 | 只看该作者
(行*列数)+列
或者(列*行数)+行
乘法也可以用移位代替,比如*8=移3位,*16=移4位

使用特权

评论回复
板凳
binsea|  楼主 | 2011-2-8 19:00 | 只看该作者
怎么算我知道。问题是怎么取得第一次按键和第二次?程序怎么区分两次按键,两次按键的值怎么取得?

使用特权

评论回复
地板
binsea|  楼主 | 2011-2-8 19:01 | 只看该作者
怎么算我知道。问题是怎么取得第一次按键和第二次?程序怎么区分两次按键,两次按键的值怎么取得?

使用特权

评论回复
5
NE5532| | 2011-2-8 20:22 | 只看该作者
怎么算我知道。问题是怎么取得第一次按键和第二次?程序怎么区分两次按键,两次按键的值怎么取得?
binsea 发表于 2011-2-8 19:01


你想下啥叫“一次按键”呢,看问题要看本质。

使用特权

评论回复
6
NE5532| | 2011-2-8 20:23 | 只看该作者
先想一下,答案回复可见。

游客,如果您要查看本帖隐藏内容请回复

使用特权

评论回复
7
mentlely| | 2011-2-8 23:27 | 只看该作者
我是来看答案的

使用特权

评论回复
8
mcuisp| | 2011-2-9 00:28 | 只看该作者
产品对按键的需求各不相同,楼主的问题没有标准答案,只有很多参考答案

使用特权

评论回复
9
jacob1kao| | 2011-2-9 15:50 | 只看该作者
check

使用特权

评论回复
10
jacob1kao| | 2011-2-9 16:05 | 只看该作者
check

使用特权

评论回复
11
天凉好个秋| | 2011-2-9 16:25 | 只看该作者
?..

使用特权

评论回复
12
刘前辈| | 2011-2-9 17:54 | 只看该作者
参考参考。

使用特权

评论回复
13
刘前辈| | 2011-2-9 20:34 | 只看该作者

缺少的变量说明自己填上即可。

本帖最后由 刘前辈 于 2011-2-9 20:39 编辑

Keypad.rar (1.74 KB)

使用特权

评论回复
14
binsea|  楼主 | 2011-2-9 22:31 | 只看该作者
#include "Main.h"
#include "Port.h"
#include "Keypad.h"

能否把头文件也发上来,这个程序的复杂程度可见一斑,还用到了指针,不太好理解啊,我只能照抄了。

使用特权

评论回复
15
流行音乐| | 2011-2-9 23:19 | 只看该作者
13楼给出的程序不能解决楼主的问题。

使用特权

评论回复
16
刘前辈| | 2011-2-10 09:52 | 只看该作者
13楼的程序非常精彩,连消抖都隐藏了。看懂了,C水平就会大长。
他的组合键方法是先按下功能键“*”键,然后输入多个有效键码。

指针形参看上去挺吓人的,实际上理解C语言一个重要概念“形参里数组的表达形式……。”所以,scan函数里那2个形参指针,是指2个数组缓冲区,1个存放键值,一个存放功能键。它的2个形参,是已经说明了的2个小的数组缓冲区。

同意15楼。没什么他人的程序可以拿来就套用的,都是参考编程思想,然后感悟,然后自己修改以适合自己。14楼照抄,肯定不行。还是先看懂,然后采用它的思想方法,写出自己程序为好。

网上去下载这本书《           》,(本论坛以前有分部下载。)参考第19、20章内容。

.

使用特权

评论回复
17
刘前辈| | 2011-2-10 09:53 | 只看该作者
本帖最后由 刘前辈 于 2011-2-10 09:58 编辑

13楼的程序非常精彩,连消抖都隐藏了。看懂了,C水平就会大长。
他的组合键方法是先按下功能键“*”键,然后输入多个有效键码。

指针形参看上去挺吓人的,实际上理解C语言一个重要概念“形参里数组的表达形式……。”所以,scan函数里那2个形参指针,是指2个数组缓冲区,1个存放键值,一个存放功能键。它的2个形参,是已经说明了的2个小的数组缓冲区。

同意15楼。没什么他人的程序可以拿来就套用的,都是参考编程思想,然后感悟,然后自己修改以适合自己。14楼照抄,肯定不行。还是先看懂,然后采用它的思想方法,写出自己程序为好。

网上去下载这本书《 时间触发嵌入式系统设计模式  》,(本论坛以前有分部下载。)参考第19、20章内容。

.

使用特权

评论回复
18
binsea|  楼主 | 2011-2-10 10:54 | 只看该作者
谢谢,楼上的。
问题我已经解决了。我用计数器解决了两次取值的问题,至于按键出来的数字驴唇不对马嘴是因为按键的消抖和松手检测的问题没处理好。我在网上重新找了个键盘扫描程序,带防抖和松手检测的,完美解决了问题。谢谢大家。

使用特权

评论回复
19
fushaobing| | 2011-2-10 11:39 | 只看该作者
简单点就是把上次的键值暂时保存起来。
复杂点就是用一个循环队列(先进先出)保存最近的两次键值。

使用特权

评论回复
20
hesperusiris| | 2011-7-5 18:39 | 只看该作者
学习学习~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

34

帖子

1

粉丝