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

📄 key.c

📁 用89c54单片机开发的32键扫描键盘程序。
💻 C
字号:
#pragma large
#include "public.h"
unsigned char xdata row,col;
unsigned char data  gKey,gLastKey;
unsigned char xdata chartable[4][8]={ {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37},
								{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47},
								{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57},
								{0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67}};
void KeyInit()
{
	P0=0x00;	//列
	P3_2=1;
	P3_3=1;
	P4_2=1;
	P4_3=1;	
	gLastKey=0;
	gKey=0; 
}


unsigned char checkcol(unsigned char row,unsigned char * col)
{

	unsigned char xdata i,tmp,tmpKey;;
	switch(row)
	{
		case 0:
			tmpKey=P3_2;	   //首先检测P3_2行
			break;
		case 1:
			tmpKey=P3_3;	   //首先检测P3_2行
			break;
		case 2:
			tmpKey=P4_2;	   //首先检测P3_2行
			break;
		case 3:
			tmpKey=P4_3;	   //首先检测P3_2行
			break;
		default:
			tmpKey=P3_2;	   //首先检测P3_2行
			break;
	}
	
	
	if(tmpKey==0)
	{
		Delay(10);	//去抖动
		switch(row)
		{
		case 0:
			tmpKey=P3_2;	   //首先检测P3_2行
			break;
		case 1:
			tmpKey=P3_3;	   //首先检测P3_2行
			break;
		case 2:
			tmpKey=P4_2;	   //首先检测P3_2行
			break;
		case 3:
			tmpKey=P4_3;	   //首先检测P3_2行
			break;
		default:
			tmpKey=P3_2;	   //首先检测P3_2行
			break;
		}
		if(tmpKey==1) //是干扰
		{
			KeyInit();
			
			return 0;
		}
		switch(row)
		{
		case 0:
			P3_2=0;	   //首先检测P3_2行
			break;
		case 1:
			P3_3=0;	   //首先检测P3_2行
			break;
		case 2:
			P4_2=0;	   //首先检测P3_2行
			break;
		case 3:
			P4_3=0;	   //首先检测P3_2行
			break;
		default:
			P3_2=0;	   //首先检测P3_2行
			break;
		}
		tmpKey=P0;	  //读取列
		if(tmpKey==0xFF)
		{
			KeyInit();
			return 0;
		}
		Delay(10);//去抖动
		tmpKey=P0;
		if(tmpKey==0xFF)
		{
			KeyInit();
			return 0;
		}
		tmpKey^=0xFF;
		for(i=0;i<7;i++)
		{
			tmp=tmpKey&0x01;
			tmpKey>>=1;
			if(tmp==1)
			{
				*col=i;
				return 1;
			}
		}


	}
}


unsigned char keyproc()
{
	unsigned char data tmpKey;


	if(gLastKey!=0)//上次有按钮按下,现在检测是否弹起
	{
		tmpKey=P0;
		Delay(10);//去抖动
		tmpKey=P0;
		if(tmpKey==0xFF)  //按钮弹起
		{
			
			tmpKey=gLastKey|0x81;//

			KeyInit();

			return tmpKey;
		}
	}

	//下面开始按钮按下的检测
	if(checkcol(0,&col)==1)
	{
		gLastKey=chartable[0][col];
		return gLastKey;
	}

	if(checkcol(1,&col)==1)
	{
		gLastKey=chartable[1][col];
		return gLastKey;
	}

	if(checkcol(2,&col)==1)
	{
		gLastKey=chartable[2][col];
		return gLastKey;
	}

	if(checkcol(3,&col)==1)
	{
		gLastKey=chartable[3][col];
		return gLastKey;
	}
	return 0;
}

⌨️ 快捷键说明

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