c51单片机矩阵键盘4x4c语言
时间: 2023-07-07 19:45:55 浏览: 85
以下是c51单片机矩阵键盘4x4的c语言代码示例:
```
#include <reg52.h> //头文件
sbit L1 = P1^0; //定义行引脚
sbit L2 = P1^1;
sbit L3 = P1^2;
sbit L4 = P1^3;
sbit C1 = P1^4; //定义列引脚
sbit C2 = P1^5;
sbit C3 = P1^6;
sbit C4 = P1^7;
unsigned char code table[4][4] = {'1', '2', '3', 'A', '4', '5', '6', 'B', '7', '8', '9', 'C', '*', '0', '#', 'D'}; //按键值表格
void delay(unsigned int i) //延时函数
{
while(i--);
}
unsigned char key_scan() //键盘扫描函数
{
unsigned char i, j;
unsigned char key_value = 0;
L1 = 0; //第一行扫描
L2 = 1;
L3 = 1;
L4 = 1;
if(C1 == 0)
{
delay(1000); //延时去抖动
if(C1 == 0)
{
key_value = table[0][0]; //获取按键值
}
}
else if(C2 == 0)
{
delay(1000);
if(C2 == 0)
{
key_value = table[0][1];
}
}
else if(C3 == 0)
{
delay(1000);
if(C3 == 0)
{
key_value = table[0][2];
}
}
else if(C4 == 0)
{
delay(1000);
if(C4 == 0)
{
key_value = table[0][3];
}
}
L1 = 1; //第二行扫描
L2 = 0;
L3 = 1;
L4 = 1;
if(C1 == 0)
{
delay(1000);
if(C1 == 0)
{
key_value = table[1][0];
}
}
else if(C2 == 0)
{
delay(1000);
if(C2 == 0)
{
key_value = table[1][1];
}
}
else if(C3 == 0)
{
delay(1000);
if(C3 == 0)
{
key_value = table[1][2];
}
}
else if(C4 == 0)
{
delay(1000);
if(C4 == 0)
{
key_value = table[1][3];
}
}
L1 = 1; //第三行扫描
L2 = 1;
L3 = 0;
L4 = 1;
if(C1 == 0)
{
delay(1000);
if(C1 == 0)
{
key_value = table[2][0];
}
}
else if(C2 == 0)
{
delay(1000);
if(C2 == 0)
{
key_value = table[2][1];
}
}
else if(C3 == 0)
{
delay(1000);
if(C3 == 0)
{
key_value = table[2][2];
}
}
else if(C4 == 0)
{
delay(1000);
if(C4 == 0)
{
key_value = table[2][3];
}
}
L1 = 1; //第四行扫描
L2 = 1;
L3 = 1;
L4 = 0;
if(C1 == 0)
{
delay(1000);
if(C1 == 0)
{
key_value = table[3][0];
}
}
else if(C2 == 0)
{
delay(1000);
if(C2 == 0)
{
key_value = table[3][1];
}
}
else if(C3 == 0)
{
delay(1000);
if(C3 == 0)
{
key_value = table[3][2];
}
}
else if(C4 == 0)
{
delay(1000);
if(C4 == 0)
{
key_value = table[3][3];
}
}
return key_value; //返回按键值
}
void main()
{
unsigned char key_value = 0;
while(1)
{
key_value = key_scan(); //获取键值
if(key_value != 0)
{
P0 = key_value; //输出键值
}
}
}
```
该代码实现了一个简单的4x4矩阵键盘扫描,并且可以输出键值到P0口。你可以根据需要进行修改和优化。