[文档下载] 基于51单片机之8个独立式键盘驱动程序

[复制链接]
1038|6
 楼主| 跟屁虫 发表于 2015-10-12 20:43 | 显示全部楼层 |阅读模式
本帖最后由 跟屁虫 于 2015-10-12 20:45 编辑


  1. #define KEY P1 //键盘所连接的I/O接口组定义

  2. *********************************************************************************************
  3. 函数名:8个独立式键盘驱动程序
  4. 调  用:? = Key ();
  5. 参  数:无
  6. 返回值:unsigned char 键值0~8
  7. 结  果:有键按下时返回值为键值1~8,无键按下时返回值为0
  8. 备  注:在主函数中不断调用
  9. **********************************************************************************************/
  10. unsigned char Key ( ){ //8个独立键盘处理程序
  11. unsigned char a,b;
  12. KEY = 0xff; //设定键盘初始电平状态
  13. if (KEY != 0xff){ //读取键盘状态是否改变
  14.    Delay (20); //延时20ms去抖动
  15.    if (KEY != 0xff){ //重新读取
  16.    a = KEY; //寄存状态值到a
  17. }
  18. switch(a){ //键盘状态查表
  19.     case 0xfe: b = 1; break;
  20.     case 0xfd: b = 2; break;
  21.     case 0xfb: b = 3; break;
  22.     case 0xf7: b = 4; break;
  23.     case 0xef: b = 5; break;
  24.     case 0xdf: b = 6; break;
  25.     case 0xbf: b = 7; break;
  26.     case 0x7f: b = 8; break;
  27.     default:   b = 0 ; break;
  28.     }
  29. }
  30. return (b); //将b中的键值代号送入函数返回值
  31. }

 楼主| 跟屁虫 发表于 2015-10-12 20:43 | 显示全部楼层
本帖最后由 跟屁虫 于 2015-10-12 20:46 编辑

这篇文档里面有没有关于消抖的程序啊?

mintspring 发表于 2015-10-12 20:55 | 显示全部楼层
那个延时函数就是消除抖动的,我觉得用中断做可以省掉这个。
mintspring 发表于 2015-10-12 20:56 | 显示全部楼层
应该用松手检测效果会更好。
稳稳の幸福 发表于 2015-10-12 21:13 | 显示全部楼层
if (KEY != 0xff){ //读取键盘状态是否改变
   Delay (20); //延时20ms去抖动
   if (KEY != 0xff){ //重新读取
   a = KEY; //寄存状态值到a
wahahaheihei 发表于 2015-10-12 21:51 | 显示全部楼层
延时函数这个我不喜欢用。
西门扫雪 发表于 2015-10-13 08:18 | 显示全部楼层
这段代码里好像没有长按短按之说
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

245

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部