51单片机矩阵键盘程序按列扫描的C语言程序
时间: 2023-08-04 13:09:28 浏览: 108
这是一个简单的51单片机矩阵键盘按列扫描的C语言程序:
```c
#include <reg51.h>
sbit K1=P1^0; // 行扫描
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit C1=P1^4; // 列扫描
sbit C2=P1^5;
sbit C3=P1^6;
sbit C4=P1^7;
void delay(unsigned int xms) // 延时函数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key_scan() // 按键扫描函数
{
unsigned char key_value=0;
C1=0;C2=1;C3=1;C4=1; // 第一列扫描
if(K1==0){delay(10);if(K1==0)key_value=1;} // 判断按键是否按下
if(K2==0){delay(10);if(K2==0)key_value=2;}
if(K3==0){delay(10);if(K3==0)key_value=3;}
if(K4==0){delay(10);if(K4==0)key_value=4;}
C1=1;C2=0;C3=1;C4=1; // 第二列扫描
if(K1==0){delay(10);if(K1==0)key_value=5;}
if(K2==0){delay(10);if(K2==0)key_value=6;}
if(K3==0){delay(10);if(K3==0)key_value=7;}
if(K4==0){delay(10);if(K4==0)key_value=8;}
C1=1;C2=1;C3=0;C4=1; // 第三列扫描
if(K1==0){delay(10);if(K1==0)key_value=9;}
if(K2==0){delay(10);if(K2==0)key_value=10;}
if(K3==0){delay(10);if(K3==0)key_value=11;}
if(K4==0){delay(10);if(K4==0)key_value=12;}
C1=1;C2=1;C3=1;C4=0; // 第四列扫描
if(K1==0){delay(10);if(K1==0)key_value=13;}
if(K2==0){delay(10);if(K2==0)key_value=14;}
if(K3==0){delay(10);if(K3==0)key_value=15;}
if(K4==0){delay(10);if(K4==0)key_value=16;}
if(key_value!=0) // 判断是否有按键按下
{
// 处理按键事件
}
}
void main()
{
while(1) // 循环扫描按键
{
key_scan();
}
}
```
该程序使用按列扫描的方法来扫描矩阵键盘,通过设置列为输出低电平,行为输入状态,逐列扫描行,检测是否有按键按下。如果检测到按键按下,则处理按键事件。
阅读全文