keyscan.c

来自「扫描键盘」· C语言 代码 · 共 59 行

C
59
字号
#include <reg52.h>
#define uchar unsigned char

bit bdata KeyFlag;	
	
void Delay10ms(void)
{
	uchar i,j,k;

	for(i=5; i>0; i--)
		for(j=4; j>0; j--)
			for(k=248; k>0; k--);
}

uchar KeyScan(void)
{
	uchar PreRead;					/*first read key value*/
	uchar ReRead;					/*second read key value*/
	uchar RowTemp;
	uchar ColTemp;
	
	KeyFlag = 0;

	P2 = 0xf0;
	RowTemp = P2 & 0xf0;			/*read row value*/
	if(RowTemp == 0xf0) return(0xff);

	P2 = 0x0f;
	ColTemp = P2 & 0x0f;			/*read column value*/

	PreRead = RowTemp|ColTemp;		/*get keyboard scan value*/
	
	Delay10ms();

	P2 = 0xf0;
	RowTemp = P2 & 0xf0;			/*reread row value*/
	if(RowTemp == 0xf0) return(0xff);

	P2 = 0x0f;
	ColTemp = P2 & 0x0f;			/*reread column value*/

	ReRead = RowTemp|ColTemp;		/*re-get keyboard scan value*/

	if(PreRead==ReRead)
	{
		KeyFlag = 1;
		//P2 = 0xf0;
		return(~ReRead);
	}
}

main()
{
	uchar GetKeyValue;
	uchar KeyValue;
	GetKeyValue=KeyScan();
	if(KeyFlag = 1)
		KeyValue = GetKeyValue;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?