列Y0没有按键按下介绍列扫描法的流程键盘扫描

扫描方法是在程序中逐行或逐列地扫描查询键盘界面,根据端口的输入情况判断按下的是哪个键,然后分别调用不同的按键处理子程序。这里以4×4矩阵键盘为例介绍列扫描方式。

使用列扫描时,矩阵键盘的电路结构如图所示,其中矩阵键盘的行线应通过上拉电阻连接到电源正极。此时若无按键按下,则对应行线为高;如果按下按钮,则相应交叉点的行列线短路,行线的输出取决于与该行相连的列的功率。平坦状态。通过逐列扫描键盘,可以实现对矩阵键盘的检测。

图片[1]-列Y0没有按键按下介绍列扫描法的流程键盘扫描-老王博客

扫描方法的流程

键盘扫描方法流程图如图所示。键盘扫描的一般步骤如下。

图片[2]-列Y0没有按键按下介绍列扫描法的流程键盘扫描-老王博客

(1)判断按钮是否被按下。在程序中,输出所有列行(Y0~Y3)为“0”,此时读取行行的状态( X0~X3).如果行线全为“1”,表示此时没有按键按下;如果行线不全为“1”,表示有按键按下。然后继续以下步骤。

(2)去抖按键。当判断有按键被按下时,程序延时10ms左右4*4矩阵键盘判断程序,然后再次判断键盘状态。如果还是按键状态,确定有按键按下,否则视为按键机械抖动。

(3)扫描按钮的位置,这是扫描方法在程序中,先让Y0列线输出“0”,其他三列线输出“1”。然后读取行线状态,如果行线(X0~X3)都输出“1”。如果行线(X0~X3)不都是高电平),则表示与低电平行线相交的键,Y0被按下,如果Y0列没有按下按钮,则以同样的方法检查Y1、Y2和Y3列是否有按钮按下。方式,逐列扫描,可以找到按钮(X,Y)的坐标位置,即键值。

(4)按钮程序处理。根据按钮的键值,执行相应的程序处理子程序。有时,为了保证每按一次按钮只执行一次程序处理,可以判断是否放开按键,如果放开按键,则重新开始按键扫描操作。

扫描方式C51编程

假设8051单片机的P1口接矩阵键盘,矩阵键盘的列线(Y0~Y3)接单片机P1.0~ P1.3,而行线(X0~X3)连接到P1.4~P1.7。在C51语言中,键盘的例子列扫描子程序如下。

int KeyScan()
{
	unsigned char k,k_temp;
	P1=0xF0;//低位置0,准备查询按键
	k=P1;//取得当前P1口的状态
	if(k!=0xF0)
	{//如果有变化则表示有键按下
	delay();//延时,进行去抖动
	k_temp=P1;
	if(k==k_temp)//确实有按键按下
	{
		k=0xFE;
		do//循环扫描每一列
		{
			P1=k;
			if(k!=P1)
			{
				switch(P1)//判断按键,并返回键值
				{
					//第1列
					case 0x7e:{return 0;break;}//返回键值0
					case 0xbe:{return 1;break;}//返回键值1
					case 0xde:{return 2;break;}//返回键值2
					case 0xee:{return 3;break;}//返回键值3
					//第2列
					case 0x7d:{return 4;break;}//返回键值4
					case 0xbd:{return 5;break;}//返回键值5
					case 0xdd:{return 6;break;}//返回键值6
					case 0xed:{return 7;break;}//返回键值7
					//第3列
					case 0x7b:{return 8;break;}//返回键值8
					case 0xbb:{return 9;break;}//返回键值9
					case 0xdb:{return 10;break;}//返回键值10
					case 0xeb:{return 11;break;}//返回键值11
					//第4列
					case 0x77:{return 12;break;}//返回键值12
					case 0xb7:{return 13;break;}//返回键值13
					case 0xd7:{return 14;break;}//返回键值14
					case 0xe7:{return 15;break;}//返回键值15
				}
			}
			k=_crol_(k,1);//移位,进入下一列扫描
		}while(k!=0xEF);//超过范围,退出列扫描
	}
}

在这个程序中,首先将所有行设置为0,然后读取端口P1。如果P1口不为0xF04*4矩阵键盘判断程序,则表示有按键动作,然后执行延时程序delay(),然后再次判断确认按键被按下。然后通过do-while循环和移位操作,逐列扫描,确定key的位置,返回key值。

这个子程序可以在程序中循环调用,对key的输入进行扫描,然后根据返回的key值执行相应的程序处理。在执行按键处理子程序时,单片机无法再次响应按键请求。因此,单片机的按键处理子程序应该执行的任务越少,占用的CPU运行时间越少。并且键盘扫描尽量安排在程序的备件中。时间满足实时准确按钮请求的目的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论