蓝桥杯 矩阵键盘的使用

文章目录

 


前言

矩阵键盘是通过行列扫描检测,相当于坐标确定按键按下的位置。

矩阵键盘相对独立按键来说,占用I/O口较少,4X4键盘共16个位置,占用了8(4+4)个I/O口。独立按键8个I/O口对应8个按键。

使用情况:

当按键使用量少时,使用独立按键,操作更加方便。

当按键使用量较多时,建议使用矩阵键盘,节省I/O。


 

一、矩阵键盘的原理

图片来源:百度

如图所示,共占用了8条线路(8个I/O口),垂直方向连接按键的4条线路分别为L1、L2、L3、L4;水平方向连接按键的4条线路分别为H1、H2、H3、H4。

将其想象为坐标,L为x方向,H为y方向。当S1按下时,坐标为(1,1);当S8按下时,坐标为(4,2)。

按照上面的理解,矩阵键盘在没有按下的状态为高电平,即为'1',当有按键按下时,状态为'0'。

矩阵键盘按照行列式方法进行扫描,如按列扫描就是先检测x=1的一列上是否有为0的按键,再扫描x=2的一列上是否有为0的按键,x=3的一列上是否有为0的按键,x=4的一列上是否有为0的按键。但是,检测到只是检测到,矩阵键盘的使用需要在检测到之后执行相应的代码。如:若(2,3)按键按下,输出(2,3)。

 

二、使用步骤

1.准备

矩阵键盘的使用中会存在逻辑运算,何为逻辑运算?就是与或非等运算。

接下来通过实例进行讲解逻辑运算:

设P0=XXXX XXXX(X为未知状态,不知道为0还是为1)

(1)或运算(符号: '|')

P0|0x0f
XXXX XXXX 
0000 1111 
---------
XXXX 1111

通过或运算,可将P0的后4为置1;

 

(2)与运算(符号: '&')

P0&0x0f
XXXX XXXX 
0000 1111 
---------
0000 XXXX

通过或运算,可将P0的前4为置0;

(3)非运算(符号: '~')设P0=0101 0101

P0=~P0
0101 0101
---------
1010 1010

通过非运算,可将P0的0变为1,1变为0;

2.代码

代码如下(示例):

unsigned char temp;//定义temp变量
	
	P44=0;P42=1;P3=0X7F;//0111 1111 扫描第一列(行)
	temp=P3;						//0111 1111
	temp=temp&0X0F;//0111 1111 & 0000 1111 == 0000 1111
                    //通过逻辑运算将temp的高4位置0
	if(temp!=0X0F)        /检测到有按键按下
	{                        //
		Delayms(5);          //矩阵键盘消抖
		temp=P3;			///重新赋值
		temp=temp&0X0F;      //
		if(temp!=0X0F)       //再次判断
		{
			temp=P3;
			switch(temp)//当temp的低4位中有按键按下时,0111 1111 的低4位就会改变
			{               //通过这种方法检测按键
				case 0X7E: num=1;break;
				case 0X7D: num=2;break;
				case 0X7B: num=3;break;
				case 0X77: num=4;break;
			}
			while(temp!=0x0f)        //当按键没有松手时,重新赋值,再次检测
			{
				temp=P3;
				temp=temp&0X0F;
			}	
		}
	}
	
	P44=1;P42=0;P3=0XBF;//1011 1111     //后面是顺序扫描剩余列,方法相同,数值稍有改变
	temp=P3;						//0111 1110
	temp=temp&0X0F;//0111 1110 & 0000 1111 == 0000 1111
	if(temp!=0X0F)
	{
		Delayms(5);
		temp=P3;						
		temp=temp&0X0F;
		if(temp!=0X0F)
		{
			temp=P3;
			switch(temp)
			{
				case 0XBE: num=5;break;
				case 0XBD: num=6;break;
				case 0XBB: num=7;break;
				case 0XB7: num=8;break;
			}
			while(temp!=0x0f)
			{
				temp=P3;
				temp=temp&0X0F;
			}	
		}
	}
	
	P44=1;P42=1;P3=0XDF;//1101 1111 
	temp=P3;						//0111 1110
	temp=temp&0X0F;//0111 1110 & 0000 1111 == 0000 1111
	if(temp!=0X0F)
	{
		Delayms(5);
		temp=P3;						
		temp=temp&0X0F;
		if(temp!=0X0F)
		{
			temp=P3;
			switch(temp)
			{
				case 0XDE: num=9;break;
				case 0XDD: num=10;break;
				case 0XDB: num=11;break;
				case 0XD7: num=12;break;
			}
			while(temp!=0x0f)
			{
				temp=P3;
				temp=temp&0X0F;
			}	
		}
	}
	
	P44=1;P42=1;P3=0XEF;//1110 1111 
	temp=P3;						//0111 1110
	temp=temp&0X0F;//0111 1110 & 0000 1111 == 0000 1111
	if(temp!=0X0F)
	{
		Delayms(5);
		temp=P3;						
		temp=temp&0X0F;
		if(temp!=0X0F)
		{
			temp=P3;
			switch(temp)
			{
				case 0XEE: num=13;break;
				case 0XED: num=14;break;
				case 0XEB: num=15;break;
				case 0XE7: num=16;break;
			}
			while(temp!=0x0f)
			{
				temp=P3;
				temp=temp&0X0F;
			}	
		}
	}

 


总结

这就是矩阵键盘的使用及原理,在使用矩阵键盘时,要注意矩阵键盘和独立按键的短接线接在哪个位置。

还有就是,并非所有情况都适用矩阵键盘,矩阵键盘节省I/O口,但是相应的增加了代码量,占用了大量内存。在不需要节省I/O口或内存有限时,应使用独立按键。

——————————————————————————————————————
本文纯原创,如有侵权请联系删除,如有错误,敬请批评指正,谢谢大家。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ct107d单片机是一种常见的单片机类型,广泛应用于各种电子设备中。蓝桥杯是中国著名的计算机及信息技术竞赛,矩阵键盘是一种常见的输入设备。下面我将介绍ct107d单片机如何与蓝桥杯矩阵键盘配合使用。 首先,ct107d单片机具有输入输出接口,可以与外部设备进行数据交互。蓝桥杯矩阵键盘通常采用矩阵排列的按钮形式,可以通过多个引脚与单片机相连。我们需要在单片机上配置对应的引脚,使其与蓝桥杯矩阵键盘的按键相对应。 然后,我们需要编写程序来读取输入的按键信息。在ct107d单片机上,可以使用GPIO口中断来实现按键的检测功能。当按键被按下时,引脚电平发生变化,触发GPIO口中断,单片机会执行相应的中断服务程序。我们可以在中断服务程序中读取按键的状态,并根据不同按键进行不同的处理。 在程序设计过程中,我们可以利用矩阵键盘的特性,将按键映射为矩阵的行和列。通过循环扫描的方式,逐一检测矩阵中的每个按键,并根据按键的状态进行相应的操作。例如,当按键按下时,可以执行一些特定的功能,如发送数据、改变显示内容等。 总结起来,ct107d单片机蓝桥杯矩阵键盘的配合使用,需要在单片机上配置引脚连接,编写相应的程序来读取按键信息,并根据按键状态进行相应的处理。这样,就能够实现方便的按键输入功能,在蓝桥杯竞赛及其他实际应用中发挥作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值