打印

高手看过来啊:4X4行列式键盘的接口问题

[复制链接]
2075|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzhang_dhu|  楼主 | 2008-11-6 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
耕在此行| | 2008-11-6 21:21 | 只看该作者

电路没什么问题

但电阻是不是再加点,比如10K或20K的
程序应该是是P10_P13输出低电平,另外四个脚输出高电平.
再开中断.
进中断后要进行防抖处理.

使用特权

评论回复
板凳
E007| | 2008-11-6 21:27 | 只看该作者

没问题

没问题,出错的话可能是你软件上没有做防抖控制.

使用特权

评论回复
地板
mzhang_dhu|  楼主 | 2008-11-6 21:59 | 只看该作者

谢谢各位的回答

谢谢以上两位,我在中断里加了去抖程序,但运行仍然不行,按下一个键,这个键的那一列全部变成高电平!附件是程序,请大家帮忙分析分析啊
相关链接:https://bbs.21ic.com/upfiles/img/200712/20071222221612431.rar

使用特权

评论回复
5
E007| | 2008-11-8 14:11 | 只看该作者

提供个思路

用定时器,定时1ms一次中断,在定时器中断中检测按键.首先定义两个全局变量:

unsigned char LastKey;      //最后按下的键值,初始化为无效键值即可.例如0xFF
unsigned char CheckCount;   //计数器,初始化为0


//中断处理
if( LastKey!=0xFF )    //此前已经有一键按下
{
    //检查该键是否仍然按下
    if( /*没按下*/ )
    {
        LastKey=0xFF;
        CheckCount=0;
    }
    else if( LastKey<20 )
    {
        CheckCount++;
        if( CheckCount==20 )
        {
            //按键处理,或置标志位,供主程序轮询
        }
    }
}
else    //此前无键按下
{
    //检查有无键按下
    if( /*有键按下*/ )
    {
        LastKey=/*键码*/;
        CheckCount=1;
    }
}

//这么做可以非常好的消除抖动,同时硬件上可以把与门去掉,节省了硬件,也省了一个中断口线.
//因为我以前写的按键处理程序都是汇编,不大好读,现写了个C语言的框架,你可以照这个试一下.
//这样处理按键,只能对第一个按下的键响应,在响应了一个按键后,除非这个健放开,否则其它任何按键都得不到处理,看似处理的比较弱智,其实在大多数情况下已经可以很好的工作了,除非就有人和你较劲,呵呵~~~~~~

使用特权

评论回复
6
iC921| | 2008-11-9 10:13 | 只看该作者

建议想办法贴图

很不喜欢下载再查的方法,日后清除麻烦。

使用特权

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

本版积分规则

25

主题

66

帖子

0

粉丝