提交的时候很完整,怎么出来就显示不全了,重新提交一下:
- #include <intrins.h>
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define KEY_LENGTH 16
- uchar code TableKeyData[2][KEY_LENGTH] = {
- {0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7,0x7e, 0x7d, 0x7b, 0x77},
- {'1', '4', '7', '.', '2', '5', '8', '0', '3', '6', '9', '=', '+', '-', '*', '/'}};
- #define ID_KEY_DATA 0
- #define ID_KEY_NAME 1
- // @12.000MHz
- void Delay10ms(void) {
- uchar i, j;
- i = 20;
- j = 113;
- do {
- while (--j) {
- }
- } while (--i);
- }
- uchar KeyScan(void) {
- uchar ucData;
- uchar i;
- // 全部列下拉
- P2 = 0x0f;
- _nop_();
- ucData = P2;
- if (ucData == 0x0f) {
- return KEY_LENGTH;
- }
- Delay10ms();
- // 确定无抖动干扰
- if (P2 != ucData) {
- return KEY_LENGTH;
- }
- // 释放列下拉,转换为当前按键的行下拉
- P2 = ucData | 0xf0;
- _nop_();
- // 读取键值
- ucData = P2;
- Delay10ms();
- // 确定按键唯一准确
- if (P2 != ucData) {
- return KEY_LENGTH;
- }
- // 查表确定按键索引(ID),查到有效ID则退出,否则索引等于KEY_LENGTH
- for (i = 0; i < KEY_LENGTH; i++) {
- if (ucData == TableKeyData[ID_KEY_DATA][i]) {
- break;
- }
- }
- // 重置全部列下拉
- P2 = 0x0f;
- _nop_();
- // 等待按键释放
- while (P2 != 0x0f) {
- }
- // 返回按键ID
- return i;
- }
- void main(void) {
- uchar ucKey;
- while (1) {
- ucKey = KeyScan();
- if (ucKey < KEY_LENGTH) {
- P1 = ucKey; // 临时测试,用P1观察结果
- // 可以送显示结果,或者串口发送结果,或用swicth执行按键任务...
- // LcdDisplay(0, 0, TableKeyData[ID_KEY_NAME][ucKey]);
- }
- }
- }
复制代码
|