发新帖我要提问
12
返回列表
打印

寻找“XWJ”如何写组合按键程序

[复制链接]
楼主: xzhenggen
手机看帖
扫描二维码
随时随地手机跟帖
21
HQGBOY| | 2007-7-10 09:09 | 只看该作者 回帖奖励 |倒序浏览

呵呵..

使用特权

评论回复
22
yewuyi| | 2007-7-10 09:25 | 只看该作者

俺可是给你整出一个典型4键操作了……

至于按键消抖总不需要再问我把?




呵呵,里面有长击,短击,连击,单击判断,至于双击、加速击你自己把那程序变通一下就出来了,不要让俺帮你把他全写出来把?

使用特权

评论回复
23
xzhenggen|  楼主 | 2007-7-10 10:45 | 只看该作者

呵呵!多谢你了老兄,

在21ICBBS上总会遇到像你及computer00(电脑圈圈)这样的好心人。
只要有恒心,穷追不舍总会有解决问题的一天。哈哈。。。。。。

使用特权

评论回复
24
xzhenggen|  楼主 | 2007-7-10 11:19 | 只看该作者

请问:yewuyi好心人,为什么我下面所写的子程序

在主函数里面调用它时void main(){...key();...},不能这现个,十,百,千位数值相加减。
#define Qdshj 200
#define ljshj 10
bit keyflag;
uchar keyswitch=1;
char idata dis_0=0;
char idata dis_1=0;
char idata dis_2=0;
char idata dis_3=0;
void key()
{
    static uchar keycounter;
    uchar keyvalue;
    P1=P1|0xc0;
    keyvalue=P1;
    keyvalue=~keyvalue;
    keyvalue=keyvalue&0xc0;
    if(!keyvalue)
    {
        keycounter=0;
        keyflag=0;
        return;
    }
    if(keyflag)
    {
        keycounter++;
        if(Qdshj==keycounter)
        {
            keycounter-=ljshj;
            key_process(keyvalue);
        }
        else
        {
            return;
            
        }
    }
    else
    {
        delay(10);
        P1=P1|0xc0;
            keyvalue=P1;
        keyvalue=~keyvalue;
        keyvalue=keyvalue&0xc0;
        if(!keyvalue)
        {
            keycounter=0;
            keyflag=0;
            return;
        }
        keyflag=1;
        key_process(keyvalue);
    }
}
void key_process(uchar upload)
{
    if(upload&0x40==0x40)
    {
        /*
        f++;
        if(f>=10000)f=9999;
        */
        dis_0++;//个位
        if(dis_0==10)
        {
           dis_0=0;
           dis_1++;//十位
           if(dis_1==0)
           {
              dis_1=0;
              dis_2++;//百位
              if(dis_2==10)
              {
                  dis_2=0;
                  dis_3++;//千位
                  if(dis_3==10)
                  dis_3=9;
           }
             }
              }
      }
    
    else if(upload&0x80==0x80)
    {
        /*
        f--;
        if(f<0)f=0;
        */
        dis_0--;//个位
        if(dis_0<0)
        {
          dis_0=9;    
          dis_1--;//十位
          if(dis_1<0)
          {
            dis_1=9;
            dis_2--;//百位
            if(dis_2<0)
            {
              dis_2=9;
              dis_3--;//千位
              if(dis_3<0)
              dis_3=0;
           }
           }
          }  
     }
 }

使用特权

评论回复
25
xzhenggen|  楼主 | 2007-7-10 11:22 | 只看该作者

在主函数里面调用键盘扫描子程序

void main()
{
   ......
   
   key();
   
   ......
}
为啥不能执行按键加,减?

使用特权

评论回复
26
xzhenggen|  楼主 | 2007-7-10 11:26 | 只看该作者

我上面的键值处理函数正确吗?

使用特权

评论回复
27
yewuyi| | 2007-7-10 13:24 | 只看该作者

正确与否得靠你自己去搞清楚了……

俺可没兴趣慢慢看完这个程序……

使用特权

评论回复
28
hotpower| | 2007-7-10 13:28 | 只看该作者

我倒~~~XWJ在外地灌水好象没空,可惜他的俄罗斯方块了~~~

使用特权

评论回复
29
xzhenggen|  楼主 | 2007-7-11 13:10 | 只看该作者

没人理了!!

使用特权

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

本版积分规则