📄 key.c
字号:
/*****************************************************************/
/*函数名称: keyscan.c */
/*函数功能: 键盘启动 */
/*入口参数: P5--------------------------------------------数据传输
/*有无返回: 无 */
/*修改记录: 无修改记录 */
/*编写作者: t483-4-19chenyong */
/*编写日期: 2007-4-06 */
/*****************************************************************/
#include "common.h"
#include "key.h"
#include "delay.h"
unsigned char a[4]={0xef,0xdf,0xbf,0x7f}; //从P5_4到P5_7依次发送低电平,对列写键值
unsigned char coding(unsigned char n) //译码
{
switch(n)
{
case 0xfe: return 0;break; //输入为 11111110 即为行号0
case 0xfd: return 1;break; //输入为 11111101 即为行号1
case 0xfb: return 2;break; //输入为 11111011 即为行号2
case 0xf7: return 3;break; //输入为 11110111 即为行号3
}
}
unsigned char keyscan()
{
unsigned char b;
unsigned char c;
unsigned char i;
unsigned char keyvalue=0xff;
SFRPAGE = 0x0F;
P5=0x00;
SFRPAGE = 0x0F;
P5=0xfb;
SFRPAGE = 0x0F;
P5=0xfe;
SFRPAGE = 0x0F;
P5=0xff;
for(i=0;i<4;i++) //列扫描,从P5_4开始到P5_7;i=0对应P5_4即第0列.
{
SFRPAGE = 0x0F;
P5=a[i];
SFRPAGE = 0x0F; //写键值,低电平有效
b=P5; //读健值,低电平有效
b=b|0xf0; //取低四位(P5_0--P5_3)的低电平;屏蔽高四位(P5_4--P5_7)的低电平
if(b!=0xff)
{
delay_nms(100); //去抖动
SFRPAGE = 0x0F;
c=P5;
c=c|0xf0;
if(b==c)
keyvalue=i*4+coding(c); //键值=列号*4+行号
}
}
return keyvalue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -