- unsigned char KeyScan(void)
- {
- unsigned char cord_h, cord_l; // 行列值中间变量 假设是第一行第二列按下 1011 1110
- KeyPort = 0x0f; // 行线输出全为0
- cord_h = KeyPort & 0x0f; // &完以后cord_h是 0000 1110
- if (cord_h != 0x0f) // 先检测有无按键按下
- {
- DelayMs(10); // 去抖
- if ((KeyPort & 0x0f) != 0x0f) {
- cord_h = KeyPort & 0x0f; // 读入列线 cord_h是0000 1110
- KeyPort = cord_h | 0xf0; // 输出当前列线值 1111 1110
- cord_l = KeyPort & 0xf0; // 读入行线值 1111 0000
- while ((KeyPort & 0xf0) != 0xf0)
- ; // 等待松开并输出
- return (cord_h + cord_l); // 键盘最后组合码值 1111 1110
- }
- }
- return (0xff); // 返回该值
- }
- unsigned char KeyPro(void)
- {
- switch (KeyScan()) {
- case 0x7e:return 0;break; // 0 按下相应的键显示相对应的码值
- case 0x7d:return 1;break; // 1
- case 0x7b:return 2;break; // 2
- case 0x77:return 3;break; // 3
- case 0xbe:return 4;break; // 4 1011 1110
- case 0xbd:return 5;break; // 5
- case 0xbb:return 6;break; // 6
- case 0xb7:return 7;break; // 7
- case 0xde:return 8;break; // 8
- case 0xdd:return 9;break; // 9
- case 0xdb:return 10;break; // a
- case 0xd7:return 11;break; // b
- case 0xee:return 12;break; // c
- case 0xed:return 13;break; // d
- case 0xeb:return 14;break; // e
- case 0xe7:return 15;break; // f
- default:return 0xff;break;
- }
- }
复制代码 我这个计算哪里不对呀??我烧录实测这个函数没问题是可以使用的。。
|