4×4矩阵键盘与单片机的连接如图11-47所示,编写程序使不同按键按下时在数码管上能显示该健编号的十六进制码。
时间: 2024-04-01 12:36:24 浏览: 23
根据图11-47所示的连接,我们可以将4×4矩阵键盘的4行和4列分别连接到单片机的4个输入引脚和4个输出引脚上。然后可以使用以下代码来检测按键的按下情况并在数码管上显示相应的十六进制码:
```c
#include <reg51.h>
#define ROW P0 // 将4行连接到P0口
#define COL P1 // 将4列连接到P1口
#define DISP P2 // 将数码管连接到P2口
unsigned char code table[] = {0xEE, 0xED, 0xEB, 0xE7, // 存储每个按键的十六进制码
0xDE, 0xDD, 0xDB, 0xD7,
0xBE, 0xBD, 0xBB, 0xB7,
0x7E, 0x7D, 0x7B, 0x77};
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = t; i > 0; i--)
for(j = 110; j > 0; j--);
}
void main()
{
unsigned char row, col, key;
while(1)
{
ROW = 0x0F; // 将所有行置为低电平
col = COL; // 读取列的状态
col &= 0x0F; // 只保留低4位,高4位清零
if(col != 0x0F) // 判断是否有按键按下
{
delay(10); // 延时一段时间以去抖动
col = COL;
col &= 0x0F;
if(col != 0x0F) // 再次判断是否有按键按下
{
ROW = 0xFE; // 将第一行置为低电平
col = COL;
col &= 0x0F;
if(col != 0x0F) // 判断第一行是否有按键按下
{
key = 0;
while(col != 0x0F) // 等待按键释放
{
col = COL;
col &= 0x0F;
key |= col; // 记录按键所在列的状态
}
DISP = table[key]; // 在数码管上显示按键编号的十六进制码
}
ROW = 0xFD; // 将第二行置为低电平
col = COL;
col &= 0x0F;
if(col != 0x0F) // 判断第二行是否有按键按下
{
key = 4;
while(col != 0x0F) // 等待按键释放
{
col = COL;
col &= 0x0F;
key |= col; // 记录按键所在列的状态
}
DISP = table[key]; // 在数码管上显示按键编号的十六进制码
}
ROW = 0xFB; // 将第三行置为低电平
col = COL;
col &= 0x0F;
if(col != 0x0F) // 判断第三行是否有按键按下
{
key = 8;
while(col != 0x0F) // 等待按键释放
{
col = COL;
col &= 0x0F;
key |= col; // 记录按键所在列的状态
}
DISP = table[key]; // 在数码管上显示按键编号的十六进制码
}
ROW = 0xF7; // 将第四行置为低电平
col = COL;
col &= 0x0F;
if(col != 0x0F) // 判断第四行是否有按键按下
{
key = 12;
while(col != 0x0F) // 等待按键释放
{
col = COL;
col &= 0x0F;
key |= col; // 记录按键所在列的状态
}
DISP = table[key]; // 在数码管上显示按键编号的十六进制码
}
}
}
}
}
```
这段代码的实现原理是:首先将4行置为低电平,然后读取4列的状态,判断是否有按键按下。如果有按键按下,就将行依次置为低电平,再次读取列的状态,判断哪一行有按键按下,然后等待按键释放并记录按键所在列的状态,最后在数码管上显示相应的十六进制码。注意,由于矩阵键盘的按键是有抖动的,所以需要使用延时函数去抖动。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)