[AVR单片机] 按键问题

[复制链接]
2190|4
 楼主| anxiaoxi 发表于 2011-5-9 14:34 | 显示全部楼层 |阅读模式
请问大家谁能给讲讲项目中的按键扫描
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 | 显示全部楼层
哇哦,这也简单啊?
ZRL700424 发表于 2011-5-14 14:07 | 显示全部楼层
前面6个字不对(应该去掉),后面6个字是对的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部