ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51单片机的矩阵键盘扫描

2022-01-07 13:31:27  阅读:151  来源: 互联网

标签:case break Ncubeduan 51 键盘 单片机 keyvalue key Ncubeshow


矩阵按键

在这里插入图片描述
图为一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();
	}
}

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

标签:case,break,Ncubeduan,51,键盘,单片机,keyvalue,key,Ncubeshow
来源: https://blog.csdn.net/qq_51116533/article/details/122362132

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有