有关单片机键盘的讨论

2019-07-15 20:10发布

void timer() interrupt 1
{
        static uint time1=0;
    TH0 = 0xFC;
        TL0 = 0x67;
        keystart=0xf0;
    if(keystart!=0xf0)
        {
            time1++;
                if(time1>=4&&keystart!=0xf0)
           {
              keystart=0xf0;//为什么这里keystart还要被赋值0xf0呢?(这是我在网上搜的)这样的话后面                   的 switch语句就没什么作用了吗(keystart只能为0xf0
              switch(keystart)
                  {
                     case 0x70:value=0;break;
                         case 0xb0:value=4;break;
                         case 0xd0:value=8;break;
                         case 0xe0:value=12;break;
                         default:break;
                  }
                     keystart=0x0f;
                  switch(keystart)
                  {
                     case 0x07:value+=0;break;
                         case 0xb0:value+=1;break;
                         case 0xd0:value+=2;break;
                         case 0xe0:value+=3;break;
                         default:break;
                  }
                  time1=0;
                  a=0;
                }
        }                       
}

键盘电路图.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
elec_jockey
1楼-- · 2019-07-16 01:52
 精彩回答 2  元偷偷看……
低调~小营长
2楼-- · 2019-07-16 05:37
我的意思是说为什么keystart会再次赋值,第一个if语句不是已经赋值了吗?为什么还要再次赋值?麻烦你认真看下我的程序
zy2014
3楼-- · 2019-07-16 10:48
keystart=0xf0;由于存在线与关系,keystart值会改变,故进入外层if语句中,time1>=4发挥延时消抖的作用(并且要求time1<5期间keystart的值不等于0xf0,即按键一直处于按下的状态),之后再次给keystart赋值0xf0通过判断低四位得到按下的哪一行按键,然后再次给keystart赋值0x0f判断高四位得到按下的是哪一列按键。最终得到按键信息


参考参考之前的回帖吧
http://bbs.elecfans.com/forum.ph ... amp;fromuid=1362400

一周热门 更多>