單機片矩陣鍵盤程式

  在大學時很多程式課都要求實現單機片矩陣鍵盤,那麼小編在這通過計演算法來實現微控制器的4*4矩陣鍵盤,程式比較簡捷,供大家學習。

  unsigned char Keycan***void*** //按鍵掃描程式 P1.0--P1.3為行線 P1.4--P1.7為列線

  {

  unsigned char rcode, ccode;

  P1 = 0xF0; // 發全0行掃描碼,列線輸入

  if******P1&0xF0*** != 0xF0*** // 若有鍵按下

  {

  delay******;// 延時去抖動

  if******P1&0xF0*** != 0xF0***

  { rcode = 0xFE; // 逐行掃描初值

  while******rcode&0x10*** != 0***

  {

  P1 = rcode; // 輸出行掃描碼

  if******P1&0xF0*** != 0xF0*** // 本行有鍵按下

  {

  ccode = ***P1&0xF0***|0x0F;

  do{;}while******P1&0xF0*** != 0xF0***; //等待鍵釋放

  return ******~rcode*** + ***~ccode******; // 返回鍵編碼

  }

  else

  rcode = ***rcode<<1***|0x01; // 行掃描碼左移一位

  }

  }

  }

  return 0; // 無鍵按下,返回值為0

  }

  void KeyDispaly***unsigned char key***

  {

  switch***key***

  {

  case 0x11: display***0***; break;

  case 0x21: display***1***; break;

  case 0x41: display***2***; break;

  case 0x81: display***3***; break;

  case 0x12: display***4***; break;

  case 0x22: display***5***; break;

  case 0x42: display***6***; break;

  case 0x82: display***7***; break;

  case 0x14: display***8***; break;

  case 0x24: display***9***; break;

  case 0x44: display***10***; break;

  case 0x84: display***11***; break;

  case 0x18: display***12***; break;

  case 0x28: display***13***; break;

  case 0x48: display***14***; break;

  case 0x88: display***15***; break;

  default: break;

  }

  }

  如果Keyscan放在主函式裡,得到按鍵編碼的變數,必須也放在主函式裡。