打印
[AVR单片机]

按键问题

[复制链接]
1405|4
手机看帖
扫描二维码
随时随地手机跟帖
沙发
airwill| | 2011-5-11 18:31 | 只看该作者
哈哈, 请人写论文呢?
不如自己网上找些看看吧

使用特权

评论回复
板凳
ming117284| | 2011-5-13 13:41 | 只看该作者
最简单精练的扫描按键处理
void KeyScan()
{
        KeyRead=0x00;

       if(!PIND.6)
           {
             KEYMODE=1;
             KeyRead|=0x10;
               }
          else
                  {
                 KEYMODE=0;
                 KeyRead&=0xe0;
                  }

        if(!PIND.5)
           {
              KEYUP=1;
                 KeyRead|=0x20;
                }
          else
                  {
                  KEYUP=0;
                 KeyRead&=0xd0;
                  }

         if(!PIND.4)
                 {
                 KEYDOWN=1;
                 KeyRead|=0x40;
                  }
          else
                  {
                  KEYDOWN=0;
                  KeyRead&=0xb0;
                  }

        if(KeyRead==0x00)
        {
                FirKey=0;
                SecKey=0;

                if(!NonKey)
                {
                        NoKeyCnt++;
                        if(NoKeyCnt>2)
                        {
                                NonKey=1;
                        }
                }

                KeySerCnt=0x00;
                KeySpd=0x00;
        }

        else//KeyRead!=0
        {
                if(!FirKey)
                {
                        FirKey=1;
                }

                else if(!SecKey)
                {
                        SecKey=1;
                        NonKey=0;
                        NoKeyCnt=0;

                        ConductKey();
                }

                else
                {
                        NonKey=0;
                        NoKeyCnt=0;


                        if( KEYMODE )
                        {
                                KeySerCnt++;
                                if(KeySerCnt>70)
                                {
                                        KeySerCnt=0x00;
                                        SerMode=1;
                                        ConductKey();
                                }
                        }

                        else if( KEYUP|| KEYDOWN )
                        {
                                KeySerCnt++;
                                if(KeySerCnt>KeySpdTab[KeySpd])
                                {
                                        KeySerCnt=0x00;
                                        if(KeySpd<5)
                                        {
                                                KeyConductCnt++;
                                                if(KeyConductCnt>6)
                                                {
                                                        KeyConductCnt=0;
                                                        KeySpd++;
                                                }
                                        }

                                        ConductKey();
                                }
                        }
                }
        }
}

使用特权

评论回复
地板
hgjinwei| | 2011-5-14 12:03 | 只看该作者
哇哦,这也简单啊?

使用特权

评论回复
5
ZRL700424| | 2011-5-14 14:07 | 只看该作者
前面6个字不对(应该去掉),后面6个字是对的

使用特权

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

本版积分规则

0

主题

1

帖子

0

粉丝