430 4*4 键盘扫描程序

w504491134   2012-7-14 21:01 楼主
那位大哥给我发个 430的键盘扫描程序   感激不尽

回复评论 (7)

uchar key_val;          //存放键值
uchar key_Map[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
//Check_Key(),检查按键,确认键值
void Check_Key(void)
{
    uchar row ,col,tmp1,tmp2;
   
    tmp1 = 0x80;
    for(row = 0;row < 4;row++)              //行扫描
    {
        P1OUT = 0xf0;                      //P1.4~P1.7输出全1
        P1OUT -= tmp1;                      //P1.4~p1.7输出四位中有一个为0
        tmp1 >>=1;                              
        if ((P1IN & 0x0f) < 0x0f)           //是否P1IN的P1.0~P1.3中有一位为0
        {                       
            tmp2 = 0x01;                         // tmp2用于检测出那一位为0  
            for(col = 0;col < 4;col++)              // 列检测
            {         
                if((P1IN & tmp2) == 0x00)           // 是否是该列,等于0为是
                {         
                    key_val = key_Map[row * 4 + col];  // 获取键值
                    return;                         // 退出循环
                }
                tmp2 <<= 1;                        // tmp2右移1位
            }
        }
    }      
}

这只是一个子程序,我不知道你主程序要执行什么操作,所以只能给你这些,希望对你有帮助。
点赞  2012-7-14 21:57
点赞  2012-7-18 20:21
点赞  2012-7-22 19:23
点赞  2012-7-24 11:38
Very Good~
点赞  2012-7-28 21:15
uchar keycode[16]={
                      0xee,0xde,0xbe,0x7e,
                      0xed,0xdd,0xbd,0x7d,
                      0xeb,0xdb,0xbb,0x7b,
                      0xe7,0xd7,0xb7,0x77,                             
                  };//矩阵键盘按键码
unsigned char key_done()
{
  unsigned char row,col,i,k=16;
  flag=0;
  P4DIR=0xf0;
  P4OUT=0x0f;
  if((P4IN&0x0f)!= 0x0f)
  {
    delay1ms(5);
    if((P4IN&0x0f)!= 0x0f)
    {
     
      col=P4IN&0x0f;
      P4DIR=0x0f;
      P4OUT=0xf0;
      row=P4IN&0xf0;
      for(i=0; i<16; i++)
      {
        if((row|col)==keycode)
        {
          k=i;
          flag=1;
          break;
        }
      }
    }
    P4DIR=0xf0;
    P4OUT=0x0f;
    while((P4IN&0x0f)!=0x0f);
  }
  return k;
}

需要在IO口加上拉电阻。
点赞  2012-7-29 11:42

回复 7楼 gujiao 的帖子

请问这个程序能够实现么?我想在液晶上显示键值,但是没反应  求指导  谢谢!
点赞  2012-8-3 01:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复