51单片机的矩阵键盘扫描

矩阵按键

51单片机的矩阵键盘扫描
图为一4*4的矩阵按键在开发板上与P3接口连接
(1)一般用行列扫描的方式进行按键的识别。(通俗来讲就是先判断哪一列被按下了,再判断哪一行被按下了,通过交叉可以得出哪一个按键被按下了。)
(2)矩阵键盘不支持同时按下
(3)看矩阵键盘的原理图:4个IO口控制行,4个IO口控制列。

代码

首先是延时函数,用于按键的消抖

void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}

按键扫描函数
分别扫描行和列,识别出按键

unsigned char Key_Init()
{
	unsigned char keyvalue;
	key=0xf0;  					//列扫描
	if(key!=0xf0)
	{
		Delay10ms(); 		 //延时10ms 消抖
		if(key!=0xf0)
		{
			switch (key)
			{
				case 0xe0: keyvalue=16;break;
				case 0xd0: keyvalue=12;break;
				case 0xb0: keyvalue=8 ;break;
				case 0x70: keyvalue=4 ;break;
			}
				key=0x0f;     //行扫描
				if(key!=0x0f)
				{
					Delay10ms();  //延时10ms 消抖
					if(key!=0x0f)
					{
						switch (key)
						{
							case 0x0e: keyvalue=keyvalue+3;break;
							case 0x0d: keyvalue=keyvalue+2;break;
							case 0x0b: keyvalue=keyvalue+1;break;
							case 0x07: keyvalue=keyvalue+0;break;
						}
						while(key!=0x0f);
					}
				}
		}
	}
	return keyvalue;
}

将按键数值读取后在数码管界面函数中显示出

void Ncube_buff()
{
	Ncubeshow[0] = Ncubeduan[0];
	Ncubeshow[1] = Ncubeduan[0];
	Ncubeshow[2] = Ncubeduan[0];
	Ncubeshow[3] = Ncubeduan[0];
	Ncubeshow[4] = Ncubeduan[0];
	Ncubeshow[5] = Ncubeduan[0];
	Ncubeshow[6] = Ncubeduan[key_number/10];
	Ncubeshow[7] = Ncubeduan[key_number%10];
}

最后主函数

void main()
{
	Close_buzz();
	Timer0Init();
	while(1)
	{
		key_number =  Key_Init();
		Ncube_buff();
	}
}

按下不同的按键后数码管最后两位显示出按下的按键值。

上一篇:vue中axios封装,对浏览器状态码进行弹窗提醒,并配置接口请求时的loading动画;


下一篇:最长上升子序列(LIS)