⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 4*4键盘扫描程序,程序简单明了,注释清晰易懂 !
💻 C
字号:
#include <reg51.h>
#include <SwitchDect.h>


#define uchar unsigned char


bit bdata KeyFlag;
uchar KeySeqFlag = 0;
/********************************************
uchar code KeyTab[16] =
{
	0x88,0x84,0x82,0x81,// 1  2  3  PU
	0x48,0x44,0x42,0x41,// 4  5  6  PD
	0x28,0x24,0x22,0x21,// 7  8  9  NULL
	0x18,0x14,0x12,0x11,// *  0  #  NULL
} ******************************************/


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--);
}


void delay200ms(void)
{
	unsigned char i,j,k;
		for(i=5;i>0;i--)
			for(j=132;j>0;j--)
				for(k=150;k>0;k--);
}


void delay1s(void)
{
	unsigned char h,i,j,k;
	
	for(h=5;h>0;h--)
		for(i=4;i>0;i--)
			for(j=116;j>0;j--)
				for(k=214;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);
	}
}


void KeyDisplay(uchar KeyValue, uchar Row, uchar Col)
{	
	switch(KeyValue)
	{
		case 0x88 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 1);
			break;
		case 0x84 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 2);
			break;
		case 0x82 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 3);
			break;
//		case 0x81 :
//			break;
		case 0x48 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 4);
			break;
		case 0x44 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 5);
			break;
		case 0x42 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 6);
			break;
//		case 0x41 :
//			break;
		case 0x28 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 7);
			break;
		case 0x24 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 8);
			break;
		case 0x22 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 9);
			break;
//		case 0x21 :
//			break;
//		case 0x18 :
//			break;
		case 0x14 :
			DisplayChar(Row, Col, SpecLib, 0);
			DisplayChar(Row, Col, NumLib, 0);
			break;
//		case 0x12 :
//			KeySeqFlag = 0;
//			break;
//		case 0x11 :
//			break;
		default:
			break;		
	}		
	return;		
}


void KeyDeal(uchar KeyValue)
{
	uchar Col = 0;
	uchar Row = 0;
	uchar Cnt = 0;

	if(Col>15)
	{
		Col = 0;
		Row ++;
		if(Row>3)
		{
			Row = 0;
			ClrFullScr();
		}
	}

	if((0x18==KeyValue)&&(0 == KeySeqFlag))
	{
		KeySeqFlag = 1;
		for(Cnt = 0; Cnt<7; Cnt++)
		{
			DisplayWord(Row,Col,PhoneWdLib,Cnt);
			Col++;
			Col++;
		}		
	}
	else if(1==KeySeqFlag)
	{
		if(0x12==KeyValue)
			KeySeqFlag = 0;
		else 
		{	
			KeyDisplay(KeyValue,Row, Col);
			Col++;
			delay200ms();
		}
	}
	else
		return;
}

⌨️ 快捷键说明

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