小涵子爸爸 发表于 前天 15:22

第十一集-矩阵按键— 实验一:数码管第一位显示按键键号

void Seg_Task(void) //数码管显示任务,每毫秒刷新一次
{
    if(Key_num == 0xFF) //当未检测到按键按下
    {
      Display_Seg( SEG_NUM , ~T_NUM);      
    }
    else
    {
      Display_Seg( SEG_NUM , ~T_NUM);    //如果被按下,发送Key_num值
    }
   
}

u8 Key_num = 0xFF;
void Task_1(void)
{
    //①第一步:现将P0.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
    COL1 = 0;
    COL2 = 0;
    COL3 = 0;
    COL4 = 0;
    ROW1 = 1;
    ROW2 = 1;
    if((ROW1==0)||(ROW2==0)) //如果行按键有按下
    {
      if((ROW1==0)&&(ROW2==0))//如果两行都有按键按下,不处理
      {
            
      }
      else if (((ROW1==1)&&(ROW2==0))||((ROW1==0)&&(ROW2==1))) //如果有按键按下,而且只有一颗
      {
            if(ROW1==0)    //判断哪一行被按下,输出行开始的序号
            {
                Key_num =0;
            }
            else if (ROW2==0)
            {
                Key_num =4;
            }
            
            //②第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。
            COL1 = 1;
            COL2 = 1;
            COL3 = 1;
            COL4 = 1;
            ROW1 = 0;
            ROW2 = 0;
            
            if(COL1==0)//判断哪一列被按下,叠加按键的序号
            {
                //Key_num = Key_num + 0;
            }
            else if (COL2==0)
            {
                Key_num = Key_num + 1;
            }
            else if (COL3==0)
            {
                Key_num = Key_num + 2;
            }
            else if (COL4==0)
            {
                Key_num = Key_num + 3;
            }
      }
    }
    else
    {
      Key_num = 0xFF;//如果按键没被按下
    }   
}





页: 1 2 [3]
查看完整版本: Ai8051U学习打卡记录贴