📄 key.c
字号:
/*********************************************************************************************************
**
** (c) Copyright 2004-2006
** All Rights Reserved
**
**
** 版权所有:朗顿科技
** http://www.ldmcu.com
**
********************************************************************************************************/
#include <reg52.h>
#define UCHAR unsigned char
#define UINT unsinged int
void delay(UCHAR i);
void sercon(void);
UCHAR keyscan(void);
main()
{
UCHAR key;
sercon();
for(;;) //循环执行
{
key = keyscan(); //键扫描
if(0 != key)
{
SBUF = key;
}
delay(0);
}
}
void delay(UCHAR i) //延时程序
{
UCHAR j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void sercon(void)
{
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
}
UCHAR keyscan(void)
{
UCHAR sccode,recode;
P1 = 0xF0;
if((P1 & 0xF0) != 0xF0) //若列按键有变动,则执行下面代码
{
delay(500); //去抖
if((P1 & 0xF0) != 0xF0) //若列按键有变动,则执行下面代码
{
sccode = 0xFE; //开始扫描,从P1.0(第一行key1行)设置0开始
while((sccode & 0xef) != 0)//如果P1.4(第一列KEY5)是低电平其它位都是高电平时,执行下面程序
{
P1 = sccode;
if((P1 & 0xF0) != 0xF0) //如果高四位(4列)不是高电平,则执行下面的程序
{
recode = (P1 & 0xF0) | 0x0F; //记录高4位
return((~sccode) + (~recode));//返回键值
}
else
sccode = (sccode << 1) | 0x01;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -