📄 keyboard.c
字号:
/**************************************
** Filename: keyboard.c
** Describe: 矩阵键盘程序
** Author : 古欣 www.avrvi.com
** Time : 2007-2-15
**************************************/
#include "config.h"
/**************************************
** 说明:线翻转法进行键盘扫描
** 输出:获得高低位的扫描值
** 有键时需要耗时 14ms
**************************************/
unsigned char key_scan(void)
{
unsigned char temp=0,key=0;
KEY_DDR = 0xF0; //高四位输出0,键按下,则对应的值为0
KEY_PORT = 0x0F; //低四位输入,内部电阻上拉,没有键按下时为高
temp = KEY_PIN&0x0F;//与掉高四位
if(temp==0x0F)
{
return 0; // 无按键返回
}
else
{
delay_ms(10);
temp = KEY_PIN&0x0F; //延时去抖后再检测
if(temp==0x0F)
return 0;
else
key=temp;
}
//翻转
KEY_DDR = 0x0F; //低四位输出0,键按下,则对应的值为0
KEY_PORT = 0xF0; //高四位输入,内部电阻上拉,没有键按下时为高
delay_ms(3); //延时等待稳定
temp = KEY_PIN&0xF0;//与掉低四位
if(temp==0xF0)
{
return 0; // 无按键返回
}
else //这里不再延时再扫描,因为已经确定了不是抖动才会进入本步操作。
{
key |= temp; //高低位的键值进入KEY
}
KEY_DDR = 0x00;/*输出复位*/
KEY_PORT = 0xFF;
return key;
}
/**************************************
** 说明:获得键盘的值
** 内部调用函数key_scan
** 输出:实际键值
**************************************/
unsigned char get_key(void)
{
unsigned char i=0;
i=key_scan();
switch (i) {/*将按键码转换成键值*/
case 0x00: return 0x00;
case 0xEE: return '1';
case 0xED: return '2';
case 0xEB: return '3';
case 0xE7: return 'A';
case 0xDE: return '4';
case 0xDD: return '5';
case 0xDB: return '6';
case 0xD7: return 'B';
case 0xBE: return '7';
case 0xBD: return '8';
case 0xBB: return '9';
case 0xB7: return 'C';
case 0x7E: return '*';
case 0x7D: return '0';
case 0x7B: return '#';
case 0x77: return 'D';
default : return 0x00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -