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

📄 testkeypad.c

📁 键盘信号接收的例子
💻 C
字号:
#include <AT89X52.H>

#define uchar unsigned char
#define uint  unsigned int

sbit  KB_DAT =P1^2;
sbit  KB_CLK =P3^2;
extern void ShowOneChar(uchar x,uchar y,uchar wdata);
extern void ShowMessage(uchar x,uchar y, uchar *ptr);
extern void LcdReset( void );
extern void LcdCls(uchar row);
uchar x,start1,end1,start2,end2;
#define BUFSIZE 32
uchar keybuf[BUFSIZE],putlast,getlast,cnt;
uchar code sign[]={"|/-+/"};
uchar code Hex_[]="0123456789ABCDEF";
bit tt;
bit keyin=0;

void Delay1Ms(uint n)
{ uchar j;
	while(n--)	{	for(j=125;j>0;j--);	}
}

void KeyPadInt1() interrupt 0 using 1
{	static uchar bitc=0,d;
	if(!keyin)
	{
		if(bitc==0)	{	if(!KB_DAT) {	keybuf[0]=d=0;	bitc++;	}	}
		else if(bitc<9)
		{
			d>>=1;
			if(KB_DAT) d|=0x80; else d&=0x7f;
			bitc++;
		}
		else if(bitc==9) bitc++;
		else if(bitc==10) 
		{	bitc=0;		
			if(KB_DAT)
			{	keybuf[0]=d;	if(putlast==BUFSIZE)putlast=0;	
				if(d==0xF0) tt=1; else {	keyin=1;	}
			}
		}
		else bitc=0;
	}
}

uchar DeCode(uchar d)
{	
	switch(d)
	{
		case 0x45: 	d='0';	break;
		case 0x16:	d='1'; 	break;
		case 0x1E:  d='2';	break;
		case 0x26: 	d='3';	break;
		case 0x25:	d='4'; 	break;
		case 0x2E:  d='5';	break;
		case 0x36: 	d='6';	break;
		case 0x3D:	d='7'; 	break;
		case 0x3E:  d='8';	break;
		case 0x46: 	d='9';	break;
		case 0x05:	d='A'; 	break;
		case 0x06:  d='D';	break;
		case 0x70:	d='0';	break;
		case 0x69:	d='1';	break;
		case 0x72:	d='2';	break;
		case 0x7A:	d='3';	break;
		case 0x6B:	d='4';	break;
		case 0x73:	d='5';	break;
		case 0x74:	d='6';	break;
		case 0x6C:	d='7';	break;
		case 0x75:	d='8';	break;
		case 0x7D:	d='9';	break;
		case 0xF0:	d='|';	break;
		default:  	d='.';	break;
		
	}
	return(d);
}

void main()
{	uchar i=0,j;	uint k=0;
	putlast=getlast=0;	cnt=0; tt=0;
	LcdReset();
	TCON |=0x05;
	ShowMessage(0,0,"Key Code:");
	Delay1Ms(10);
	EX0=1;	EA=1;
	while(1)
	{
		if(keyin)
		{	if(tt) tt=0;
			else
			{	if(x>15){	LcdCls(1);	x=0;	}
				j=keybuf[0]; 
				if(j!=0x5A)
				{	ShowOneChar(x++,1,DeCode(j));
					ShowOneChar(9,0,Hex_[j>>4]);
					ShowOneChar(10,0,Hex_[j&0x0f]);
					ShowOneChar(12,0,Hex_[(++cnt/10)%10]);
					ShowOneChar(13,0,Hex_[cnt%10]);
				}
			}
			keyin=keybuf[0]=0;
		}		
		if(k++%1500==0) ShowOneChar(15,0,sign[i++%5]);
	}
}

⌨️ 快捷键说明

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