一种简单的单片机矩阵键盘的程序

 时间:2024-10-13 20:45:38

1、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}

2、void KeyDispaly(unsigne蟠校盯昂d char key){ switch(key) { cas髫潋啜缅e 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; }}

3、如果Keyscan放在主函数里,得到按键编码的变量,必须也放在主函数里。

  • 月经淋漓不尽的原因,月经淋漓不尽怎么办?
  • 讲卫生手抄报如何做
  • 夏季防晒推荐五款美白水果汁 协助防晒美白
  • 无尽大冒险召唤师攻略
  • 当代大学生怎样学好电子商务
  • 热门搜索
    黑白手抄报花边边框 环保小报手抄报 手抄报花边又漂亮 文明餐桌手抄报 数学手抄报内容三年级 手抄报关于读书 国庆节英语手抄报内容 关于马的手抄报图片 法制进校园手抄报 时代广场的蟋蟀手抄报