单片机实现矩阵按钮点击实现数字1-9的代码
时间: 2024-03-08 18:50:48 浏览: 25
以下是单片机实现矩阵按钮点击实现数字1-9的代码,以8051单片机为例:
```
#include <reg51.h>
#define KEY P0 // 定义矩阵键盘连接的端口
unsigned char code keymap[4][4] = {{1, 2, 3, 0xA},
{4, 5, 6, 0xB},
{7, 8, 9, 0xC},
{0xE, 0, 0xF, 0xD}}; // 定义键码映射表,最后一列为特殊功能键
void delay(unsigned int i) // 延时函数
{
unsigned int j, k;
for(j = i; j > 0; j--)
for(k = 110; k > 0; k--);
}
unsigned char keyscan() // 扫描矩阵键盘函数
{
unsigned char i, j, keyout;
KEY = 0x0F; // 先将列设置成0
keyout = KEY; // 读取行状态,判断是否有按键按下
keyout |= 0xF0; // 将列设置成1,准备扫描下一列
for(i = 0; i < 4; i++) // 依次扫描四列
{
KEY = ~(0x01 << i); // 将当前列设置为0
delay(5); // 延时等待稳定
if((KEY & 0x0F) != 0x0F) // 判断是否有按键按下
{
for(j = 0; j < 4; j++) // 扫描四行
{
if((KEY & (0x01 << j)) == 0) // 判断当前行是否有按键按下
{
return keymap[j][i]; // 返回键码
}
}
}
KEY = 0x0F; // 将列设置成0,准备扫描下一列
keyout = KEY; // 读取行状态,判断是否有按键按下
keyout |= 0xF0; // 将列设置成1,准备扫描下一列
}
return 0xFF; // 没有按键按下,返回0xFF
}
void main()
{
unsigned char keyvalue;
while(1)
{
keyvalue = keyscan(); // 扫描矩阵键盘获取键值
if(keyvalue != 0xFF) // 判断是否有按键按下
{
if(keyvalue <= 9) // 判断按下的是否为数字键
{
P1 = keyvalue; // 将数字键值显示在P1口
}
}
}
}
```
上述代码通过扫描矩阵键盘获取用户按下的键值,然后判断是否为数字键,并将数字键值显示在P1口上。您可以根据实际情况进行修改。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)