P1 外接 4x4 键盘的反转法扫描 V4 扦测程序无错但有 三处警告 2009 11 07 10 53 P1 口外接 4 4 按键 常用的读出键值的方法有 查表法 和 反转法 查表法的程序最为简短 但是稍多占用一点存储空间 反转 法的程序执行速度最快 只是要求接口是双向的 下面分别给出了使用查表法和反转法读取键值的程序 include include define uint unsigned int define uchar unsigned char 名称 Key Tab 功能 P1 外接 4 4 按键 按照查表法读出键值 返回 按键值 0 15 如无键按下 返回 16 uchar Key Tab void uchar code K Tab 4 4 0 xee 0 xde 0 xbe 0 x7e 0 xed 0 xdd 0 xbd 0 x7d 0 xeb 0 xdb 0 xbb 0 x7b 0 xe7 0 xd7 0 xb7 0 x77 uchar temp1 0 xfe temp2 i j for i 0 i 4 i 扫描低四位 P1 temp1 输出一行 0 temp2 P1 马上就读入 if temp2 j 4 j 就扫描高四位 if temp2 K Tab i j 查表 return i 4 j 查到了就返回按键的 数值 else temp1 crol temp1 1 return 16 没有查到 返回按键 松开的代码 呵呵 实质性的语句不过 9 行 就是这么简练 名称 KeyRvs 功能 P1 外接 4 4 按键 按照反转法读出键值 输出 按键值 0 15 如无键按下 返回 16 uchar KeyRvs void uchar temH temL key P1 0 xf0 temH P1 低四位先输出 0 读入 高 四位含有按键信息 P1 0 x0f temL P1 然后反转输出 0 读入 低 四位含有按键信息 两次读入的时间间隔 必须尽量的小 以尽量避免按键状 态发生变化 有些人给出的程序 就没有注重这些 有些程序甚至还有 间隔几个毫秒的 要知道 按键是会抖动的 夜长梦多 真不知道读出些什 么 呵呵 做而论道给出的这个程序 读键的准确性最高 switch temH case 0 xe0 key 0 break case 0 xd0 key 1 break case 0 xb0 key 2 break case 0 x70 key 3 break default return 16 按下的不是上述按键 就当 是没有按键 switch temL case 0 x0e return key case 0 x0d return key 4 case 0 x0b return key 8 case 0 x07 return key 12 default return 16 按下的不是上述按键 就当 是没有按键 本程序虽然稍多几行 但是没有循环 还可以提前返回 所以执行的速度最快
展开阅读全文