键盘——独立键盘和矩阵键盘

1.独立按键

按键按下之后,按键的高电平被拉成低电平。
这里写图片描述

所以对独立按键按下并且弹起的判断:

    while(1)
    {
         if(0 == key1)//有按键按下
         {
              delay_ms(10);
              if(0 == key1)//确定有按键按下
              {

                   while(!key1);//有按键抬起
                   delay_ms(10);
                   while(!key1);//确实有按键抬起
                  /*
                        在此处写下操作
                   */
               }
         }
    }

矩阵键盘

这里写图片描述

//物理地址
unsigned char key_scan(void)
{
      unsigned char keyvalue;
      KEYPORT = 0xf0;
      if(0xf0 != KEYPORT)
      {
               delay_ms(10);
              if(0xf0 != KEYPORT)
              {
                        KEYPORT = 0xfe;
                      if(0xfe != KEYPORT)
                       {
                                 keyvalue = KEYPORT;
                              keyvalue &= 0xf0;
                              keyvalue +=0x0e;
                              while(0xfe != KEYPORT);
                              delay_ms(10);
                                while(0xfe != KEYPORT);
                              return keyvalue;
                          }
                        KEYPORT = 0xfd;
                        if(0xfd != KEYPORT)
                        {
                                 keyvalue = KEYPORT;
                              keyvalue &= 0xf0;
                              keyvalue +=0x0d;
                              while(0xfd != KEYPORT);
                              delay_ms(10);
                                while(0xfd != KEYPORT);
                              return keyvalue;
                           }
                        KEYPORT = 0xfb;
                        if(0xfb != KEYPORT)
                        {
                                 keyvalue = KEYPORT;
                              keyvalue &= 0xf0;
                              keyvalue +=0x0b;
                              while(0xfb != KEYPORT);
                              delay_ms(10);
                                while(0xfb != KEYPORT);
                              return keyvalue;
                           }
                        KEYPORT = 0xf7;
                        if(0xf7 != KEYPORT)
                        {
                                 keyvalue = KEYPORT;
                              keyvalue &= 0xf0;
                              keyvalue +=0x07;
                              while(0xf7 != KEYPORT);
                              delay_ms(10);
                                while(0xf7 != KEYPORT);
                              return keyvalue;
                          }
                  }
         }
        return 0xff;
}
//逻辑地址
unsigned char key_scanf(void)
{
      unsigned char key_num;
      key_num = key_scan();
      switch(key_num)
      {
                case 0x7e:return 0;break;
               case 0xbe:return 1;break;
               case 0xde:return 2;break;
               case 0xee:return 3;break;
               case 0x7d:return 4;break;
               case 0xbd:return 5;break;
               case 0xdd:return 6;break;
               case 0xed:return 7;break;
               case 0x7b:return 8;break;
               case 0xbb:return 9;break;
               case 0xdb:return 10;break;
               case 0xeb:return 11;break;
               case 0x77:return 12;break;
               case 0xb7:return 13;break;
               case 0xd7:return 14;break;
               case 0xe7:return 15;break;
               default:return 0xff;break;
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值