蓝桥杯开发板学习——移位运算符法矩阵键盘&矩阵键盘长短按

矩阵键盘是蓝桥杯开发板的一个重要模块,矩阵键盘的扫描思想在以后的单片机学习中也是一个重要的思想,除了通过条件判断的方式实现矩阵键盘,我们还可以通过移位运算符更方便的实现矩阵键盘;

一、移位运算符实现矩阵键盘

二、加入长短按功能

一、移位运算符实现矩阵键盘

我么可以对一行或列进行扫描后,将数据左移四位(<<4)后腾出空间,将下一行或列写入,每次将扫描数据加入后都左移四位,这样我们就可以通过一个16位的变量存储一轮扫描获得的每一行或列的信息,代码实现如下:

unsigned char Key_Scan(void)
{
	unsigned int Key_New;
	unsigned char Key_Value;
	P3 |= 0x0F;
	P44 = 0; P42 = 1; P35 = 1; P34 = 1;  // 第一列
	Key_New = P3 & 0X0F;
	P44 = 1; P42 = 0; P35 = 1; P34 = 1;  // 第二列
	Key_New = (Key_New << 4) | (P3 & 0X0F); 
	P44 = 1; P42 = 1; P35 = 0; P34 = 1;  // 第三列
	Key_New = (Key_New << 4) | (P3 & 0X0F); 
	P44 = 1; P42 = 1; P35 = 1; P34 = 0;  // 第四列
	Key_New = (Key_New << 4) | (P3 & 0X0F); 
	switch(~Key_New)
	{
		case 0x8000: Key_Value = 1; break;
		case
蓝桥杯开发板使用的矩阵键盘线反转是一种通过行列扫描的方式来检测按键的按下。这种方通常需要将矩阵键盘的行线和列线分别与微控制器的I/O端口相连,并通过设置行线为输出,列线为输入的方式来实现。 在编写代码时,首先需要初始化行列线对应的I/O端口。接着,通过将行线置为低电平,列线设置为高阻态,然后逐行读取列线的状态来检测按键。如果某一行的某列被按下,对应的列线将被拉低到低电平。通过这种方式,我们可以判断出哪一个按键被按下。 这里提供一个简化的代码示例,假设我们使用的是8x8的矩阵键盘: ```c // 假设行线连接到P1口,列线连接到P2口 #define MATRIX_KEY_PORT_ROW P1 #define MATRIX_KEY_PORT_COL P2 // 初始化矩阵键盘接口 void initMatrixKey() { MATRIX_KEY_PORT_ROW = 0xFF; // 设置行线为高电平(不选中) MATRIX_KEY_PORT_COL = 0x00; // 设置列线为输入(高阻态) } // 检测矩阵键盘按键 char scanMatrixKey() { char row, col, key = 0xFF; // 0xFF表示没有按键被按下 for(row = 0; row &lt; 8; row++) { MATRIX_KEY_PORT_ROW = ~(1 &lt;&lt; row); // 将当前行置为低电平,其它行保持高电平 for(col = 0; col &lt; 8; col++) { if(!(MATRIX_KEY_PORT_COL &amp; (1 &lt;&lt; col))) { // 检测列线状态 key = (row * 8) + col; // 计算按键编码 break; // 找到按键后退出内层循环 } } if(key != 0xFF) break; // 找到按键后退出外层循环 } return key; // 返回按键编码,如果没有按键被按下则返回0xFF } ``` 请注意,这段代码是一个非常简化的示例,实际应用中可能需要进行消抖处理,以及更复杂的状态检测以确保按键的准确识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值