打印

4*4键盘扫描问题!急!

[复制链接]
1852|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
四叶草|  楼主 | 2007-2-20 01:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先看我的程序:
         P3=0x0f;
     
    if(P3!=0x0f)
    {
    for(a=0x00;a<0xff;a++);
    if(P3!=0x0f)
    {
    a=P3;
    P3=0xf0;
    a=a+P3;                        
    }
    }
    else next=1;
    if(next==1)
    {
    switch(a)
    {
    case 0xe7:puttobuf(a);break;        //按1
    case 0xeb:puttobuf(a);break;        //按2
    case 0xed:puttobuf(a);break;        //按3
    case 0xd7:puttobuf(a);break;        //按4    
    case 0xdb:puttobuf(a);break;        //按5
    case 0xdd:puttobuf(a);break;        //按6
    case 0xb7:puttobuf(a);break;        //按7    
    case 0xbb:puttobuf(a);break;        //按8
    case 0xbd:puttobuf(a);break;    //按9
    case 0x7b:puttobuf(a);break;        //按0
    case 0xee:key[0]=0x00;break;           //del
       case 0xde:puttobuf(0xff);break;    //返回
    case 0xbe:break;    //输入字
    case 0x7e:break;    //确认
    case 0x77:break;    //空格
    case 0x7d:break;    //输入号码
    default:{break;}
    }
我的p3.1脚测到系低,p3.0、p3.2、p3.3都是高,p3.4至p3.7为低。程序中next的作用是让按一次执行一次,要等放开手才让它置回1。据我所观察,程序由于某种原因在一开始便自锁在next=0的状态使我按的所有键无效。而且奇怪的是低四位应该一致,但就是第二只脚不同。p3.0~p3.7分别为4、3、2、1行和1、2、3、4列。请高手指教,亿分感激!!!

相关帖子

沙发
liyong110| | 2007-2-20 12:07 | 只看该作者

完全不必如此

换个思路吧:
1.分时扫描,检测到N次键值相同即认为有效,不必在扫描函数中停留过长时间.
如需节省RAM,可考虑用全局标志位进行自锁或互锁.可用一字节上半部装次数,下半部装键值,此法非常实用与汇编语言(会略增代码长度).
2.算法用简单点的,直接装入去反即可.
3.总共用的资源:BIT:2,BYTE:1

使用特权

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

本版积分规则

71

主题

109

帖子

0

粉丝