找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4005|回复: 12
收起左侧

单片机按键问题,按下没有问题,但是松开后有误

[复制链接]
ID:425084 发表于 2018-11-12 16:03 | 显示全部楼层 |阅读模式
按键的扫描,已经完成了,但是现在的问题是,按键按下1,会显示1,但是松开后显示0.

extern int8u saomiao2X2()
{
        int8u temp,key;
        int8u col1_temp,col2_temp;
        key = 0x0;
                //μúò»DD
        Row1=0;        
        Row2=1;
        delay(10);
        col1_temp=Col1;
        col2_temp=Col2;
        temp=(col2_temp<<1)|col1_temp;
        temp=temp&0x3;  
        if(temp!=0x3)
        {
                delay(10);
                col1_temp=Col1;
                col2_temp=Col2;
                temp=(col2_temp<<1)|col1_temp;
                temp=temp&0x3;
        }
          if(temp!=0x3)
          {

     switch(temp)
                 {                                
                         case 0x02:        
                                        key=0;
                                break;

                                case 0x01:         
                                        key=1;
                                break;

                 }

                }         
                 
                        //μú¶tDD
        Row1=1;        
        Row2=0;
        delay(10);
        col1_temp=Col1;
        col2_temp=Col2;
        temp=(col2_temp<<1)|col1_temp;
        temp=temp&0x3;
        if(temp!=0x3)
        {
                delay(10);
                col1_temp=Col1;
                col2_temp=Col2;
                temp=(col2_temp<<1)|col1_temp;
                temp=temp&0x3;
        }
          if(temp!=0x3)
          {
     switch(temp)
                 {
                                 case 0x02:        
                                        key=2;
                                break;
                                                        
                                case 0x01:         
                                        key=3;
                                break;

                 }

                }        
        return key;
}        

回复

使用道具 举报

ID:142291 发表于 2018-11-12 22:10 | 显示全部楼层
要消除抖动问题啊
回复

使用道具 举报

ID:406082 发表于 2018-11-12 22:24 | 显示全部楼层
可以用按键的上升沿或是下降沿,来判断按键的变化。例如:
  LOOP:  JB P1.0 LOOP  ;高电平时,自循环
             LCALL DIS    :下降沿调用显示子程序
回复

使用道具 举报

ID:94031 发表于 2018-11-13 06:49 | 显示全部楼层
设个标志把按下的状态记住,根据标志显示1,直到另一个按键按下再改变标志。
回复

使用道具 举报

ID:425525 发表于 2018-11-13 10:43 来自手机 | 显示全部楼层
不是应该要消抖吗
回复

使用道具 举报

ID:94031 发表于 2018-11-13 14:53 | 显示全部楼层

他出现的问题不是消抖能解决的。
回复

使用道具 举报

ID:425084 发表于 2018-11-13 16:28 | 显示全部楼层
xuyaqi 发表于 2018-11-13 06:49
设个标志把按下的状态记住,根据标志显示1,直到另一个按键按下再改变标志。

没错就是这个问题,谢谢
回复

使用道具 举报

ID:425084 发表于 2018-11-13 16:29 | 显示全部楼层
应该不是抖动的问题,延迟代码已经消抖动了,是按下时要把按键值给保持住
回复

使用道具 举报

ID:425867 发表于 2018-11-13 18:07 | 显示全部楼层
可以用按键的上升沿或是下降沿,来判断按键的变化。例如:   LOOP:  JB P1.0 LOOP  ;高电平时,自循环              LCALL DIS    :下降沿调用显示子程序
回复

使用道具 举报

ID:111634 发表于 2018-11-14 08:19 | 显示全部楼层
本帖最后由 zl2168 于 2018-11-14 22:26 编辑

那是你程序有问题。给你介绍一个按键参考案例:
4种不同方式键控信号灯
按键按能否锁定可分为有锁按键和无锁按键。有锁按键是按下即能锁定闭合状态,只有再次按一下才能解除闭合状态,回归断开状态。无锁按键不能锁定闭合状态,除非按住键不予释放,典型的例子就是电脑键盘上的按键。
单片机应用系统中,根据按键闭合和释放状态,有多种不同的键控方式,可编写不同的程序予以实现。本例要求按以下4种不同方式分别键控VD0~ VD3
① 无锁按键:S0按下,VD0亮;S0释放,VD0暗;
② 无锁按键(前沿有效):S1按下,VD1亮;S1释放,VD1延时2s后暗。
③ 无锁按键(后沿有效):S2按下,VD2亮;S2释放,VD2亮,并延时2s后暗。
④ 模拟有锁按键:S3按第一次,VD3亮,并继续保持;按第二次,VD3才暗
Proteus仿真一下,确认有效。
实例5 不同方式键控灯.rar (31.72 KB, 下载次数: 11)
回复

使用道具 举报

ID:426190 发表于 2018-11-14 09:59 | 显示全部楼层
应该不是抖动的问题,延迟代码已经消抖动了
回复

使用道具 举报

ID:426392 发表于 2018-11-14 15:29 | 显示全部楼层

应该不是抖动的问题,延迟代码已经消抖动了
回复

使用道具 举报

ID:425084 发表于 2018-11-15 08:52 | 显示全部楼层
zl2168 发表于 2018-11-14 08:19
那是你程序有问题。给你介绍一个按键参考案例:
4种不同方式键控信号灯
按键按能否锁定可分为有锁按键和 ...

多谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表