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

📄 keyboard.c

📁 KeilC开发,51通过8255对外部4*4键盘进行控制.按键分别为0-9以及上下左右,加上确认取消.
💻 C
字号:
#include <reg51.h>
#include <8255A.h>
#include <keyboard.h>


void delay10ms(void)
{
	unsigned char i,j,k;
    for(i=5;i>0;i--)
	    for(j=4;j>0;j--)
	        for(k=248;k>0;k--);
}


void delay500ms(void)
{
	unsigned char i,j,k;
	for(i=15;i>0;i--)
	    for(j=202;j>0;j--)
    		for(k=81;k>0;k--);
}

void setcol(Uchar col)
{
//	SelectForm0(0,0,0,1);//PortA output ,PortB input
	delay8255();
	if (col==1) PortA=0xff-0x10;
	if (col==2) PortA=0xff-0x20;
	if (col==3) PortA=0xff-0x40;
	if (col==4) PortA=0xff-0x80;
}

Uchar getrow()
{
	Uchar temprow=0,port=0;
	port=PortB&0x0f;
	switch(port)
	{
		case 14:temprow=1;break;
		case 13:temprow=2;break;
		case 11:temprow=3;break;
		case  7:temprow=4;break;
		default:temprow=0;
	}
	return (temprow);
}

void delay8255(void)
{
	Uchar i;
	for(i=0;i<100;i++);
}

unsigned char WaitKey()
{
	char col,row,temprow,tempcol;
	int flag=0;

	temprow=0;
	
	while(temprow==0)
	{
		for(tempcol=1;tempcol<=4;tempcol++)
		{
			setcol(tempcol);
//			delay10ms();
			temprow=getrow();
			if(temprow!=0)
			{
//				delay10ms();
//				if(temprow==getrow())
				{
					col=tempcol;
					row=temprow;
					break;
				}

			}
			
		}
	}
	return(10*col+row);	
}

unsigned char GetKey()
{
	int tmp,ret;
	Uchar i=0;
	SelectForm0(0,0,0,1);
	delay8255();
	tmp = WaitKey();
	switch(tmp)
	{

	
		case 11: ret=NUM0;break;
		case 21: ret=NUM8;break;
 	    case 31: ret=NUM5;break;
		case 41: ret=NUM2;break;
		
		case 12: ret=CANCEL;break;
		case 22: ret=NUM9;break;
		case 32: ret=NUM6;break;
		case 42: ret=NUM3;break;
		
		case 13: ret=DOWN;break;
		case 23: ret=RIGHT;break;
		case 33: ret=LEFT;break;
		case 43: ret=UP;break;

		case 14: ret=CONFIRM;break;
		case 24: ret=NUM7;break;
		case 34: ret=NUM4;break;
		case 44: ret=NUM1;break;

		default: ret=0xff;
	}
	return ret;
}

⌨️ 快捷键说明

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