打印

单片机IO口检测按键

[复制链接]
2374|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

S1通过RC4高电平检测,S2通过RC3高电平检测,S3通过RC3给高电平检测RC4是否为高电平来检测,用S3来控制LED亮灭(检测到S3按下时IO控制的LED会亮,再次检测S3按下时LED会灭),测试中发现按按S3时正常,按S1或S2过程中有时会影响S3控制的LED的亮灭(比如LED是亮的,在没按S3情况下,有时按S2或S2过程中,LED会灭),是不是按键检测步骤有什么问题,请老师指导下,谢谢。

相关帖子

沙发
ayb_ice| | 2014-4-28 09:24 | 只看该作者
先检测S1,再S2,再S3

如果检测到按键按下,后面的按键不检测了,

注意切换IO状态

使用特权

评论回复
板凳
chest20090909|  楼主 | 2014-4-28 09:35 | 只看该作者
keyscan()
{
   if(RC4==1)
   {
     检测S1 .....
   }
   if(RC3==1)
   {
     检测S2 ....
   }
   RC3输出1;
   if(RC4==1)
   {
      检测S3....
   }
   RC3置输入
}

是这样吗

使用特权

评论回复
地板
ayb_ice| | 2014-4-28 09:54 | 只看该作者
        while(1)
        {
                RC4_input()
                if(RC4){
                        ...
                        // S1按下
                        ...
                        break;
                }

                RC3_input()
                if(RC3){
                        ...
                        // S2按下
                        ...
                        break;
                }

                RC4_input()
                RC3_output()
                RC3 = 1;
                if(RC4){
                        ...
                        // S3按下
                        ...
                        break;
                }

        break;
        }

使用特权

评论回复
5
chest20090909|  楼主 | 2014-4-28 10:26 | 只看该作者
ayb_ice 发表于 2014-4-28 09:54
while(1)
        {
                RC4_input()

按这样改,按S1和S2时影响不到S3的效果了,但按S3时有时对S1按的效果有影响

使用特权

评论回复
6
pang3dsa| | 2014-4-28 10:43 | 只看该作者
这电路够奇葩。
这电路设计上是假设了按键只能单个单个的按,你同时按两个按键肯定有问题了。
特别是S1按下后,不管你怎么检测,RC4都是高电平了。
建议修改电路,多加个IO口,不然就单个按钮按。

使用特权

评论回复
7
chest20090909|  楼主 | 2014-4-28 10:49 | 只看该作者
在检测S1时加了个标志位检测,暂时还没发现S3对S1`有影响

使用特权

评论回复
8
chest20090909|  楼主 | 2014-4-28 10:50 | 只看该作者
pang3dsa 发表于 2014-4-28 10:43
这电路够奇葩。
这电路设计上是假设了按键只能单个单个的按,你同时按两个按键肯定有问题了。
特别是S1按下 ...

电路已经定死了,只能从程序下手,使用时也是只按一个键

使用特权

评论回复
9
ayb_ice| | 2014-4-28 10:59 | 只看该作者
这个电路设计时就不能同时检测S3与其它两个按键,

使用特权

评论回复
10
chest20090909|  楼主 | 2014-4-28 13:12 | 只看该作者
又测试了下,按S1久了对S3还是有影响

使用特权

评论回复
11
ayb_ice| | 2014-4-28 14:09 | 只看该作者
chest20090909 发表于 2014-4-28 13:12
又测试了下,按S1久了对S3还是有影响

测试是基于你的驱动的,
驱动不对谈什么测试呢

使用特权

评论回复
12
icekoor| | 2014-4-29 00:39 | 只看该作者
S3有些多余,因为S1,S2能够产生4种组合,S1=0,S2=0;S1=0,S2=1;S1=1,S2=0;S1=1,S2=1;而S1和S3同时按下不就是第四种情况吗,只通过单片机检测电平状态,单片机没法区分出来。不需明确第四种情况是谁产生的。

使用特权

评论回复
13
ayb_ice| | 2014-4-29 05:57 | 只看该作者
icekoor 发表于 2014-4-29 00:39
S3有些多余,因为S1,S2能够产生4种组合,S1=0,S2=0;S1=0,S2=1;S1=1,S2=0;S1=1,S2=1;而S1和S3同时按下不就 ...

你这话明显不对

需要多少按键更多时候是由外观决定的

使用特权

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

本版积分规则

121

主题

632

帖子

4

粉丝