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

📄 key.c

📁 单片机4x4行列扫描键盘
💻 C
字号:
/*===============================================================
 
  程序名称:单片机行列扫描读取4x4距阵键盘 						  
  -----------------------------------------------
	( http://www.bluepw.com  http://www.bluepw.cn )


  Agni 07-SV开发板 4X4键盘与单片机接线方式:

	 P2.0--P2.3为键盘列线   P2.4--P2.7为键盘行线

  注:(1):主芯片AT89S52使用11.0592M晶振

	 (2):Keil uV3 3.30编译运行通过

	 (3):本例程在 Agni 07-EV 开发平台上成功运行通过

	 (4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.

==================================================================*/
#include<at89x52.h>

unsigned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
							0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};	  //数码管 0-F 代码 
unsigned char k;      		 //设置全局变量k 为键盘的键值

void key_delay(void)  		 //延时
{
	int t;
	for(t=0;t<500;t++);
}

void keyscan(void)	 //键盘扫描函数
{
	unsigned char a;					
	P2 = 0xf0;				 //键盘初始化
	if(P2!=0xf0)			 //有键按下?
	{
		key_delay();		 //延时
		if(P2!=0xf0)		 //确认真的有键按下?
		{
			P2 = 0xfe;		 //使行线P2.4为低电平,其余行为高电平
			key_delay();
			a = P2;			 //a作为缓存
			switch (a)		 //开始执行行列扫描
			{
				case 0xee:k=0;break;
				case 0xde:k=1;break;
				case 0xbe:k=2;break;
				case 0x7e:k=3;break;
				default:P2 = 0xfd;	   //使行线P2.5为低电平,其余行为高电平

				a = P2;
				switch (a)
				{
					case 0xed:k=4;break;
					case 0xdd:k=5;break;
					case 0xbd:k=6;break;
					case 0x7d:k=7;break;
					default:P2 = 0xfb;	   //使行线P2.6为低电平,其余行为高电平

					a = P2;
					switch (a)
					{
						case 0xeb:k=8;break;
						case 0xdb:k=9;break;
						case 0xbb:k=10;break;
						case 0x7b:k=11;break;
						default:P2 = 0xf7;	  //使行线P2.7为低电平,其余行为高电平

						a = P2;
						switch (a)
						{
							case 0xe7:k=12;break;
							case 0xd7:k=13;break;
							case 0xb7:k=14;break;
							case 0x77:k=15;break;
							default:break;	   			   			        
						}
					}
				}
				break;
			}
		}
	}
}

//********主函数*********************
void main(void)
{
	P1=0xff;
	while(1)
	{
		keyscan();			//调用键盘扫描函数
		switch(k)			//查找按键对应的数码管显示代码
		{
			case 0:P0=Dig[0];break;
			case 1:P0=Dig[1];break;
			case 2:P0=Dig[2];break;
			case 3:P0=Dig[3];break;
			case 4:P0=Dig[4];break;
			case 5:P0=Dig[5];break;
			case 6:P0=Dig[6];break;
			case 7:P0=Dig[7];break;
			case 8:P0=Dig[8];break;
			case 9:P0=Dig[9];break;
			case 10:P0=Dig[10];break;
			case 11:P0=Dig[11];break;
			case 12:P0=Dig[12];break;
			case 13:P0=Dig[13];break;
			case 14:P0=Dig[14];break;
			case 15:P0=Dig[15];break;
			default:break;	 //退出
		}
	}	
}

//***************************  end  ******************************************

⌨️ 快捷键说明

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